[cfe-commits] r51556 - in /cfe/trunk: include/clang/Basic/DiagnosticKinds.def lib/Sema/SemaInit.cpp test/Sema/array-init.c

Eli Friedman eli.friedman at gmail.com
Sun May 25 06:49:22 PDT 2008


Author: efriedma
Date: Sun May 25 08:49:22 2008
New Revision: 51556

URL: http://llvm.org/viewvc/llvm-project?rev=51556&view=rev
Log:
Diagnose implicit init list for empty aggregate, like struct {}.  Fixes 
PR2151 (by not creating the empty implicit init list).


Modified:
    cfe/trunk/include/clang/Basic/DiagnosticKinds.def
    cfe/trunk/lib/Sema/SemaInit.cpp
    cfe/trunk/test/Sema/array-init.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticKinds.def?rev=51556&r1=51555&r2=51556&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticKinds.def Sun May 25 08:49:22 2008
@@ -751,6 +751,8 @@
      "scalar initializer cannot be empty")
 DIAG(err_illegal_initializer, ERROR,
      "illegal initializer (only variables can be initialized)")
+DIAG(err_implicit_empty_initializer, ERROR,
+     "initializer for aggregate with no elements requires explicit braces")
 
 DIAG(err_redefinition_of_label, ERROR,
      "redefinition of label '%0'")

Modified: cfe/trunk/lib/Sema/SemaInit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaInit.cpp?rev=51556&r1=51555&r2=51556&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaInit.cpp (original)
+++ cfe/trunk/lib/Sema/SemaInit.cpp Sun May 25 08:49:22 2008
@@ -57,6 +57,13 @@
   else
     assert(0 && "CheckImplicitInitList(): Illegal type");
 
+  if (maxElements == 0) {
+    SemaRef->Diag(ParentIList->getInit(Index)->getLocStart(),
+                  diag::err_implicit_empty_initializer);
+    hadError = true;
+    return;
+  }
+
   // Check the element types *before* we create the implicit init list;
   // otherwise, we might end up taking the wrong number of elements
   unsigned NewIndex = Index;

Modified: cfe/trunk/test/Sema/array-init.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/array-init.c?rev=51556&r1=51555&r2=51556&view=diff

==============================================================================
--- cfe/trunk/test/Sema/array-init.c (original)
+++ cfe/trunk/test/Sema/array-init.c Sun May 25 08:49:22 2008
@@ -212,3 +212,7 @@
 void varArray() {
   int c[][x] = { 0 }; //expected-error{{variable-sized object may not be initialized}}
 }
+
+// PR2151
+int emptyInit() {struct {} x[] = {6};} //expected-warning{{empty struct extension}} expected-error{{initializer for aggregate with no elements}}
+





More information about the cfe-commits mailing list