diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-12-01 16:18:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-12-01 16:18:00 +0000 |
commit | f107aa63eeae5385ad4fd22074b7f011cac7eb1c (patch) | |
tree | 9be06e9648d0a74e4e264af8cde2c536c72c0d12 | |
parent | 7ee0efd2893a1ab66e9d34fb911d958db6360ef6 (diff) | |
download | bcm5719-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.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/virtual-override.cpp | 8 |
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; +}; |