brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · 61b2fba Raw
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