vsavchenko added a comment.

In D82445#2284680 <https://reviews.llvm.org/D82445#2284680>, @martong wrote:

> Hi Valery,
>
> Together with @steakhal we have found a serious issue.
> The below code crashes if you compile with `-DEXPENSIVE_CHECKS`.
> The analyzer goes on an unfeasible path, the State has a contradiction.
>
> We think that `getRange(Sym("a != b")` should return a set that does not 
> contain `0`.
> https://github.com/llvm/llvm-project/blob/e63b488f2755f91e8147fd678ed525cf6ba007cc/clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp#L2064
> Currently that goes down to `infer(QualType("int"))` which results a 
> `RangeSet[INT_MIN, INT_MAX]`.
> Stach trace attached.
>
>   // RUN: %clang_analyze_cc1 %s \
>   // RUN:   -analyzer-checker=core \
>   // RUN:   -analyzer-checker=debug.ExprInspection \
>   // RUN:   -triple x86_64-unknown-linux \
>   // RUN:   -verify
>   
>   // expected-no-diagnostics
>   
>   void f(int a, int b) {
>     int c = b - a;
>     if (c <= 0)
>       return;
>     // c > 0
>     // b - a > 0
>     // b > a
>     if (a != b)
>       return;
>     // a == b
>     // This is an unfeasible path, the State has a contradiction.
>     if (c < 0) // crash here
>       ;
>   }
>
>
>
>   #0  (anonymous 
> namespace)::SymbolicRangeInferrer::inferRange<clang::ento::SymExpr const*> 
> (BV=..., F=..., State=..., Origin=0x55b9979bed08) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:715
>   #1  0x00007fa2314dddc9 in (anonymous 
> namespace)::RangeConstraintManager::getRange (this=0x55b99791ab10, State=..., 
> Sym=0x55b9979bed08) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:2012
>   #2  0x00007fa2314de1e9 in (anonymous 
> namespace)::RangeConstraintManager::assumeSymEQ (this=0x55b99791ab10, St=..., 
> Sym=0x55b9979bed08, Int=..., Adjustment=...) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/RangeConstraintManager.cpp:2064
>   #3  0x00007fa23150470d in 
> clang::ento::RangedConstraintManager::assumeSymUnsupported 
> (this=0x55b99791ab10, State=..., Sym=0x55b9979bed08, Assumption=false) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/RangedConstraintManager.cpp:136
>   #4  0x00007fa2315353a9 in clang::ento::SimpleConstraintManager::assumeAux 
> (this=0x55b99791ab10, State=..., Cond=..., Assumption=false) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp:62
>   #5  0x00007fa23153518b in clang::ento::SimpleConstraintManager::assume 
> (this=0x55b99791ab10, State=..., Cond=..., Assumption=false) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp:46
>   #6  0x00007fa2315350e5 in clang::ento::SimpleConstraintManager::assume 
> (this=0x55b99791ab10, State=..., Cond=..., Assumption=false) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/SimpleConstraintManager.cpp:41
>   #7  0x00007fa2313d39b3 in clang::ento::ConstraintManager::assumeDual 
> (this=0x55b99791ab10, State=..., Cond=...) at 
> ../../git/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h:105
>   #8  0x00007fa2313d3bfc in clang::ento::ProgramState::assume 
> (this=0x55b9979beef8, Cond=...) at 
> ../../git/llvm-project/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h:681
>   #9  0x00007fa231436b8a in 
> clang::ento::ExprEngine::evalEagerlyAssumeBinOpBifurcation 
> (this=0x7fffdf9ce9d0, Dst=..., Src=..., Ex=0x55b9979893f0) at 
> ../../git/llvm-project/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp:3058

Hi Gabor,

I'll take a look at this problem ASAP!

Thanks for such a thorough analysis of the issue!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82445/new/

https://reviews.llvm.org/D82445

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to