1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 %s -triple %itanium_abi_triple -std=c++11 -emit-llvm -o - | FileCheck %s 2b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson 3b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson// PR5021 4c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlssonnamespace PR5021 { 5c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson 6b299d3516d4722ef527b1070bb87133427e621a3Anders Carlssonstruct A { 7b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson virtual void f(char); 8b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson}; 9b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson 10b299d3516d4722ef527b1070bb87133427e621a3Anders Carlssonvoid f(A *a) { 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: call {{.*}}void % 12b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson a->f('c'); 13b299d3516d4722ef527b1070bb87133427e621a3Anders Carlsson} 1429f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlsson 1529f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlssonstruct B : virtual A { 1629f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlsson virtual void f(); 1729f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlsson}; 1829f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlsson 1929f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlssonvoid f(B * b) { 2029f1a6070ac35fcbea9241c843df7f3f7c5c3228Anders Carlsson b->f(); 21c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson} 22c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson 23c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson} 24c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson 25c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlssonnamespace Test1 { 26c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson struct A { 27c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson virtual ~A(); 28c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson }; 29c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson 30c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson struct B : A { 31c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson virtual ~B(); 32c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson virtual void f(); 33c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson }; 34c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson 35c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson void f(B *b) { 36c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson b->f(); 37c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson } 38c1eec891eb008cf3bc89d69d90af82678513f79bAnders Carlsson} 393c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith 403c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smithnamespace VirtualNoreturn { 413c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith struct A { 423c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith [[noreturn]] virtual void f(); 433c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith }; 443c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith 453c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith // CHECK: @_ZN15VirtualNoreturn1f 463c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith void f(A *p) { 473c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith p->f(); 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: call {{.*}}void %{{[^#]*$}} 493c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith // CHECK-NOT: unreachable 503c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith } 513c5cd15da59d084ee441ac1512907a73f0e1f2bdRichard Smith} 52