// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s struct A { void f(); int a; }; struct B : A { double b; }; void f() { B b; b.f(); } // CHECK: define %struct.B* @_Z1fP1A(%struct.A* %a) [[NUW:#[0-9]+]] B *f(A *a) { // CHECK-NOT: br label // CHECK: ret %struct.B* return static_cast<B*>(a); } // PR5965 namespace PR5965 { // CHECK: define %struct.A* @_ZN6PR59651fEP1B(%struct.B* %b) [[NUW]] A *f(B* b) { // CHECK-NOT: br label // CHECK: ret %struct.A* return b; } } // Don't crash on a derived-to-base conversion of an r-value // aggregate. namespace test3 { struct A {}; struct B : A {}; void foo(A a); void test() { foo(B()); } } // CHECK: attributes [[NUW]] = { nounwind{{.*}} }