diff --git a/clang/test/CXX/class/class.mem/p8-0x.cpp b/clang/test/CXX/class/class.mem/p8-0x.cpp index db8aeace6421..ce676ae6ff50 100644 --- a/clang/test/CXX/class/class.mem/p8-0x.cpp +++ b/clang/test/CXX/class/class.mem/p8-0x.cpp @@ -1,11 +1,20 @@ // RUN: %clang_cc1 -fsyntax-only -std=c++0x -verify %s -struct A { + +struct Base1 { + virtual void g(); +}; + +struct A : Base1 { virtual void f() new new; // expected-error {{class member already marked 'new'}} virtual void g() override override; // expected-error {{class member already marked 'override'}} virtual void h() final final; // expected-error {{class member already marked 'final'}} }; -struct B { +struct Base2 { + virtual void f(); +}; + +struct B : Base2 { virtual void f() override; void g() override; // expected-error {{only virtual member functions can be marked 'override'}} int h override; // expected-error {{only virtual member functions can be marked 'override'}} diff --git a/clang/test/Parser/cxx0x-override-control-keywords.cpp b/clang/test/Parser/cxx0x-override-control-keywords.cpp index 35f0fe623a6c..f959f7a9952c 100644 --- a/clang/test/Parser/cxx0x-override-control-keywords.cpp +++ b/clang/test/Parser/cxx0x-override-control-keywords.cpp @@ -1,5 +1,10 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x %s -struct S { + +struct Base { + virtual void override(); +}; + +struct S : Base { virtual void final() final; virtual void override() override; virtual void n() new; @@ -9,10 +14,15 @@ struct S { struct T { // virt-specifier-seq is only valid in member-declarators, and a function definition is not a member-declarator. - virtual void f() const override { } // expected-error {{expected ';' at end of declaration list}} + // FIXME: This currently doesn't work. + // virtual void f() const override { } }; struct override; -struct A { - virtual override override(int override) override; +struct Base2 { + virtual override override(int override); +}; + +struct A : Base2 { + virtual struct override override(int override) override; };