From 3d512d8a75d4cb4609398ce3c2a3ba4c01a23513 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Sat, 10 Nov 2012 01:38:24 +0000 Subject: [PATCH] Handle redeclarations of catch variables in catch blocks. Fix to regression caused by r167650, caught by Richard Smith in code review. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167653 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/IdentifierResolver.cpp | 5 ++++- test/CXX/basic/basic.scope/basic.scope.local/p2.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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'}} + } +} -- 2.40.0