summaryrefslogtreecommitdiffstats
path: root/llvm/lib/AsmParser
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-01-05 07:52:51 +0000
committerChris Lattner <sabre@nondot.org>2009-01-05 07:52:51 +0000
commit998fa0a2a2cdd94c567bb765f12bcf7e576e7542 (patch)
tree681cf6cca305a7caedf032bfa711a6710f039033 /llvm/lib/AsmParser
parentd11f51473960a8def039b0269939008ed9e2733f (diff)
downloadbcm5719-llvm-998fa0a2a2cdd94c567bb765f12bcf7e576e7542.tar.gz
bcm5719-llvm-998fa0a2a2cdd94c567bb765f12bcf7e576e7542.zip
fix PR3281:accepted0[02].ll: represent empty arrays distinctly, and
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 {} [] ^ [ llvm-svn: 61676
Diffstat (limited to 'llvm/lib/AsmParser')
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 1f08ca34ff1..d2ce6ec6a95 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -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");
OpenPOWER on IntegriCloud