1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson 3c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlssonstruct Base1 { 4c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson virtual void g(); 5c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson}; 6c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson 7c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlssonstruct A : Base1 { 898367f0322ac43fa5b0c7ccb33bab95f66b960f6Anders Carlsson virtual void g() override override; // expected-error {{class member already marked 'override'}} 998367f0322ac43fa5b0c7ccb33bab95f66b960f6Anders Carlsson virtual void h() final final; // expected-error {{class member already marked 'final'}} 10b971dbdb65149a7cf0c046380186d0204e5b411eAnders Carlsson}; 11aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson 12c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlssonstruct Base2 { 134867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void e1(), e2(); 14c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson virtual void f(); 15c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson}; 16c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlsson 17c7119a871df4d2d79db3e48fc9d0ab421be54a3dAnders Carlssonstruct B : Base2 { 184867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void e1() override, e2(int); // No error. 19aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson virtual void f() override; 20aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson void g() override; // expected-error {{only virtual member functions can be marked 'override'}} 21aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson int h override; // expected-error {{only virtual member functions can be marked 'override'}} 22aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson}; 23aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson 24aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlssonstruct C { 25aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson virtual void f() final; 26aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson void g() final; // expected-error {{only virtual member functions can be marked 'final'}} 27aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson int h final; // expected-error {{only virtual member functions can be marked 'final'}} 28aae5af24f031ad5f17872bd8b27ed5c175c0f90cAnders Carlsson}; 294867347e82648d3baf09524b98b09c297a5a198fNico Weber 304867347e82648d3baf09524b98b09c297a5a198fNico Webernamespace inline_extension { 314867347e82648d3baf09524b98b09c297a5a198fNico Weber struct Base1 { 324867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void g() {} 334867347e82648d3baf09524b98b09c297a5a198fNico Weber }; 344867347e82648d3baf09524b98b09c297a5a198fNico Weber 354867347e82648d3baf09524b98b09c297a5a198fNico Weber struct A : Base1 { 364867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void g() override override {} // expected-error {{class member already marked 'override'}} 374867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void h() final final {} // expected-error {{class member already marked 'final'}} 384867347e82648d3baf09524b98b09c297a5a198fNico Weber }; 394867347e82648d3baf09524b98b09c297a5a198fNico Weber 404867347e82648d3baf09524b98b09c297a5a198fNico Weber struct Base2 { 414867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void f(); 424867347e82648d3baf09524b98b09c297a5a198fNico Weber }; 434867347e82648d3baf09524b98b09c297a5a198fNico Weber 444867347e82648d3baf09524b98b09c297a5a198fNico Weber struct B : Base2 { 454867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void f() override {} 464867347e82648d3baf09524b98b09c297a5a198fNico Weber void g() override {} // expected-error {{only virtual member functions can be marked 'override'}} 474867347e82648d3baf09524b98b09c297a5a198fNico Weber }; 484867347e82648d3baf09524b98b09c297a5a198fNico Weber 494867347e82648d3baf09524b98b09c297a5a198fNico Weber struct C { 504867347e82648d3baf09524b98b09c297a5a198fNico Weber virtual void f() final {} 514867347e82648d3baf09524b98b09c297a5a198fNico Weber void g() final {} // expected-error {{only virtual member functions can be marked 'final'}} 524867347e82648d3baf09524b98b09c297a5a198fNico Weber }; 534867347e82648d3baf09524b98b09c297a5a198fNico Weber} 54