mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
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
This commit is contained in:
parent
156b10f50e
commit
7c303fdacc
@ -1532,7 +1532,7 @@ bool LLParser::ParseInstructionMetadata(Instruction *Inst,
|
||||
return true;
|
||||
assert(ID.Kind == ValID::t_MDNode);
|
||||
if (ID.MDNodeVal->isFunctionLocal())
|
||||
return TokError("unexpected function-local metadata");
|
||||
return Error(Loc, "unexpected function-local metadata");
|
||||
Inst->setMetadata(MDK, ID.MDNodeVal);
|
||||
} else {
|
||||
unsigned NodeID = 0;
|
||||
|
7
test/Assembler/functionlocal-metadata-attachments.ll
Normal file
7
test/Assembler/functionlocal-metadata-attachments.ll
Normal file
@ -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}
|
||||
}
|
10
test/Assembler/functionlocal-metadata-complex-1.ll
Normal file
10
test/Assembler/functionlocal-metadata-complex-1.ll
Normal file
@ -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)
|
10
test/Assembler/functionlocal-metadata-complex-2.ll
Normal file
10
test/Assembler/functionlocal-metadata-complex-2.ll
Normal file
@ -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)
|
10
test/Assembler/functionlocal-metadata-complex-3.ll
Normal file
10
test/Assembler/functionlocal-metadata-complex-3.ll
Normal file
@ -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)
|
35
test/Bitcode/function-local-metadata.ll
Normal file
35
test/Bitcode/function-local-metadata.ll
Normal file
@ -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 !{}
|
BIN
test/Bitcode/function-local-metadata.ll.bc
Normal file
BIN
test/Bitcode/function-local-metadata.ll.bc
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user