blob: e1b380fe7369a9431b061e987b034571710a999a [file] [log] [blame]
Richard Smith3c5cd152013-03-05 08:30:04 +00001// RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - | FileCheck %s
Anders Carlssonb299d352009-10-06 17:54:23 +00002
Anders Carlssonb299d352009-10-06 17:54:23 +00003// PR5021
Anders Carlssonc1eec892010-02-12 18:14:46 +00004namespace PR5021 {
5
Anders Carlssonb299d352009-10-06 17:54:23 +00006struct A {
7 virtual void f(char);
8};
9
10void f(A *a) {
Anders Carlsson5db02472009-10-12 20:06:34 +000011 // CHECK: call void %
Anders Carlssonb299d352009-10-06 17:54:23 +000012 a->f('c');
13}
Anders Carlsson29f1a602009-12-19 02:13:41 +000014
15struct B : virtual A {
16 virtual void f();
17};
18
19void f(B * b) {
20 b->f();
Anders Carlssonc1eec892010-02-12 18:14:46 +000021}
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}
Richard Smith3c5cd152013-03-05 08:30:04 +000039
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}