vsavchenko updated this revision to Diff 345145. vsavchenko added a comment.
Modify test Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D102240/new/ https://reviews.llvm.org/D102240 Files: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp clang/test/Analysis/PR50268.c Index: clang/test/Analysis/PR50268.c =================================================================== --- /dev/null +++ clang/test/Analysis/PR50268.c @@ -0,0 +1,12 @@ +// 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 +} Index: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp +++ clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp @@ -1487,15 +1487,18 @@ // 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) {
Index: clang/test/Analysis/PR50268.c =================================================================== --- /dev/null +++ clang/test/Analysis/PR50268.c @@ -0,0 +1,12 @@ +// 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 +} Index: clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp +++ clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp @@ -1487,15 +1487,18 @@ // 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) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits