yronglin marked 4 inline comments as done.
yronglin added a comment.

@cor3ntin Thanks for your review!



================
Comment at: clang/include/clang/Sema/Sema.h:1357
+    /// Whether rewrite the default argument.
+    bool IsRewriteDefaultArgument = false;
+
----------------
cor3ntin wrote:
> Can `IsRewriteDefaultArgument` and `MaterializePRValueInDiscardStatement` 
> have different values?
> Maybe `MaterializePRValueInDiscardStatement` is sufficient
Currently they have the same value, but they mean different things, so I use 
two separated variables.


================
Comment at: clang/include/clang/Sema/Sema.h:1361
+    /// Eg. Extending the lifetime of temporaries in the init expression.
+    bool IsCheckingCXXForRangeInitVariable = false;
+
----------------
cor3ntin wrote:
> Either `IsInLifetimeExtendingContext` or `IsInCXXForRangeInitializer` seem 
> like better names
Thanks for your suggestion, `IsInLifetimeExtendingContext ` looks good to me, I 
can use this var name later.


================
Comment at: clang/lib/Sema/SemaExpr.cpp:6250
+            CallLoc, Param, CurContext};
       EnsureImmediateInvocationInDefaultArgs Immediate(*this);
       ExprResult Res;
----------------
@cor3ntin Does `EnsureImmediateInvocationInDefaultArgs` need to be renamed to a 
more generic name?


================
Comment at: clang/lib/Sema/SemaExpr.cpp:18168
       Prev.InImmediateEscalatingFunctionContext;
-
   Cleanup.reset();
----------------
cor3ntin wrote:
> Whitespace only change
Thanks, I'll remove this.


================
Comment at: clang/lib/Sema/SemaExprCXX.cpp:8206-8209
+    // We do not materialize temporay by default in order to avoid creating
+    // unnecessary temporary objects. If we skip this step, IR generation is
+    // able to synthesize the storage for itself in the aggregate case, and
+    // adding the extra node to the AST is just clutter.
----------------
cor3ntin wrote:
> Correct me if I'm wrong but the thing we want to avoid here is to avoid 
> creating unnecessary AST nodes, right?
Yeah, ignore unnecessary AST nodes and runtime memory allocation. The redundant 
alloca/store instructions may be removed during the optimization phase.

Eg. 
```
static_cast<void>(42);
```
```
define noundef i32 @main() {
entry:
  %retval = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  store i32 0, ptr %retval, align 4
  store i32 42, ptr %ref.tmp, align 4
  call void @f()()
  ret i32 0
}
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D153701

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

Reply via email to