summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2009-12-16 20:00:27 +0000
committerEli Friedman <eli.friedman@gmail.com>2009-12-16 20:00:27 +0000
commit5dd02a0f6559ad7a1385232ce5612a7f1eaf9378 (patch)
treedaf6fb3f3dd039205530cc18fac5b7538a480aa7 /clang/lib/Sema/SemaDeclCXX.cpp
parent3ab9e4cf87e902aecbef20c3cd2fa211f2bab387 (diff)
downloadbcm5719-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.cpp9
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,
OpenPOWER on IntegriCloud