diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-01-07 16:34:42 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-01-07 16:34:42 +0000 |
| commit | e955880357af90d74eff9d4b270da2a820a8dcee (patch) | |
| tree | 583893cbc6bda44cd054c80d982cfa770fbcadf4 | |
| parent | 4bba1ed9bc6cbf580d02c62c2c800420ed8aa204 (diff) | |
| download | bcm5719-llvm-e955880357af90d74eff9d4b270da2a820a8dcee.tar.gz bcm5719-llvm-e955880357af90d74eff9d4b270da2a820a8dcee.zip | |
Use DeclContext::getLookupContext wherever necessary to ensure that we look through transparent contexts
llvm-svn: 61861
| -rw-r--r-- | clang/include/clang/AST/Decl.h | 12 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 5 |
2 files changed, 10 insertions, 7 deletions
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index 5b96153d595..ceea987ce0f 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -195,7 +195,7 @@ public: // be defined inside or outside a function etc). bool isDefinedOutsideFunctionOrMethod() const { if (getDeclContext()) - return !getDeclContext()->isFunctionOrMethod(); + return !getDeclContext()->getLookupContext()->isFunctionOrMethod(); else return true; } @@ -420,7 +420,7 @@ public: if (getKind() != Decl::Var) return false; if (const DeclContext *DC = getDeclContext()) - return DC->isFunctionOrMethod(); + return DC->getLookupContext()->isFunctionOrMethod(); return false; } @@ -428,9 +428,11 @@ public: bool isFileVarDecl() const { if (getKind() != Decl::Var) return false; - const DeclContext *Ctx = getDeclContext()->getLookupContext(); - if (isa<TranslationUnitDecl>(Ctx) || isa<NamespaceDecl>(Ctx) ) - return true; + if (const DeclContext *Ctx = getDeclContext()) { + Ctx = Ctx->getLookupContext(); + if (isa<TranslationUnitDecl>(Ctx) || isa<NamespaceDecl>(Ctx) ) + return true; + } return false; } diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index ea2ea074aad..e1c9efc326e 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -116,7 +116,8 @@ void Sema::PushOnScopeChains(NamedDecl *D, Scope *S) { // in this case the class name or enumeration name is hidden. if (TagDecl *TD = dyn_cast<TagDecl>(D)) { // We are pushing the name of a tag (enum or class). - if (CurContext == TD->getDeclContext()) { + if (CurContext->getLookupContext() + == TD->getDeclContext()->getLookupContext()) { // We're pushing the tag into the current context, which might // require some reshuffling in the identifier resolver. IdentifierResolver::iterator @@ -679,7 +680,7 @@ void Sema::CheckForFileScopedRedefinitions(Scope *S, VarDecl *VD) { bool VDIsTentative = isTentativeDefinition(VD); bool VDIsIncompleteArray = VD->getType()->isIncompleteArrayType(); - // FIXME: I don't this will actually see all of the + // FIXME: I don't think this will actually see all of the // redefinitions. Can't we check this property on-the-fly? for (IdentifierResolver::iterator I = IdResolver.begin(VD->getIdentifier(), |

