mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 06:32:24 +00:00
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 {} [] ^ [ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61676 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3fbb3ab14d
commit
081b505f77
@ -36,6 +36,7 @@ namespace llvm {
|
|||||||
t_LocalName, t_GlobalName, // Name in StrVal.
|
t_LocalName, t_GlobalName, // Name in StrVal.
|
||||||
t_APSInt, t_APFloat, // Value in APSIntVal/APFloatVal.
|
t_APSInt, t_APFloat, // Value in APSIntVal/APFloatVal.
|
||||||
t_Null, t_Undef, t_Zero, // No value.
|
t_Null, t_Undef, t_Zero, // No value.
|
||||||
|
t_EmptyArray, // No value: []
|
||||||
t_Constant, // Value in ConstantVal.
|
t_Constant, // Value in ConstantVal.
|
||||||
t_InlineAsm // Value in StrVal/StrVal2/UIntVal.
|
t_InlineAsm // Value in StrVal/StrVal2/UIntVal.
|
||||||
} Kind;
|
} Kind;
|
||||||
@ -1578,7 +1579,7 @@ bool LLParser::ParseValID(ValID &ID) {
|
|||||||
if (Elts.empty()) {
|
if (Elts.empty()) {
|
||||||
// Use undef instead of an array because it's inconvenient to determine
|
// Use undef instead of an array because it's inconvenient to determine
|
||||||
// the element type at this point, there being no elements to examine.
|
// the element type at this point, there being no elements to examine.
|
||||||
ID.Kind = ValID::t_Undef;
|
ID.Kind = ValID::t_EmptyArray;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1904,6 +1905,11 @@ bool LLParser::ConvertGlobalValIDToValue(const Type *Ty, ValID &ID,
|
|||||||
case ValID::t_Undef:
|
case ValID::t_Undef:
|
||||||
V = UndefValue::get(Ty);
|
V = UndefValue::get(Ty);
|
||||||
return false;
|
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:
|
case ValID::t_Zero:
|
||||||
if (!Ty->isFirstClassType())
|
if (!Ty->isFirstClassType())
|
||||||
return Error(ID.Loc, "invalid type for null constant");
|
return Error(ID.Loc, "invalid type for null constant");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user