1; RUN: llvm-link %s %p/Inputs/drop-attribute.ll -S -o - | FileCheck %s 2 3; Test case that checks that nocallback attribute is dropped during linking. 4 5; CHECK: define i32 @main() 6; CHECK-NEXT: entry: 7; CHECK-NEXT: call void @test_nocallback_definition() 8; Test that checks that nocallback attribute on a call-site in a call instruction is dropped. 9; CHECK-NEXT: call void @test_nocallback_call_site(){{$}} 10; CHECK-NEXT: %0 = call float @llvm.sqrt.f32(float undef) 11; CHECK-NEXT: call void @test_nocallback_declaration_definition_not_linked_in() 12; CHECK-NEXT: call void @test_nocallback_declaration_definition_linked_in() 13; Test that checks that nocallback attribute on a call-site in an invoke instruction is dropped. 14; CHECK-NEXT: invoke void @test_nocallback_call_site(){{$}} 15define i32 @main() personality i8 0 { 16entry: 17 call void @test_nocallback_definition() 18 call void @test_nocallback_call_site() nocallback 19 call float @llvm.sqrt.f32(float undef) 20 call void @test_nocallback_declaration_definition_not_linked_in() 21 call void @test_nocallback_declaration_definition_linked_in() 22 invoke void @test_nocallback_call_site() nocallback 23 to label %ret unwind label %unw 24unw: 25 %tmp = landingpad i8 cleanup 26 br label %ret 27ret: 28 ret i32 0 29} 30 31; Test that checks that nocallback attribute on a definition is dropped. 32; CHECK: define void @test_nocallback_definition() 33define void @test_nocallback_definition() nocallback { 34 ret void 35} 36 37; Test that checks that nocallback attribute on a call site is dropped. 38; CHECK: declare void @test_nocallback_call_site(){{$}} 39declare void @test_nocallback_call_site() 40 41; Test that checks that nocallback attribute on an intrinsic is NOT dropped. 42; CHECK: ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn 43; CHECK-NEXT: declare float @llvm.sqrt.f32(float) #0 44declare float @llvm.sqrt.f32(float) nocallback 45 46; Test that checks that nocallback attribute on a declaration when a definition is not linked in is dropped. 47; CHECK: declare void @test_nocallback_declaration_definition_not_linked_in(){{$}} 48declare void @test_nocallback_declaration_definition_not_linked_in() nocallback 49 50; Test that checks that nocallback attribute on a declaration when a definition is linked in is dropped. 51; CHECK: define void @test_nocallback_declaration_definition_linked_in() {{{$}} 52declare void @test_nocallback_declaration_definition_linked_in() nocallback 53