diff options
author | Chris Lattner <sabre@nondot.org> | 2009-01-05 07:52:51 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-01-05 07:52:51 +0000 |
commit | 998fa0a2a2cdd94c567bb765f12bcf7e576e7542 (patch) | |
tree | 681cf6cca305a7caedf032bfa711a6710f039033 /llvm/lib/AsmParser | |
parent | d11f51473960a8def039b0269939008ed9e2733f (diff) | |
download | bcm5719-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.cpp | 8 |
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"); |