From b9224cdb7e559cbc3bbbdc71a3905afb9073231d Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Wed, 9 Sep 2015 13:44:33 +0000 Subject: [PATCH] Fix PR 24633 - Handle undef values when parsing standalone constants. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247145 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AsmParser/LLParser.cpp | 1 + test/CodeGen/MIR/X86/memory-operands.mir | 16 ++++++++++++++++ unittests/AsmParser/AsmParserTest.cpp | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 8ec5c6a4aa6..1f786e4093f 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -4228,6 +4228,7 @@ bool LLParser::parseConstantValue(Type *Ty, Constant *&C) { switch (ID.Kind) { case ValID::t_APSInt: case ValID::t_APFloat: + case ValID::t_Undef: case ValID::t_Constant: case ValID::t_ConstantStruct: case ValID::t_PackedConstantStruct: { diff --git a/test/CodeGen/MIR/X86/memory-operands.mir b/test/CodeGen/MIR/X86/memory-operands.mir index 0f9b38feda2..3c9463d2f31 100644 --- a/test/CodeGen/MIR/X86/memory-operands.mir +++ b/test/CodeGen/MIR/X86/memory-operands.mir @@ -180,6 +180,12 @@ store i32 %conv, i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0), align 16 ret void } + + define i8* @undef_value() { + entry: + %0 = load i8*, i8** undef, align 8 + ret i8* %0 + } ... --- name: test @@ -490,3 +496,13 @@ body: | MOV32mr killed %rax, 1, _, 0, _, %edi, implicit killed %rdi :: (store 4 into `i32* getelementptr inbounds ([50 x %st], [50 x %st]* @values, i64 0, i64 0, i32 0)`, align 16) RETQ ... +--- +name: undef_value +tracksRegLiveness: true +body: | + bb.0.entry: + ; CHECK-LABEL: name: undef_value + ; CHECK: %rax = MOV64rm undef %rax, 1, _, 0, _ :: (load 8 from `i8** undef`) + %rax = MOV64rm undef %rax, 1, _, 0, _ :: (load 8 from `i8** undef`) + RETQ %rax +... diff --git a/unittests/AsmParser/AsmParserTest.cpp b/unittests/AsmParser/AsmParserTest.cpp index ef16eb1cfb3..4189310fda2 100644 --- a/unittests/AsmParser/AsmParserTest.cpp +++ b/unittests/AsmParser/AsmParserTest.cpp @@ -99,6 +99,10 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) { ASSERT_TRUE(V); ASSERT_TRUE(isa(V)); + V = parseConstantValue("i8** undef", Error, M); + ASSERT_TRUE(V); + ASSERT_TRUE(isa(V)); + EXPECT_FALSE(parseConstantValue("duble 3.25", Error, M)); EXPECT_EQ(Error.getMessage(), "expected type"); -- 2.34.1