================
@@ -465,7 +465,12 @@ class ResultObjectVisitor : public 
AnalysisASTVisitor<ResultObjectVisitor> {
     }
 
     if (auto *DIE = dyn_cast<CXXDefaultInitExpr>(E)) {
-      PropagateResultObject(DIE->getExpr(), Loc);
+      // If it has a rewritten init, we should propagate to that. If it 
doesn't,
+      // then the CXXDefaultInitExpr is the only initializer available during
+      // the analysis as the underlying Expr is only traversed as a child of 
the
+      // Decl being initialized, which is not usually in the CFG.
+      if (DIE->hasRewrittenInit())
----------------
bazuzi wrote:

I was working off of a now-out-of-date understanding of CFG-building (from this 
version: 
https://github.com/llvm/llvm-project/blob/905b402a5d8f1490d668f40942390ebd6e87aa8f/clang/lib/Analysis/CFG.cpp)
 where the underlying initializer was added to the CFG only when the init was 
rewritten. That functionality was then reverted.

Additional complexity comes in from the CFG-building option 
AddCXXDefaultInitExprInCtors, which is set true for dataflow analyses, causing 
the underlying initializers to be included in CFGs for constructors only.

It seemed to me that we don't want to propagate if the underlying initializer 
is not included in the CFG, but detection of that characteristic is not 
directly available.

@martinboehme and @ymand this is a continuation of our discussions.

https://github.com/llvm/llvm-project/pull/99236
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to