diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2009-12-16 20:00:27 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2009-12-16 20:00:27 +0000 |
| commit | 5dd02a0f6559ad7a1385232ce5612a7f1eaf9378 (patch) | |
| tree | daf6fb3f3dd039205530cc18fac5b7538a480aa7 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | 3ab9e4cf87e902aecbef20c3cd2fa211f2bab387 (diff) | |
| download | bcm5719-llvm-5dd02a0f6559ad7a1385232ce5612a7f1eaf9378.tar.gz bcm5719-llvm-5dd02a0f6559ad7a1385232ce5612a7f1eaf9378.zip | |
Correctly calcluate abstract-ness in the case where an implicitly declared
method overrides a pure virtual method.
llvm-svn: 91558
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 091c0384460..afddd9f02cb 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -1979,6 +1979,12 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) { if (!Record || Record->isInvalidDecl()) return; + if (!Record->isDependentType()) + AddImplicitlyDeclaredMembersToClass(Record); + + if (Record->isInvalidDecl()) + return; + if (!Record->isAbstract()) { // Collect all the pure virtual methods and see if this is an abstract // class after all. @@ -1989,9 +1995,6 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) { if (Record->isAbstract()) (void)AbstractClassUsageDiagnoser(*this, Record); - - if (!Record->isDependentType() && !Record->isInvalidDecl()) - AddImplicitlyDeclaredMembersToClass(Record); } void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc, |

