summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorSerge Pavlov <sepavloff@gmail.com>2015-06-10 19:06:59 +0000
committerSerge Pavlov <sepavloff@gmail.com>2015-06-10 19:06:59 +0000
commit47ebb75cf9f5cf6f162cd3ba09bf1ae7c33f74a4 (patch)
tree13d120b388e20482434dccccbdcb25589bf8b87a /clang/lib/Sema/SemaDecl.cpp
parentc87a6faba162797b9187c1e717c2ff3b7daea9b6 (diff)
downloadbcm5719-llvm-47ebb75cf9f5cf6f162cd3ba09bf1ae7c33f74a4.tar.gz
bcm5719-llvm-47ebb75cf9f5cf6f162cd3ba09bf1ae7c33f74a4.zip
Do not parse members of incomplete class.
If definition of a class is unknown and out-of-line definition of its member is encountered, do not parse the member declaration. This change fixes PR18542. Differential Revision: http://reviews.llvm.org/D8010 llvm-svn: 239483
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 047958e2fc2..1c0eea72dd8 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -4663,12 +4663,14 @@ NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D,
RequireCompleteDeclContext(D.getCXXScopeSpec(), DC))
return nullptr;
+ // If a class is incomplete, do not parse entities inside it.
if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {
Diag(D.getIdentifierLoc(),
diag::err_member_def_undefined_record)
<< Name << DC << D.getCXXScopeSpec().getRange();
- D.setInvalidType();
- } else if (!D.getDeclSpec().isFriendSpecified()) {
+ return nullptr;
+ }
+ if (!D.getDeclSpec().isFriendSpecified()) {
if (diagnoseQualifiedDeclaration(D.getCXXScopeSpec(), DC,
Name, D.getIdentifierLoc())) {
if (DC->isRecord())
OpenPOWER on IntegriCloud