When inlining through an 'nounwind' call, mark inlined

calls 'nounwind'.  It is important for correct C++
exception handling that nounwind markings do not get
lost, so this transformation is actually needed for
correctness.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45218 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands
2007-12-19 21:13:37 +00:00
parent 0a92af487b
commit f0c3354d99
9 changed files with 114 additions and 21 deletions

View File

@@ -0,0 +1,19 @@
; RUN: llvm-as < %s -o - | opt -inline | llvm-dis | grep nounwind
; RUN: llvm-as < %s -o - | opt -inline | llvm-dis | grep unreachable
declare i1 @extern()
define internal i32 @test() {
entry:
%n = call i1 @extern( )
br i1 %n, label %r, label %u
r:
ret i32 0;
u:
unwind
}
define i32 @caller() {
%X = call i32 @test( ) nounwind
ret i32 %X
}