Hack in a loud error for PR12086. Better than a silent miscompile.

llvm-svn: 151586
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index ddd04a4..a3a71b7 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1376,8 +1376,19 @@
     return 0;
 
   ASTContext &ctx = getContext();
-  // Synthesize a fake VarDecl for the array and initialize that.
   unsigned numInits = init->getNumInits();
+  // FIXME: This check is here because we would otherwise silently miscompile
+  // nested global std::initializer_lists. Better would be to have a real
+  // implementation.
+  for (unsigned i = 0; i < numInits; ++i) {
+    const InitListExpr *inner = dyn_cast<InitListExpr>(init->getInit(i));
+    if (inner && inner->initializesStdInitializerList()) {
+      ErrorUnsupported(inner, "nested global std::initializer_list");
+      return 0;
+    }
+  }
+
+  // Synthesize a fake VarDecl for the array and initialize that.
   QualType elementType = init->getInit(0)->getType();
   llvm::APInt numElements(ctx.getTypeSize(ctx.getSizeType()), numInits);
   QualType arrayType = ctx.getConstantArrayType(elementType, numElements,