Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
      2 struct A {
      3   void f();
      4 
      5   int a;
      6 };
      7 
      8 struct B : A {
      9   double b;
     10 };
     11 
     12 void f() {
     13   B b;
     14 
     15   b.f();
     16 }
     17 
     18 // CHECK: define %struct.B* @_Z1fP1A(%struct.A* %a) [[NUW:#[0-9]+]]
     19 B *f(A *a) {
     20   // CHECK-NOT: br label
     21   // CHECK: ret %struct.B*
     22   return static_cast<B*>(a);
     23 }
     24 
     25 // PR5965
     26 namespace PR5965 {
     27 
     28 // CHECK: define %struct.A* @_ZN6PR59651fEP1B(%struct.B* %b) [[NUW]]
     29 A *f(B* b) {
     30   // CHECK-NOT: br label
     31   // CHECK: ret %struct.A*
     32   return b;
     33 }
     34 
     35 }
     36 
     37 // Don't crash on a derived-to-base conversion of an r-value
     38 // aggregate.
     39 namespace test3 {
     40   struct A {};
     41   struct B : A {};
     42 
     43   void foo(A a);
     44   void test() {
     45     foo(B());
     46   }
     47 }
     48 
     49 // CHECK: attributes [[NUW]] = { nounwind{{.*}} }
     50