Anders Carlsson | 1610b81 | 2010-02-06 02:27:10 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -fsyntax-only -verify -Wweak-vtables |
| 2 | |
| 3 | struct A { // expected-warning {{'A' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit}} |
| 4 | virtual void f() { } |
| 5 | }; |
| 6 | |
| 7 | template<typename T> struct B { |
| 8 | virtual void f() { } |
| 9 | }; |
| 10 | |
| 11 | namespace { |
| 12 | struct C { |
| 13 | virtual void f() { } |
| 14 | }; |
| 15 | } |
| 16 | |
| 17 | void f() { |
| 18 | struct A { |
| 19 | virtual void f() { } |
| 20 | }; |
Douglas Gregor | 6fb745b | 2010-05-13 16:44:06 +0000 | [diff] [blame] | 21 | |
| 22 | A *a; |
| 23 | a->f(); |
| 24 | } |
| 25 | |
| 26 | // Use the vtables |
| 27 | void uses(A &a, B<int> &b, C &c) { |
| 28 | a.f(); |
| 29 | b.f(); |
| 30 | c.f(); |
Chris Lattner | 83e7a78 | 2010-04-07 22:58:06 +0000 | [diff] [blame] | 31 | } |