Fix bugs:

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
This commit is contained in:
Chris Lattner 2003-05-21 16:06:56 +00:00
parent d32cac6009
commit c6212f1920

View 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)