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
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
+...
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");