]> granicus.if.org Git - clang/commitdiff
Simplify CXXMethodDecl::isVirtual() for __interface case
authorDmitri Gribenko <gribozavr@gmail.com>
Thu, 19 Dec 2013 01:58:52 +0000 (01:58 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Thu, 19 Dec 2013 01:58:52 +0000 (01:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197643 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclCXX.h

index 53c127e2cc9a1eeb6e14115f645a17f2ab7557ce..75f20e2462ce6389e8020fd82634ded05a53b6e5 100644 (file)
@@ -1692,9 +1692,9 @@ public:
     CXXMethodDecl *CD =
       cast<CXXMethodDecl>(const_cast<CXXMethodDecl*>(this)->getCanonicalDecl());
 
-    // Methods declared in interfaces are automatically (pure) virtual.
-    if (CD->isVirtualAsWritten() ||
-          (CD->getParent()->isInterface() && CD->isUserProvided()))
+    // Member function is virtual if it is marked explicitly so, or if it is
+    // declared in __interface -- then it is automatically pure virtual.
+    if (CD->isVirtualAsWritten() || CD->isPure())
       return true;
 
     return (CD->begin_overridden_methods() != CD->end_overridden_methods());