1 // RUN: %clang_cc1 %s -triple %itanium_abi_triple -std=c++11 -emit-llvm -o - | FileCheck %s
2 
3 // PR5021
4 namespace PR5021 {
5 
6 struct A {
7   virtual void f(char);
8 };
9 
10 void f(A *a) {
11   // CHECK: call {{.*}}void %
12   a->f('c');
13 }
14 
15 struct B : virtual A {
16   virtual void f();
17 };
18 
19 void f(B * b) {
20   b->f();
21 }
22 
23 }
24 
25 namespace Test1 {
26   struct A {
27     virtual ~A();
28   };
29 
30   struct B : A {
31     virtual ~B();
32     virtual void f();
33   };
34 
35   void f(B *b) {
36     b->f();
37   }
38 }
39 
40 namespace VirtualNoreturn {
41   struct A {
42     [[noreturn]] virtual void f();
43   };
44 
45   // CHECK: @_ZN15VirtualNoreturn1f
46   void f(A *p) {
47     p->f();
48     // CHECK: call {{.*}}void %{{[^#]*$}}
49     // CHECK-NOT: unreachable
50   }
51 }
52