// This is an infeasible assumption.
return nullptr;
- ProgramStateRef NewState = setConstraint(State, Sym, NewConstraint);
- if (auto Equality = EqualityInfo::extract(Sym, Int, Adjustment)) {
- // If the original assumption is not Sym + Adjustment !=/</> Int,
- // we should invert IsEquality flag.
- Equality->IsEquality = Equality->IsEquality != EQ;
- return track(NewState, *Equality);
+ if (ProgramStateRef NewState = setConstraint(State, Sym, NewConstraint)) {
+ if (auto Equality = EqualityInfo::extract(Sym, Int, Adjustment)) {
+ // If the original assumption is not Sym + Adjustment !=/</> Int,
+ // we should invert IsEquality flag.
+ Equality->IsEquality = Equality->IsEquality != EQ;
+ return track(NewState, *Equality);
+ }
+
+ return NewState;
}
- return NewState;
+ return nullptr;
}
ProgramStateRef track(ProgramStateRef State, EqualityInfo ToTrack) {
--- /dev/null
+// RUN: %clang_analyze_cc1 -w -analyzer-checker=core -verify %s \
+// RUN: -analyzer-config eagerly-assume=true
+
+// expected-no-diagnostics
+
+
+int test(unsigned long a, unsigned long c, int b) {
+ c -= a;
+ if (0 >= b) {}
+ c == b;
+ return c ? 0 : 2; // no-crash
+}