57 lines · cpp
1// RUN: %clang_cc1 %s -triple %itanium_abi_triple -std=c++11 -emit-llvm -o - | FileCheck %s2// RUN: %clang_cc1 %s -triple %itanium_abi_triple -std=c++11 -emit-llvm -o - -fstrict-vtable-pointers -O1 | FileCheck --check-prefix=CHECK-INVARIANT %s3 4// PR50215namespace PR5021 {6 7struct A {8 virtual void f(char);9};10 11void f(A *a) {12 // CHECK: call {{.*}}void %13 a->f('c');14}15 16struct B : virtual A { 17 virtual void f();18};19 20void f(B * b) {21 b->f();22}23 24}25 26namespace Test1 {27 struct A { 28 virtual ~A(); 29 };30 31 struct B : A {32 virtual ~B();33 virtual void f();34 };35 36 void f(B *b) {37 b->f();38 }39}40 41namespace VirtualNoreturn {42 struct A {43 [[noreturn]] virtual void f();44 };45 46 // CHECK-LABEL: @_ZN15VirtualNoreturn1f47 // CHECK-INVARIANT-LABEL: define {{(dso_local )?}}void @_ZN15VirtualNoreturn1f48 void f(A *p) {49 p->f();50 // CHECK: call {{.*}}void %{{[^#]*$}}51 // CHECK-NOT: unreachable52 // CHECK-INVARIANT: load {{.*}} !invariant.load ![[EMPTY_NODE:[0-9]+]]53 }54}55 56// CHECK-INVARIANT: ![[EMPTY_NODE]] = !{}57