]> granicus.if.org Git - clang/commitdiff
When checking for functions marked override, ignore dependent contexts.
authorAnders Carlsson <andersca@mac.com>
Thu, 20 Jan 2011 06:33:26 +0000 (06:33 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 20 Jan 2011 06:33:26 +0000 (06:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123894 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclCXX.cpp
test/CXX/class.derived/class.virtual/p3-0x.cpp

index 9981b1f6c8986983d80b8d2c09a86b1e44d78171..b9d760b41244e3e6b30928beeee86200488a892f 100644 (file)
@@ -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, 
index 83f1eb043951dc8f759e6c3ec576502194c251f1..773b9f6077faebe1ef2fa49547d414ffb16d31ce 100644 (file)
@@ -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;
+};
+
+}