blob: c69b45630ef6a798dfc11c37ba4f393e0ab2f601 [file] [log] [blame]
Anders Carlssona552ea72010-01-31 01:43:37 +00001// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
Anders Carlsson0ee33cf2009-09-12 16:16:49 +00002struct A {
3 void f();
4
5 int a;
6};
7
8struct B : A {
9 double b;
10};
11
12void f() {
13 B b;
14
15 b.f();
16}
Anders Carlssona552ea72010-01-31 01:43:37 +000017
Bill Wendlingbe9e8bf2013-02-28 22:49:57 +000018// CHECK: define %struct.B* @_Z1fP1A(%struct.A* %a) [[NUW:#[0-9]+]]
Anders Carlssona552ea72010-01-31 01:43:37 +000019B *f(A *a) {
20 // CHECK-NOT: br label
21 // CHECK: ret %struct.B*
22 return static_cast<B*>(a);
23}
Anders Carlsson905a1002010-01-31 02:39:02 +000024
25// PR5965
26namespace PR5965 {
27
Bill Wendlingbe9e8bf2013-02-28 22:49:57 +000028// CHECK: define %struct.A* @_ZN6PR59651fEP1B(%struct.B* %b) [[NUW]]
Anders Carlsson905a1002010-01-31 02:39:02 +000029A *f(B* b) {
30 // CHECK-NOT: br label
31 // CHECK: ret %struct.A*
32 return b;
33}
34
35}
36
John McCall0ae287a2010-12-01 04:43:34 +000037// Don't crash on a derived-to-base conversion of an r-value
38// aggregate.
39namespace test3 {
40 struct A {};
41 struct B : A {};
42
43 void foo(A a);
44 void test() {
45 foo(B());
46 }
47}
Bill Wendlingf7a9da02013-02-20 07:22:19 +000048
Bill Wendlingbe9e8bf2013-02-28 22:49:57 +000049// CHECK: attributes [[NUW]] = { nounwind{{.*}} }