diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-12-07 17:56:16 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-12-07 17:56:16 +0000 |
| commit | 545a9b0f51d105041b472f8649a8179550576c72 (patch) | |
| tree | 571cfd5a6080e245379ddeef481e2d3927653456 /llvm/test | |
| parent | fa58e5e111d97c63886df3ca1d5a0af3f221e45e (diff) | |
| download | bcm5719-llvm-545a9b0f51d105041b472f8649a8179550576c72.tar.gz bcm5719-llvm-545a9b0f51d105041b472f8649a8179550576c72.zip | |
IR: Add missing tests for function-local metadata
Add assembly and bitcode tests that I neglected to add in r223564 (IR:
Disallow complicated function-local metadata) and r223574 (IR: Disallow
function-local metadata attachments).
Found a couple of bugs:
- The error message for function-local attachments gave the wrong line
number -- it indicated the next token (typically on the next line)
instead of the token that started the attachment. Fixed.
- Metadata arguments of the form `!{i32 0, i32 %v}` (or with the
arguments reversed) fired an assertion in `ValueEnumerator` in LLVM
v3.5, so I suppose this never really worked. I suppose this was
"fixed" by r223564.
(Thanks to dblaikie for pointing out my omission.)
Part of PR21532.
llvm-svn: 223616
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Assembler/functionlocal-metadata-attachments.ll | 7 | ||||
| -rw-r--r-- | llvm/test/Assembler/functionlocal-metadata-complex-1.ll | 10 | ||||
| -rw-r--r-- | llvm/test/Assembler/functionlocal-metadata-complex-2.ll | 10 | ||||
| -rw-r--r-- | llvm/test/Assembler/functionlocal-metadata-complex-3.ll | 10 | ||||
| -rw-r--r-- | llvm/test/Bitcode/function-local-metadata.ll | 35 | ||||
| -rw-r--r-- | llvm/test/Bitcode/function-local-metadata.ll.bc | bin | 0 -> 396 bytes |
6 files changed, 72 insertions, 0 deletions
diff --git a/llvm/test/Assembler/functionlocal-metadata-attachments.ll b/llvm/test/Assembler/functionlocal-metadata-attachments.ll new file mode 100644 index 00000000000..71d8fa1b0e1 --- /dev/null +++ b/llvm/test/Assembler/functionlocal-metadata-attachments.ll @@ -0,0 +1,7 @@ +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s + +define void @foo(i32 %v) { +entry: +; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected function-local metadata + ret void, !foo !{i32 %v} +} diff --git a/llvm/test/Assembler/functionlocal-metadata-complex-1.ll b/llvm/test/Assembler/functionlocal-metadata-complex-1.ll new file mode 100644 index 00000000000..81337db39fe --- /dev/null +++ b/llvm/test/Assembler/functionlocal-metadata-complex-1.ll @@ -0,0 +1,10 @@ +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s + +define void @foo(i32 %v) { +entry: +; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected operand after function-local metadata + call void @llvm.bar(metadata !{i32 %v, i32 0}) + ret void +} + +declare void @llvm.bar(metadata) diff --git a/llvm/test/Assembler/functionlocal-metadata-complex-2.ll b/llvm/test/Assembler/functionlocal-metadata-complex-2.ll new file mode 100644 index 00000000000..15a4412c535 --- /dev/null +++ b/llvm/test/Assembler/functionlocal-metadata-complex-2.ll @@ -0,0 +1,10 @@ +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s + +define void @foo(i32 %v) { +entry: +; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected function-local metadata + call void @llvm.bar(metadata !{i32 0, i32 %v}) + ret void +} + +declare void @llvm.bar(metadata) diff --git a/llvm/test/Assembler/functionlocal-metadata-complex-3.ll b/llvm/test/Assembler/functionlocal-metadata-complex-3.ll new file mode 100644 index 00000000000..1590efa72b6 --- /dev/null +++ b/llvm/test/Assembler/functionlocal-metadata-complex-3.ll @@ -0,0 +1,10 @@ +; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s + +define void @foo(i32 %v) { +entry: +; CHECK: <stdin>:[[@LINE+1]]:{{[0-9]+}}: error: unexpected nested function-local metadata + call void @llvm.bar(metadata !{metadata !{i32 %v}}) + ret void +} + +declare void @llvm.bar(metadata) diff --git a/llvm/test/Bitcode/function-local-metadata.ll b/llvm/test/Bitcode/function-local-metadata.ll new file mode 100644 index 00000000000..58fb64c9b4b --- /dev/null +++ b/llvm/test/Bitcode/function-local-metadata.ll @@ -0,0 +1,35 @@ +; RUN: llvm-dis < %s.bc | FileCheck %s + +; Check that function-local metadata is dropped correctly when it's not a +; direct argument to a call instruction. +; +; Bitcode assembled by llvm-as v3.5.0. + +define void @foo(i32 %v) { +; CHECK: entry: +entry: +; CHECK-NEXT: call void @llvm.bar(metadata !{i32 %v}) + call void @llvm.bar(metadata !{i32 %v}) + +; Note: these supposedly legal instructions fired an assertion in llvm-as: +; +; Assertion failed: (I != ValueMap.end() && "Value not in slotcalculator!"), function getValueID, file lib/Bitcode/Writer/ValueEnumerator.cpp, line 138. +; +; So, I didn't test them; it looks like bitcode compatability is irrelevant. + ; call void @llvm.bar(metadata !{i32 0, i32 %v}) + ; call void @llvm.bar(metadata !{i32 %v, i32 0}) + ; call void @llvm.bar(metadata !{metadata !{}, i32 %v}) + ; call void @llvm.bar(metadata !{i32 %v, metadata !{}}) + +; CHECK-NEXT: call void @llvm.bar(metadata !0) +; CHECK-NEXT: call void @llvm.bar(metadata !0) + call void @llvm.bar(metadata !{i32 %v, i32 %v}) + call void @llvm.bar(metadata !{metadata !{i32 %v}}) + +; CHECK-NEXT: ret void{{$}} + ret void, !baz !{i32 %v} +} + +declare void @llvm.bar(metadata) + +; CHECK: !0 = metadata !{} diff --git a/llvm/test/Bitcode/function-local-metadata.ll.bc b/llvm/test/Bitcode/function-local-metadata.ll.bc Binary files differnew file mode 100644 index 00000000000..6323ca4a6a3 --- /dev/null +++ b/llvm/test/Bitcode/function-local-metadata.ll.bc |

