================
Comment at: lib/CodeGen/CGDecl.cpp:890-894
@@ -889,7 +889,1 @@
-    //
-    // TODO: We should constant-evaluate the initializer of any variable,
-    // as long as it is initialized by a constant expression. Currently,
-    // isConstantInitializer produces wrong answers for structs with
-    // reference or bitfield members, and a few other cases, and checking
-    // for POD-ness protects us from some of these.
     if (D.getInit() && (Ty->isArrayType() || Ty->isRecordType()) &&
----------------
There are still cases that `isConstantInitializer` gets wrong. For instance, we 
don't check that the array filler is a constant for an array `InitListExpr`:

    struct X { X(); constexpr X(int) {} }; X x[3] = { 3 };

(You can see that there's a problem here because we emit dynamic initialization 
code but no `-Wglobal-constructors` warning.)

(Unrelated to your change) The bitfield case is still broken; this asserts:

      struct X { long n : 3; }; int k; X x = { (long)&k };

http://reviews.llvm.org/D8137

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to