summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-01 16:18:00 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-01 16:18:00 +0000
commitf107aa63eeae5385ad4fd22074b7f011cac7eb1c (patch)
tree9be06e9648d0a74e4e264af8cde2c536c72c0d12
parent7ee0efd2893a1ab66e9d34fb911d958db6360ef6 (diff)
downloadbcm5719-llvm-f107aa63eeae5385ad4fd22074b7f011cac7eb1c.tar.gz
bcm5719-llvm-f107aa63eeae5385ad4fd22074b7f011cac7eb1c.zip
An inherited virtual (where "virtual" wasn't written explicitly) can
be defined as pure. Fixes PR5656. llvm-svn: 90237
-rw-r--r--clang/lib/Sema/SemaDecl.cpp2
-rw-r--r--clang/test/SemaCXX/virtual-override.cpp8
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 520d7de710b..2087f8b8c6c 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -3393,7 +3393,7 @@ void Sema::AddInitializerToDecl(DeclPtrTy dcl, ExprArg init, bool DirectInit) {
Expr *Init = static_cast<Expr *>(init.get());
if ((IL = dyn_cast<IntegerLiteral>(Init)) && IL->getValue() == 0 &&
Context.getCanonicalType(IL->getType()) == Context.IntTy) {
- if (Method->isVirtualAsWritten()) {
+ if (Method->isVirtual()) {
Method->setPure();
// A class is abstract if at least one function is pure virtual.
diff --git a/clang/test/SemaCXX/virtual-override.cpp b/clang/test/SemaCXX/virtual-override.cpp
index 4a3b10fa976..7ace886ff0d 100644
--- a/clang/test/SemaCXX/virtual-override.cpp
+++ b/clang/test/SemaCXX/virtual-override.cpp
@@ -104,3 +104,11 @@ namespace T7 {
virtual b* f();
};
}
+
+// PR5656
+class X0 {
+ virtual void f0();
+};
+class X1 : public X0 {
+ void f0() = 0;
+};
OpenPOWER on IntegriCloud