summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-12-07 17:56:16 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-12-07 17:56:16 +0000
commit545a9b0f51d105041b472f8649a8179550576c72 (patch)
tree571cfd5a6080e245379ddeef481e2d3927653456 /llvm/test
parentfa58e5e111d97c63886df3ca1d5a0af3f221e45e (diff)
downloadbcm5719-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.ll7
-rw-r--r--llvm/test/Assembler/functionlocal-metadata-complex-1.ll10
-rw-r--r--llvm/test/Assembler/functionlocal-metadata-complex-2.ll10
-rw-r--r--llvm/test/Assembler/functionlocal-metadata-complex-3.ll10
-rw-r--r--llvm/test/Bitcode/function-local-metadata.ll35
-rw-r--r--llvm/test/Bitcode/function-local-metadata.ll.bcbin0 -> 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
new file mode 100644
index 00000000000..6323ca4a6a3
--- /dev/null
+++ b/llvm/test/Bitcode/function-local-metadata.ll.bc
Binary files differ
OpenPOWER on IntegriCloud