]> granicus.if.org Git - clang/commitdiff
Sema::CheckInitializerTypes(). Start simpliying and cleaning up...
authorSteve Naroff <snaroff@apple.com>
Mon, 21 Jan 2008 23:53:58 +0000 (23:53 +0000)
committerSteve Naroff <snaroff@apple.com>
Mon, 21 Jan 2008 23:53:58 +0000 (23:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46234 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaDecl.cpp
test/Sema/array-init.c

index b1753e1df418f20b43454bf93151ab6e0083896e..44eb70b74992e3840c1c3173d7537da373911797 100644 (file)
@@ -513,6 +513,13 @@ void Sema::CheckConstantInitList(QualType DeclType, InitListExpr *IList,
 bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType) {
   bool hadError = false;
   
+  // C99 6.7.8p3: The type of the entity to be initialized shall be an array
+  // of unknown size ("[]") or an object type that is not a variable array type.
+  if (const VariableArrayType *VAT = DeclType->getAsVariablyModifiedType())
+    return Diag(VAT->getSizeExpr()->getLocStart(), 
+                diag::err_variable_object_no_init, 
+                VAT->getSizeExpr()->getSourceRange());
+  
   InitListExpr *InitList = dyn_cast<InitListExpr>(Init);
   if (!InitList) {
     if (StringLiteral *strLiteral = dyn_cast<StringLiteral>(Init)) {
@@ -550,10 +557,7 @@ bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType) {
 
   // C99 6.7.8p3: The type of the entity to be initialized shall be an array
   // of unknown size ("[]") or an object type that is not a variable array type.
-  if (const VariableArrayType *VAT = DeclType->getAsVariableArrayType()) { 
-    if (const Expr *expr = VAT->getSizeExpr())
-      return Diag(expr->getLocStart(), diag::err_variable_object_no_init, 
-                  expr->getSourceRange());
+  if (const VariableArrayType *VAT = DeclType->getAsIncompleteArrayType()) { 
 
     // We have a VariableArrayType with unknown size. Note that only the first
     // array can have unknown size. For example, "int [][]" is illegal.
index af4b04b7253fd05b06e5ed7bea2f0f9ac7302951..60bb6afd9fbe13ad4ded1af0b7d8dd43cb85f1cf 100644 (file)
@@ -162,3 +162,8 @@ void charArrays()
   int i3[] = {}; //expected-error{{at least one initializer value required to size array}} expected-warning{{use of GNU empty initializer extension}}
 }
 
+void variableArrayInit() {
+  int a = 4;
+  char strlit[a] = "foo"; //expected-error{{variable-sized object may not be initialized}}
+  int b[a] = { 1, 2, 4 }; //expected-error{{variable-sized object may not be initialized}}
+}