summaryrefslogtreecommitdiffstats
path: root/test/CXX/class.derived
diff options
context:
space:
mode:
Diffstat (limited to 'test/CXX/class.derived')
-rw-r--r--test/CXX/class.derived/class.abstract/p16.cpp4
-rw-r--r--test/CXX/class.derived/class.member.lookup/p7.cpp11
-rw-r--r--test/CXX/class.derived/class.virtual/p3-0x.cpp20
3 files changed, 33 insertions, 2 deletions
diff --git a/test/CXX/class.derived/class.abstract/p16.cpp b/test/CXX/class.derived/class.abstract/p16.cpp
index c237ed9..2053218 100644
--- a/test/CXX/class.derived/class.abstract/p16.cpp
+++ b/test/CXX/class.derived/class.abstract/p16.cpp
@@ -22,7 +22,7 @@ struct H;
struct D {
virtual E &operator=(const E &); // expected-note {{here}}
virtual F &operator=(const F &);
- virtual G &operator=(G&&);
+ virtual G &operator=(G&&); // expected-note {{here}}
virtual H &operator=(H&&); // expected-note {{here}}
friend struct F;
@@ -34,8 +34,8 @@ private:
struct E : D {}; // expected-error {{deleted function '~E' cannot override a non-deleted function}} \
// expected-error {{deleted function 'operator=' cannot override a non-deleted function}}
struct F : D {};
-// No move ctor here, because it would be deleted.
struct G : D {}; // expected-error {{deleted function '~G' cannot override a non-deleted function}}
+ // expected-error@-1 {{deleted function 'operator=' cannot override a non-deleted function}}
struct H : D {
H &operator=(H&&) = default; // expected-error {{deleted function 'operator=' cannot override a non-deleted function}}
~H();
diff --git a/test/CXX/class.derived/class.member.lookup/p7.cpp b/test/CXX/class.derived/class.member.lookup/p7.cpp
new file mode 100644
index 0000000..a785e0f
--- /dev/null
+++ b/test/CXX/class.derived/class.member.lookup/p7.cpp
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -verify %s
+
+// expected-no-diagnostics
+
+struct A { int n; };
+struct B { float n; };
+struct C : A, B {};
+struct D : virtual C {};
+struct E : virtual C { char n; };
+struct F : D, E {} f;
+char &k = f.n;
diff --git a/test/CXX/class.derived/class.virtual/p3-0x.cpp b/test/CXX/class.derived/class.virtual/p3-0x.cpp
index 6a02a86..41a5954 100644
--- a/test/CXX/class.derived/class.virtual/p3-0x.cpp
+++ b/test/CXX/class.derived/class.virtual/p3-0x.cpp
@@ -130,3 +130,23 @@ namespace MemberOfUnknownSpecialization {
// expected-note@+1 {{in instantiation of}}
A<double>::C c3;
}
+
+namespace DiagnosticsQOI {
+ struct X {
+ virtual ~X();
+ virtual void foo(int x); // expected-note {{hidden overloaded virtual function}}
+ virtual void bar(int x); // expected-note 2 {{hidden overloaded virtual function}}
+ virtual void bar(float x); // expected-note 2 {{hidden overloaded virtual function}}
+ };
+
+ struct Y : X {
+ void foo(int x, int y) override; // expected-error {{non-virtual member function marked 'override' hides virtual member function}}
+ void bar(double) override; // expected-error {{non-virtual member function marked 'override' hides virtual member functions}}
+ void bar(long double) final; // expected-error {{non-virtual member function marked 'final' hides virtual member functions}}
+ };
+
+ template<typename T>
+ struct Z : T {
+ static void foo() override; // expected-error {{only virtual member functions can be marked 'override'}}
+ };
+}
OpenPOWER on IntegriCloud