]> granicus.if.org Git - clang/commitdiff
Refuse to compile global std::initializer_lists instead of doing completely the wrong...
authorSebastian Redl <sebastian.redl@getdesigned.at>
Sun, 19 Feb 2012 14:53:49 +0000 (14:53 +0000)
committerSebastian Redl <sebastian.redl@getdesigned.at>
Sun, 19 Feb 2012 14:53:49 +0000 (14:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150928 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ExprConstant.cpp
lib/CodeGen/CGExprConstant.cpp

index dda6e849227ae8d81c853e04d7cf098c3a7cc736..4ae5ab42ff79d0a043cd77e9341b28a8b4a01a60 100644 (file)
@@ -3513,6 +3513,10 @@ bool RecordExprEvaluator::VisitCastExpr(const CastExpr *E) {
 }
 
 bool RecordExprEvaluator::VisitInitListExpr(const InitListExpr *E) {
+  // Cannot constant-evaluate std::initializer_list inits.
+  if (E->initializesStdInitializerList())
+    return false;
+
   const RecordDecl *RD = E->getType()->castAs<RecordType>()->getDecl();
   const ASTRecordLayout &Layout = Info.Ctx.getASTRecordLayout(RD);
 
index 985e53227e7881029ec6048303a2847d0cedfe74..a7cd36862ba47cea90adadf9ac94870a1051fef0 100644 (file)
@@ -339,6 +339,11 @@ void ConstStructBuilder::ConvertStructToPacked() {
 }
                             
 bool ConstStructBuilder::Build(InitListExpr *ILE) {
+  if (ILE->initializesStdInitializerList()) {
+    CGM.ErrorUnsupported(ILE, "global std::initializer_list");
+    return false;
+  }
+
   RecordDecl *RD = ILE->getType()->getAs<RecordType>()->getDecl();
   const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);