Richard Smith | 3c5cd15 | 2013-03-05 08:30:04 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - | FileCheck %s |
Anders Carlsson | b299d35 | 2009-10-06 17:54:23 +0000 | [diff] [blame] | 2 | |
Anders Carlsson | b299d35 | 2009-10-06 17:54:23 +0000 | [diff] [blame] | 3 | // PR5021 |
Anders Carlsson | c1eec89 | 2010-02-12 18:14:46 +0000 | [diff] [blame] | 4 | namespace PR5021 { |
5 | |||||
Anders Carlsson | b299d35 | 2009-10-06 17:54:23 +0000 | [diff] [blame] | 6 | struct A { |
7 | virtual void f(char); | ||||
8 | }; | ||||
9 | |||||
10 | void f(A *a) { | ||||
Anders Carlsson | 5db0247 | 2009-10-12 20:06:34 +0000 | [diff] [blame] | 11 | // CHECK: call void % |
Anders Carlsson | b299d35 | 2009-10-06 17:54:23 +0000 | [diff] [blame] | 12 | a->f('c'); |
13 | } | ||||
Anders Carlsson | 29f1a60 | 2009-12-19 02:13:41 +0000 | [diff] [blame] | 14 | |
15 | struct B : virtual A { | ||||
16 | virtual void f(); | ||||
17 | }; | ||||
18 | |||||
19 | void f(B * b) { | ||||
20 | b->f(); | ||||
Anders Carlsson | c1eec89 | 2010-02-12 18:14:46 +0000 | [diff] [blame] | 21 | } |
22 | |||||
23 | } | ||||
24 | |||||
25 | namespace 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 Smith | 3c5cd15 | 2013-03-05 08:30:04 +0000 | [diff] [blame] | 39 | |
40 | namespace 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 | } |