]> granicus.if.org Git - clang/commitdiff
Improve diagnostic for illegal array initialization.
authorEli Friedman <eli.friedman@gmail.com>
Fri, 8 Feb 2008 00:48:24 +0000 (00:48 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Fri, 8 Feb 2008 00:48:24 +0000 (00:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46869 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaDecl.cpp
include/clang/Basic/DiagnosticKinds.def
test/Sema/init.c

index 00776912b0203faa3c83e31a7d0803c23f78eed7..b81f3fe53e4a9909b3959988c8021bf48f5da4e9 100644 (file)
@@ -659,6 +659,12 @@ bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType) {
     // FIXME: Handle wide strings
     if (StringLiteral *strLiteral = IsStringLiteralInit(Init, DeclType))
       return CheckStringLiteralInit(strLiteral, DeclType);
+
+    if (DeclType->isArrayType())
+      return Diag(Init->getLocStart(),
+                  diag::err_array_init_list_required, 
+                  Init->getSourceRange());
+
     return CheckSingleInitializer(Init, DeclType);
   }
   unsigned newIndex = 0;
index 7e31847e86a8061a0bb0ed49bdf348c1cafdd2e2..3a8c04c9df858047ec35a8678e383f06da8c4ca9 100644 (file)
@@ -653,6 +653,8 @@ DIAG(warn_extern_init, WARNING,
      "'extern' variable has an initializer")
 DIAG(err_variable_object_no_init, ERROR,
      "variable-sized object may not be initialized")
+DIAG(err_array_init_list_required, ERROR,
+     "initialization with \"{...}\" expected for array")
 DIAG(warn_excess_initializers, WARNING,
      "excess elements in array initializer")
 DIAG(err_excess_initializers_in_char_array_initializer, ERROR,
index bbad04cd7340502401c2e89de1cc4683d5bddb5f..9d0d7335fe2d3c5e5bfe45f58791d03317f7d809 100644 (file)
@@ -13,3 +13,7 @@ extern int x;
 void *g = &x;
 int *h = &x;
 
+int test() {
+int a[10];
+int b[10] = a; // expected-error {{initialization with "{...}" expected}}
+}