diff options
-rw-r--r-- | lib/Sema/IdentifierResolver.cpp | 5 | ||||
-rw-r--r-- | test/CXX/basic/basic.scope/basic.scope.local/p2.cpp | 12 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/Sema/IdentifierResolver.cpp b/lib/Sema/IdentifierResolver.cpp index 50413c3d95..00939151c6 100644 --- a/lib/Sema/IdentifierResolver.cpp +++ b/lib/Sema/IdentifierResolver.cpp @@ -138,8 +138,11 @@ bool IdentifierResolver::isDeclInScope(Decl *D, DeclContext *Ctx, if (S->getFlags() & Scope::FnTryScope) return S->getParent()->isDeclScope(D); if (S->getParent()->getFlags() & Scope::ControlScope) { - if (S->getParent()->getFlags() & Scope::FnCatchScope) + if (S->getParent()->getFlags() & Scope::FnCatchScope) { S = S->getParent(); + if (S->isDeclScope(D)) + return true; + } return S->getParent()->isDeclScope(D); } } diff --git a/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp b/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp index 624118cc36..91e96b6b26 100644 --- a/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp +++ b/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp @@ -23,3 +23,15 @@ void func5() try { } catch (...) { int j = i; // expected-error{{use of undeclared identifier 'i'}} } + +void func6() try { +} catch (int i) { // expected-note{{previous definition is here}} + int i; // expected-error{{redefinition of 'i'}} +} + +void func7() { + try { + } catch (int i) { // expected-note{{previous definition is here}} + int i; // expected-error{{redefinition of 'i'}} + } +} |