diff options
author | Alex Lorenz <arphaman@gmail.com> | 2015-09-09 13:44:33 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2015-09-09 13:44:33 +0000 |
commit | b9a68dbcaee014580b2f78d9a630635d7d5f5377 (patch) | |
tree | 4dbc61265b320df05d0e6d0cdae7008df0a6e9e5 /llvm | |
parent | d511726ce9c03b59627df9fa97cc267762bf8fcd (diff) | |
download | bcm5719-llvm-b9a68dbcaee014580b2f78d9a630635d7d5f5377.tar.gz bcm5719-llvm-b9a68dbcaee014580b2f78d9a630635d7d5f5377.zip |
Fix PR 24633 - Handle undef values when parsing standalone constants.
llvm-svn: 247145
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 1 | ||||
-rw-r--r-- | llvm/test/CodeGen/MIR/X86/memory-operands.mir | 16 | ||||
-rw-r--r-- | llvm/unittests/AsmParser/AsmParserTest.cpp | 4 |
3 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 8ec5c6a4aa6..1f786e4093f 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/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/llvm/test/CodeGen/MIR/X86/memory-operands.mir b/llvm/test/CodeGen/MIR/X86/memory-operands.mir index 0f9b38feda2..3c9463d2f31 100644 --- a/llvm/test/CodeGen/MIR/X86/memory-operands.mir +++ b/llvm/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/llvm/unittests/AsmParser/AsmParserTest.cpp b/llvm/unittests/AsmParser/AsmParserTest.cpp index ef16eb1cfb3..4189310fda2 100644 --- a/llvm/unittests/AsmParser/AsmParserTest.cpp +++ b/llvm/unittests/AsmParser/AsmParserTest.cpp @@ -99,6 +99,10 @@ TEST(AsmParserTest, TypeAndConstantValueParsing) { ASSERT_TRUE(V); ASSERT_TRUE(isa<BlockAddress>(V)); + V = parseConstantValue("i8** undef", Error, M); + ASSERT_TRUE(V); + ASSERT_TRUE(isa<UndefValue>(V)); + EXPECT_FALSE(parseConstantValue("duble 3.25", Error, M)); EXPECT_EQ(Error.getMessage(), "expected type"); |