| // RUN: %clang_cc1 %s -fsyntax-only -verify -triple %itanium_abi_triple -Wweak-vtables |
| // Check that this warning is disabled on MS ABI targets which don't have key |
| // RUN: %clang_cc1 %s -fsyntax-only -triple %ms_abi_triple -Werror -Wweak-vtables |
| // -Wweak-template-vtables is deprecated but we still parse it. |
| // RUN: %clang_cc1 %s -fsyntax-only -Werror -Wweak-template-vtables |
| struct A { // expected-warning {{'A' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit}} |
| template<typename T> struct B { |
| // <rdar://problem/9979458> |
| virtual void * getFoo() const = 0; |
| class Derived : public Parent { |
| class VeryDerived : public Derived { // expected-warning{{'VeryDerived' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit}} |
| void * getFoo() const { return 0; } |
| template<typename T> struct TemplVirt { |
| template class TemplVirt<float>; |
| template<> struct TemplVirt<bool> { |
| template<> struct TemplVirt<long> { // expected-warning{{'TemplVirt<long>' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit}} |