; RUN: opt < %s -adce -disable-output

declare void @strlen()

declare void @_ZN10QByteArray6resizeEi()

declare void @q_atomic_decrement()

define void @_ZNK10QByteArray13leftJustifiedEicb() {
entry:
        invoke void @strlen( )
                        to label %tmp.3.i.noexc unwind label %invoke_catch.0

tmp.3.i.noexc:          ; preds = %entry
        br i1 false, label %then.0, label %else.0

invoke_catch.0:         ; preds = %entry
        %exn.0 = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0
                 cleanup
        invoke void @q_atomic_decrement( )
                        to label %tmp.1.i.i183.noexc unwind label %terminate

tmp.1.i.i183.noexc:             ; preds = %invoke_catch.0
        ret void

then.0:         ; preds = %tmp.3.i.noexc
        invoke void @_ZN10QByteArray6resizeEi( )
                        to label %invoke_cont.1 unwind label %invoke_catch.1

invoke_catch.1:         ; preds = %then.0
        %exn.1 = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0
                 cleanup
        invoke void @q_atomic_decrement( )
                        to label %tmp.1.i.i162.noexc unwind label %terminate

tmp.1.i.i162.noexc:             ; preds = %invoke_catch.1
        ret void

invoke_cont.1:          ; preds = %then.0
        ret void

else.0:         ; preds = %tmp.3.i.noexc
        ret void

terminate:              ; preds = %invoke_catch.1, %invoke_catch.0
        %dbg.0.1 = phi {  }* [ null, %invoke_catch.1 ], [ null, %invoke_catch.0 ]               ; <{  }*> [#uses=0]
        %exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0
                 cleanup
        unreachable
}

declare i32 @__gxx_personality_v0(...)
