ismailp added inline comments.

================
Comment at: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp:749
@@ -748,3 @@
-
-  assert (Src != Dst && "Self-edges are not allowed.");
-
----------------
krememek wrote:
> Did you look at the test case that causes this assertion to fail?  I think it 
> would be good to know if this assertion is actually safe to remove.  I'm a 
> bit skeptical that it is safe to remove, and that (per my last review) that 
> this may be detecting that an invariant is getting violated.  If you are not 
> certain how to investigate that part, please report which test is triggering 
> the problem and myself or someone else familiar with the engine core can take 
> a look.  Thanks.
There wasn't a test that checks Ubigraph generator. After making the patch 
below, I picked a few existing tests, and added '-analyzer-viz-egraph-ubigraph' 
to their RUN lines. Then, I ran lit.py, and 'tests/Analysis/cfg.cpp' has 
crashed. I have minimized the test case to understand the problem.

Self-loop happens during implicit destructor of `Aggregate` in the following 
minimized test case:
```
  struct LifetimeExtend { LifetimeExtend(int); ~LifetimeExtend(); };
  struct Aggregate { const LifetimeExtend a; const LifetimeExtend b; };
  void test_lifetime_extended_temporaries() {
    {
      Aggregate aggregate{LifetimeExtend(4), LifetimeExtend(4)};
      4;
    }
  }
```
The destructor of `a` has a self-loop. My hypothesis is that `a` and `b` have 
the same `ProgramState`s. `b`'s destructor is visited first, since it's 
destroyed first. When destructor of `a` gets visited, analyzer calls 
`ProgramState::Profile` and finds the same state as `b`'s destructor. 
Therefore, both `a`'s destructor and `b`'s destructor have the same 
`ExplodedNode`. Do you think this is correct?

I have added -analyzer-viz-egraph-ubigraph to a few more C++ tests. I didn't 
observe any crash. However, I didn't verify that it generates correct ubigraph 
output.


http://reviews.llvm.org/D12119



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

Reply via email to