Skip to content
Snippets Groups Projects
Commit cddc69fc authored by Sebastian Redl's avatar Sebastian Redl
Browse files

When looking for an entity's Scope, don't consider scopes that can't contain...

When looking for an entity's Scope, don't consider scopes that can't contain declarations. Fixes PR7594.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107927 91177308-0d34-0410-b5e6-96231b3b80d8
parent a93e3b5b
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -39,3 +39,14 @@ namespace PR6570 {
};
}
namespace PR7594 {
// If the lazy declaration of special member functions is triggered
// in an out-of-line initializer, make sure the functions aren't in
// the initializer scope. This used to crash Clang:
struct C {
C();
static C *c;
};
C *C::c = new C();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment