fix PR3281:accepted0[02].ll: represent empty arrays distinctly, and
authorChris Lattner <sabre@nondot.org>
Mon, 5 Jan 2009 07:52:51 +0000 (07:52 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 5 Jan 2009 07:52:51 +0000 (07:52 +0000)
diagnose attempts to initialize non-empty arrays with them.  This
produces:
llvm-as: accepted02.ll:1:28: invalid empty array initializer
@"o" = global [5 x double] []
                           ^
llvm-as: accepted00.ll:1:32: invalid empty array initializer
@"za" = thread_local global {} []
                               ^
[

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

lib/AsmParser/LLParser.cpp

index 1f08ca34ff1148df6e1ab4df9516222180f926a4..d2ce6ec6a95bbddad82a6c0770d645397434e14a 100644 (file)
@@ -36,6 +36,7 @@ namespace llvm {
       t_LocalName, t_GlobalName,  // Name in StrVal.
       t_APSInt, t_APFloat,        // Value in APSIntVal/APFloatVal.
       t_Null, t_Undef, t_Zero,    // No value.
+      t_EmptyArray,               // No value:  []
       t_Constant,                 // Value in ConstantVal.
       t_InlineAsm                 // Value in StrVal/StrVal2/UIntVal.
     } Kind;
@@ -1578,7 +1579,7 @@ bool LLParser::ParseValID(ValID &ID) {
     if (Elts.empty()) {
       // Use undef instead of an array because it's inconvenient to determine
       // the element type at this point, there being no elements to examine.
-      ID.Kind = ValID::t_Undef;
+      ID.Kind = ValID::t_EmptyArray;
       return false;
     }
     
@@ -1904,6 +1905,11 @@ bool LLParser::ConvertGlobalValIDToValue(const Type *Ty, ValID &ID,
   case ValID::t_Undef:
     V = UndefValue::get(Ty);
     return false;
+  case ValID::t_EmptyArray:
+    if (!isa<ArrayType>(Ty) || cast<ArrayType>(Ty)->getNumElements() != 0)
+      return Error(ID.Loc, "invalid empty array initializer");
+    V = UndefValue::get(Ty);
+    return false;
   case ValID::t_Zero:
     if (!Ty->isFirstClassType())
       return Error(ID.Loc, "invalid type for null constant");