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