AsmParser: parse zeroinitializer, poison constants (#117809)
LLParser::parseConstantValue is missing support for parsing zeroinitializer and poison constants. Fix this.
This commit is contained in:
committed by
GitHub
parent
e874c8fc27
commit
7b2a708a27
@@ -6261,6 +6261,8 @@ bool LLParser::parseConstantValue(Type *Ty, Constant *&C) {
|
||||
case ValID::t_APSInt:
|
||||
case ValID::t_APFloat:
|
||||
case ValID::t_Undef:
|
||||
case ValID::t_Poison:
|
||||
case ValID::t_Zero:
|
||||
case ValID::t_Constant:
|
||||
case ValID::t_ConstantSplat:
|
||||
case ValID::t_ConstantStruct:
|
||||
|
||||
@@ -93,6 +93,22 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) {
|
||||
EXPECT_TRUE(V->getType()->isVectorTy());
|
||||
ASSERT_TRUE(isa<ConstantDataVector>(V));
|
||||
|
||||
V = parseConstantValue("<4 x i32> splat (i32 -2)", Error, M);
|
||||
ASSERT_TRUE(V);
|
||||
EXPECT_TRUE(V->getType()->isVectorTy());
|
||||
ASSERT_TRUE(isa<ConstantDataVector>(V));
|
||||
|
||||
V = parseConstantValue("<4 x i32> zeroinitializer", Error, M);
|
||||
ASSERT_TRUE(V);
|
||||
EXPECT_TRUE(V->getType()->isVectorTy());
|
||||
ASSERT_TRUE(isa<Constant>(V));
|
||||
EXPECT_TRUE(cast<Constant>(V)->isNullValue());
|
||||
|
||||
V = parseConstantValue("<4 x i32> poison", Error, M);
|
||||
ASSERT_TRUE(V);
|
||||
EXPECT_TRUE(V->getType()->isVectorTy());
|
||||
ASSERT_TRUE(isa<PoisonValue>(V));
|
||||
|
||||
V = parseConstantValue("i32 add (i32 1, i32 2)", Error, M);
|
||||
ASSERT_TRUE(V);
|
||||
ASSERT_TRUE(isa<ConstantInt>(V));
|
||||
@@ -105,6 +121,10 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) {
|
||||
ASSERT_TRUE(V);
|
||||
ASSERT_TRUE(isa<UndefValue>(V));
|
||||
|
||||
V = parseConstantValue("ptr poison", Error, M);
|
||||
ASSERT_TRUE(V);
|
||||
ASSERT_TRUE(isa<PoisonValue>(V));
|
||||
|
||||
EXPECT_FALSE(parseConstantValue("duble 3.25", Error, M));
|
||||
EXPECT_EQ(Error.getMessage(), "expected type");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user