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