diff options
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
| -rw-r--r-- | clang/lib/Sema/Sema.cpp | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 6194c293d2b..cddc84eeedf 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -405,9 +405,12 @@ Scope *Sema::getScopeForContext(DeclContext *Ctx) {    Ctx = Ctx->getPrimaryContext();    for (Scope *S = getCurScope(); S; S = S->getParent()) { -    if (DeclContext *Entity = static_cast<DeclContext *> (S->getEntity())) -      if (Ctx == Entity->getPrimaryContext()) -        return S; +    // Ignore scopes that cannot have declarations. This is important for +    // out-of-line definitions of static class members. +    if (S->getFlags() & (Scope::DeclScope | Scope::TemplateParamScope)) +      if (DeclContext *Entity = static_cast<DeclContext *> (S->getEntity())) +        if (Ctx == Entity->getPrimaryContext()) +          return S;    }    return 0; | 

