r373279 - During constant evaluation, handle CXXBindTemporaryExprs for
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 30 17:41:16 PDT 2019
Author: rsmith
Date: Mon Sep 30 17:41:16 2019
New Revision: 373279
URL: http://llvm.org/viewvc/llvm-project?rev=373279&view=rev
Log:
During constant evaluation, handle CXXBindTemporaryExprs for
array-of-class types, not just for class types.
Modified:
cfe/trunk/lib/AST/ExprConstant.cpp
cfe/trunk/test/SemaCXX/constant-expression-cxx2a.cpp
Modified: cfe/trunk/lib/AST/ExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=373279&r1=373278&r2=373279&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Mon Sep 30 17:41:16 2019
@@ -6493,6 +6493,12 @@ public:
return StmtVisitorTy::Visit(E->getSubExpr()) && Scope.destroy();
}
+ // Temporaries are registered when created, so we don't care about
+ // CXXBindTemporaryExpr.
+ bool VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *E) {
+ return StmtVisitorTy::Visit(E->getSubExpr());
+ }
+
bool VisitCXXReinterpretCastExpr(const CXXReinterpretCastExpr *E) {
CCEDiag(E, diag::note_constexpr_invalid_cast) << 0;
return static_cast<Derived*>(this)->VisitCastExpr(E);
@@ -8448,13 +8454,6 @@ namespace {
bool VisitCXXInheritedCtorInitExpr(const CXXInheritedCtorInitExpr *E);
bool VisitCXXConstructExpr(const CXXConstructExpr *E, QualType T);
bool VisitCXXStdInitializerListExpr(const CXXStdInitializerListExpr *E);
-
- // Temporaries are registered when created, so we don't care about
- // CXXBindTemporaryExpr.
- bool VisitCXXBindTemporaryExpr(const CXXBindTemporaryExpr *E) {
- return Visit(E->getSubExpr());
- }
-
bool VisitBinCmp(const BinaryOperator *E);
};
}
Modified: cfe/trunk/test/SemaCXX/constant-expression-cxx2a.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/constant-expression-cxx2a.cpp?rev=373279&r1=373278&r2=373279&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/constant-expression-cxx2a.cpp (original)
+++ cfe/trunk/test/SemaCXX/constant-expression-cxx2a.cpp Mon Sep 30 17:41:16 2019
@@ -802,6 +802,11 @@ namespace dtor {
return true;
}
static_assert(run_dtors_on_array_filler());
+
+ // Ensure that we can handle temporary cleanups for array temporaries.
+ struct ArrElem { constexpr ~ArrElem() {} };
+ using Arr = ArrElem[3];
+ static_assert((Arr{}, true));
}
namespace dynamic_alloc {
More information about the cfe-commits
mailing list