19ca5c425SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 2fc1eef48SAnders Carlsson namespace Test1 { 3fc1eef48SAnders Carlsson 4fc1eef48SAnders Carlsson class A final { }; // expected-note {{'A' declared here}} 5fc1eef48SAnders Carlsson class B : A { }; // expected-error {{base 'A' is marked 'final'}} 6fc1eef48SAnders Carlsson 7fc1eef48SAnders Carlsson } 8fc1eef48SAnders Carlsson 9c4964a40SAnders Carlsson namespace Test2 { 10c4964a40SAnders Carlsson 11c4964a40SAnders Carlsson template<typename T> struct A final { }; // expected-note 2 {{'A' declared here}} 12c4964a40SAnders Carlsson struct B : A<int> { }; // expected-error {{base 'A' is marked 'final'}} 13c4964a40SAnders Carlsson 14c4964a40SAnders Carlsson template<typename T> struct C : A<T> { }; // expected-error {{base 'A' is marked 'final'}} 15c4964a40SAnders Carlsson struct D : C<int> { }; // expected-note {{in instantiation of template class 'Test2::C<int>' requested here}} 16c4964a40SAnders Carlsson 17c4964a40SAnders Carlsson } 18c4964a40SAnders Carlsson 19c4964a40SAnders Carlsson namespace Test3 { 20c4964a40SAnders Carlsson 21c4964a40SAnders Carlsson template<typename T> struct A { }; 22c4964a40SAnders Carlsson template<> struct A<int> final { }; // expected-note {{'A' declared here}} 23c4964a40SAnders Carlsson 24c4964a40SAnders Carlsson struct B : A<bool> { }; 25c4964a40SAnders Carlsson struct C : A<int> { }; // expected-error {{base 'A' is marked 'final'}} 26c4964a40SAnders Carlsson 27c4964a40SAnders Carlsson } 28c4964a40SAnders Carlsson 29*348df509SDavid Blaikie namespace Test4 { 30*348df509SDavid Blaikie 31*348df509SDavid Blaikie struct A final { virtual void func() = 0; }; // expected-warning {{abstract class is marked 'final'}} expected-note {{unimplemented pure virtual method 'func' in 'A'}} 32*348df509SDavid Blaikie struct B { virtual void func() = 0; }; // expected-note {{unimplemented pure virtual method 'func' in 'C'}} 33*348df509SDavid Blaikie 34*348df509SDavid Blaikie struct C final : B { }; // expected-warning {{abstract class is marked 'final'}} 35*348df509SDavid Blaikie 36*348df509SDavid Blaikie } 37