]> granicus.if.org Git - clang/commitdiff
Be a bit more defensive in SemaInit.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 20 May 2008 05:25:56 +0000 (05:25 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 20 May 2008 05:25:56 +0000 (05:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51301 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaInit.cpp
test/Sema/compound-literal.c

index d5378d30d5c4d3fa7dcbd184e8e4acb2d2f573c2..20fa50731d0a3f7b276abe992667f34e9ea49d1d 100644 (file)
@@ -111,7 +111,8 @@ void InitListChecker::CheckExplicitInitList(InitListExpr *IList, QualType &T,
                     diag::err_excess_initializers_in_char_array_initializer,
                     IList->getInit(Index)->getSourceRange());
       hadError = true; 
-    } else {
+    } else if (!T->isIncompleteType()) {
+      // Don't warn for incomplete types, since we'll get an error elsewhere
       SemaRef->Diag(IList->getInit(Index)->getLocStart(), 
                     diag::warn_excess_initializers, 
                     IList->getInit(Index)->getSourceRange());
@@ -137,6 +138,11 @@ void InitListChecker::CheckListElementTypes(InitListExpr *IList,
       CheckArrayType(IList, DeclType, Index);
     else
       assert(0 && "Aggregate that isn't a function or array?!");
+  } else if (DeclType->isVoidType()) {
+    // This is clearly invalid, so not much we can do here. Don't bother
+    // with a diagnostic; we'll give an error elsewhere.
+    Index++;
+    hadError = true;
   } else {
     // In C, all types are either scalars or aggregates, but
     // additional handling is needed here for C++ (and possibly others?). 
index 3a4192260bf44473e1a20e90c2018158c48bef6f..80dd370962a86095488cd6859c4f8698a7d15e4b 100644 (file)
@@ -25,4 +25,5 @@ struct Incomplete;
 struct Incomplete* I1 = &(struct Incomplete){1, 2, 3}; // -expected-error {{variable has incomplete type}}
 void IncompleteFunc(unsigned x) {
   struct Incomplete* I2 = (struct foo[x]){1, 2, 3}; // -expected-error {{variable-sized object may not be initialized}}
+  (void){1,2,3}; // -expected-error {{variable has incomplete type}}
 }