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 f(A * a)10void f(A *a) { 11 // CHECK: call {{.*}}void % 12 a->f('c'); 13 } 14 15 struct B : virtual A { 16 virtual void f(); 17 }; 18 f(B * b)19void 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 f(B * b)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 f(A * p)46 void f(A *p) { 47 p->f(); 48 // CHECK: call {{.*}}void %{{[^#]*$}} 49 // CHECK-NOT: unreachable 50 } 51 } 52