Fix bugs:
authorChris Lattner <sabre@nondot.org>
Wed, 21 May 2003 16:06:56 +0000 (16:06 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 21 May 2003 16:06:56 +0000 (16:06 +0000)
  Assembler/2003-05-21-EmptyStructTest.ll
  Assembler/2003-05-21-MalformedStructCrash.llx

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6255 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/llvmAsmParser.y

index 75df31ccf872398ad8b0194fb07c2dca972e6797..7945b37ed52de35f91926c7fb410dd4dac72f949 100644 (file)
@@ -945,6 +945,9 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr
       ThrowException("Cannot make struct constant with type: '" + 
                      (*$1)->getDescription() + "'!");
 
+    if ($3->size() != STy->getNumContainedTypes())
+      ThrowException("Illegal number of initializers for structure type!");
+
     // Check to ensure that constants are compatible with the type initializer!
     for (unsigned i = 0, e = $3->size(); i != e; ++i)
       if ((*$3)[i]->getType() != STy->getElementTypes()[i])
@@ -956,6 +959,18 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr
     $$ = ConstantStruct::get(STy, *$3);
     delete $1; delete $3;
   }
+  | Types '{' '}' {
+    const StructType *STy = dyn_cast<const StructType>($1->get());
+    if (STy == 0)
+      ThrowException("Cannot make struct constant with type: '" + 
+                     (*$1)->getDescription() + "'!");
+
+    if (STy->getNumContainedTypes() != 0)
+      ThrowException("Illegal number of initializers for structure type!");
+
+    $$ = ConstantStruct::get(STy, std::vector<Constant*>());
+    delete $1;
+  }
   | Types NULL_TOK {
     const PointerType *PTy = dyn_cast<const PointerType>($1->get());
     if (PTy == 0)