diff options
author | Anders Carlsson <andersca@mac.com> | 2011-01-20 06:33:26 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2011-01-20 06:33:26 +0000 |
commit | fa8e5d3d67ea1c02c45ee70b02e062be7643b29f (patch) | |
tree | a96f3d854e4985e8b1aa95b837ed1755596808b9 | |
parent | c87f861d0abfb992e347e20256b8f60959d2fc1d (diff) | |
download | bcm5719-llvm-fa8e5d3d67ea1c02c45ee70b02e062be7643b29f.tar.gz bcm5719-llvm-fa8e5d3d67ea1c02c45ee70b02e062be7643b29f.zip |
When checking for functions marked override, ignore dependent contexts.
llvm-svn: 123894
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 3 | ||||
-rw-r--r-- | clang/test/CXX/class.derived/class.virtual/p3-0x.cpp | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 9981b1f6c89..b9d760b4124 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -858,6 +858,9 @@ void Sema::CheckOverrideControl(const Decl *D) { if (!MD || !MD->isVirtual()) return; + if (MD->isDependentContext()) + return; + // C++0x [class.virtual]p3: // If a virtual function is marked with the virt-specifier override and does // not override a member function of a base class, diff --git a/clang/test/CXX/class.derived/class.virtual/p3-0x.cpp b/clang/test/CXX/class.derived/class.virtual/p3-0x.cpp index 83f1eb04395..773b9f6077f 100644 --- a/clang/test/CXX/class.derived/class.virtual/p3-0x.cpp +++ b/clang/test/CXX/class.derived/class.virtual/p3-0x.cpp @@ -1,5 +1,7 @@ // RUN: %clang_cc1 -fsyntax-only -std=c++0x -verify %s +namespace Test1 { + struct B { virtual void f(int); }; @@ -8,3 +10,17 @@ struct D : B { virtual void f(long) override; // expected-error {{'f' marked 'override' but does not override any member functions}} void f(int) override; }; +} + +namespace Test2 { + +struct A { + virtual void f(int, char, int); +}; + +template<typename T> +struct B : A { + virtual void f(T) override; +}; + +} |