From dce4a407a24b04eebc6a376f8e62b41aaa7b071f Mon Sep 17 00:00:00 2001 From: Stephen Hines Date: Thu, 29 May 2014 02:49:00 -0700 Subject: Update LLVM for 3.5 rebase (r209712). Change-Id: I149556c940fb7dc92d075273c87ff584f400941f --- test/Verifier/aliasing-chain.ll | 6 -- test/Verifier/bitcast-alias-address-space.ll | 10 ---- test/Verifier/global-ctors.ll | 11 ++++ test/Verifier/inalloca3.ll | 13 +++++ test/Verifier/musttail-invalid.ll | 82 ++++++++++++++++++++++++++++ test/Verifier/musttail-valid.ll | 16 ++++++ test/Verifier/sret.ll | 7 +++ 7 files changed, 129 insertions(+), 16 deletions(-) delete mode 100644 test/Verifier/aliasing-chain.ll delete mode 100644 test/Verifier/bitcast-alias-address-space.ll create mode 100644 test/Verifier/global-ctors.ll create mode 100644 test/Verifier/inalloca3.ll create mode 100644 test/Verifier/musttail-invalid.ll create mode 100644 test/Verifier/musttail-valid.ll create mode 100644 test/Verifier/sret.ll (limited to 'test/Verifier') diff --git a/test/Verifier/aliasing-chain.ll b/test/Verifier/aliasing-chain.ll deleted file mode 100644 index ae0b77f..0000000 --- a/test/Verifier/aliasing-chain.ll +++ /dev/null @@ -1,6 +0,0 @@ -; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s -; CHECK: Aliasing chain should end with function or global variable -; Test that alising chain does not create a cycle - -@b1 = alias i32* @c1 -@c1 = alias i32* @b1 diff --git a/test/Verifier/bitcast-alias-address-space.ll b/test/Verifier/bitcast-alias-address-space.ll deleted file mode 100644 index d9794d9..0000000 --- a/test/Verifier/bitcast-alias-address-space.ll +++ /dev/null @@ -1,10 +0,0 @@ -; RUN: not llvm-as -disable-output %s 2>&1 | FileCheck %s - -; CHECK: error: invalid cast opcode for cast from 'i32 addrspace(2)*' to 'i32 addrspace(1)*' - -target datalayout = "e-p:32:32:32-p1:16:16:16-p2:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n8:16:32" - - -@data = addrspace(2) global i32 27 - -@illegal_alias_data = alias bitcast (i32 addrspace(2)* @data to i32 addrspace(1)*) diff --git a/test/Verifier/global-ctors.ll b/test/Verifier/global-ctors.ll new file mode 100644 index 0000000..76570c5 --- /dev/null +++ b/test/Verifier/global-ctors.ll @@ -0,0 +1,11 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +@llvm.global_ctors = appending global [1 x { i32, void()*, i8 } ] [ + { i32, void()*, i8 } { i32 65535, void ()* null, i8 0 } +] +; CHECK: wrong type for intrinsic global variable + +@llvm.global_dtors = appending global [1 x { i32, void()*, i8*, i8 } ] [ + { i32, void()*, i8*, i8 } { i32 65535, void ()* null, i8* null, i8 0} +] +; CHECK: wrong type for intrinsic global variable diff --git a/test/Verifier/inalloca3.ll b/test/Verifier/inalloca3.ll new file mode 100644 index 0000000..c09ce10 --- /dev/null +++ b/test/Verifier/inalloca3.ll @@ -0,0 +1,13 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + + +declare void @doit(i64* inalloca %a) + +define void @a() { +entry: + %a = alloca [2 x i32] + %b = bitcast [2 x i32]* %a to i64* + call void @doit(i64* inalloca %b) +; CHECK: inalloca argument for call has mismatched alloca + ret void +} diff --git a/test/Verifier/musttail-invalid.ll b/test/Verifier/musttail-invalid.ll new file mode 100644 index 0000000..e5f9a40 --- /dev/null +++ b/test/Verifier/musttail-invalid.ll @@ -0,0 +1,82 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +; Each musttail call should fail to validate. + +declare x86_stdcallcc void @cc_mismatch_callee() +define void @cc_mismatch() { +; CHECK: mismatched calling conv + musttail call x86_stdcallcc void @cc_mismatch_callee() + ret void +} + +declare void @more_parms_callee(i32) +define void @more_parms() { +; CHECK: mismatched parameter counts + musttail call void @more_parms_callee(i32 0) + ret void +} + +declare void @mismatched_intty_callee(i8) +define void @mismatched_intty(i32) { +; CHECK: mismatched parameter types + musttail call void @mismatched_intty_callee(i8 0) + ret void +} + +declare void @mismatched_vararg_callee(i8*, ...) +define void @mismatched_vararg(i8*) { +; CHECK: mismatched varargs + musttail call void (i8*, ...)* @mismatched_vararg_callee(i8* null) + ret void +} + +; We would make this an implicit sret parameter, which would disturb the +; tail call. +declare { i32, i32, i32 } @mismatched_retty_callee(i32) +define void @mismatched_retty(i32) { +; CHECK: mismatched return types + musttail call { i32, i32, i32 } @mismatched_retty_callee(i32 0) + ret void +} + +declare void @mismatched_byval_callee({ i32 }*) +define void @mismatched_byval({ i32 }* byval %a) { +; CHECK: mismatched ABI impacting function attributes + musttail call void @mismatched_byval_callee({ i32 }* %a) + ret void +} + +declare void @mismatched_inreg_callee(i32 inreg) +define void @mismatched_inreg(i32 %a) { +; CHECK: mismatched ABI impacting function attributes + musttail call void @mismatched_inreg_callee(i32 inreg %a) + ret void +} + +declare void @mismatched_sret_callee(i32* sret) +define void @mismatched_sret(i32* %a) { +; CHECK: mismatched ABI impacting function attributes + musttail call void @mismatched_sret_callee(i32* sret %a) + ret void +} + +declare void @mismatched_alignment_callee(i32* byval align 8) +define void @mismatched_alignment(i32* byval align 4 %a) { +; CHECK: mismatched ABI impacting function attributes + musttail call void @mismatched_alignment_callee(i32* byval align 8 %a) + ret void +} + +declare i32 @not_tail_pos_callee() +define i32 @not_tail_pos() { +; CHECK: musttail call must be precede a ret with an optional bitcast + %v = musttail call i32 @not_tail_pos_callee() + %w = add i32 %v, 1 + ret i32 %w +} + +define void @inline_asm() { +; CHECK: cannot use musttail call with inline asm + musttail call void asm "ret", ""() + ret void +} diff --git a/test/Verifier/musttail-valid.ll b/test/Verifier/musttail-valid.ll new file mode 100644 index 0000000..815d77a --- /dev/null +++ b/test/Verifier/musttail-valid.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as %s -o /dev/null + +; Should assemble without error. + +declare void @similar_param_ptrty_callee(i8*) +define void @similar_param_ptrty(i32*) { + musttail call void @similar_param_ptrty_callee(i8* null) + ret void +} + +declare i8* @similar_ret_ptrty_callee() +define i32* @similar_ret_ptrty() { + %v = musttail call i8* @similar_ret_ptrty_callee() + %w = bitcast i8* %v to i32* + ret i32* %w +} diff --git a/test/Verifier/sret.ll b/test/Verifier/sret.ll new file mode 100644 index 0000000..1ddbf1f --- /dev/null +++ b/test/Verifier/sret.ll @@ -0,0 +1,7 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +declare void @a(i32* sret %a, i32* sret %b) +; CHECK: Cannot have multiple 'sret' parameters! + +declare void @b(i32* %a, i32* %b, i32* sret %c) +; CHECK: Attribute 'sret' is not on first or second parameter! -- cgit v1.1