nickdesaulniers added a comment.

In D151587#4397272 <https://reviews.llvm.org/D151587#4397272>, @efriedma wrote:

> Two points I'm not sure about in the current version:
>
> - Handling MaterializeTemporaryExpr in ConstExprEmitter doesn't make sense; 
> ConstExprEmitter is not supposed to visit lvalues. (And I'm not sure what the 
> new check is supposed to do; `E->isGLValue()` is always true for a 
> MaterializeTemporaryExpr.)  Maybe try something like the following?

Yeah, that works.

> - HasAnyMaterializeTemporaryExpr shouldn't need to handle 
> VisitCXXConstructExpr.  The EvaluateAsLValue bug only applies to 
> lifetime-extended temporaries.  Any MaterializeTemporaryExpr that's the 
> operand of a VisitCXXConstructExpr should not be lifetime-extended beyond the 
> end of the expression. So it won't run into the EvaluateAsLValue issue.  
> (https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
>  should be a complete list of cases where we might need to recurse; none of 
> those corresponds to a CXXConstructExpr.)

See the AST in https://reviews.llvm.org/D151587#4396705; without a visitor for 
that, we don't recurse far enough down to see there is a 
MaterializeTemporaryExpr child in the sub-AST.  Maybe that's because of my 
subclassing of `ConstStmtVisitor` returning `bool`, so if I don't implement a 
visitor, the default visit returns `false` (if I understand 
CRTP/Visitor-pattern correctly).


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D151587

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

Reply via email to