================
@@ -2433,6 +2429,30 @@ CFGBlock *CFGBuilder::VisitChildren(Stmt *S) {
   return B;
 }
 
+CFGBlock *CFGBuilder::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *Arg,
+                                             AddStmtChoice asc) {
+  if (Arg->hasRewrittenInit()) {
+    if (asc.alwaysAdd(*this, Arg)) {
+      autoCreateBlock();
+      appendStmt(Block, Arg);
+    }
+    return VisitStmt(Arg->getExpr(), asc);
+  }
+  return VisitStmt(Arg, asc);
----------------
yronglin wrote:

Thanks a lot for your review!

> I think it'd be useful to keep some of the old comment here: we can't add the 
> default argument if it's not rewritten because we could end up with the same 
> expression appearing multiple times.

Agree 100%, keep the old comment here can make things more clear. 

> Actually, are we safe from that even if the default argument is rewritten? Do 
> we guarantee to recreate all subexpressions in that case?

Not exactly, The rebuild implementation is the following, it's ignores 
`LambdaExpr`, `BlockExpr` and `CXXThisExpr`, And 
`EnsureImmediateInvocationInDefaultArgs`’s name may need to be refine.
https://github.com/llvm/llvm-project/blob/78b3a00418ce6da0426a261a64a77608d0264fe5/clang/lib/Sema/SemaExpr.cpp#L5707-L5723
 

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

Reply via email to