diff options
author | David Blaikie <dblaikie@gmail.com> | 2012-11-10 01:04:23 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2012-11-10 01:04:23 +0000 |
commit | c4027c82ad4a61f2da1b893ac8fe47bf11e5d50d (patch) | |
tree | 2541912aebadfc9954c4c12366ef43c3af400d8e /test/CXX/basic/basic.scope/basic.scope.local/p2.cpp | |
parent | 75e8efef960a5e8b94a7e289088e5e7cabe728bd (diff) |
PR14296: function parameter name collisions in function try/catch
C++11 3.3.3/2 "A parameter name shall not be redeclared in the outermost block
of the function definition nor in the outermost block of any handler associated
with a function-try-block."
It's not totally clear to me whether the "FIXME" case is covered by this, but
Richard Smith thinks it probably should be. It's just a bit more involved to
fix that case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167650 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/basic/basic.scope/basic.scope.local/p2.cpp')
-rw-r--r-- | test/CXX/basic/basic.scope/basic.scope.local/p2.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp b/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp new file mode 100644 index 0000000000..624118cc36 --- /dev/null +++ b/test/CXX/basic/basic.scope/basic.scope.local/p2.cpp @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions -fexceptions -verify %s + +void func1(int i) { // expected-note{{previous definition is here}} + int i; // expected-error{{redefinition of 'i'}} +} + +void func2(int i) try { // expected-note{{previous definition is here}} + int i; // expected-error{{redefinition of 'i'}} +} catch (...) { +} + +void func3(int i) try { // FIXME: note {{previous definition is here}} +} catch (int i) { // FIXME: error {{redefinition of 'i'}} +} + +void func4(int i) try { // expected-note{{previous definition is here}} +} catch (...) { + int i; // expected-error{{redefinition of 'i'}} +} + +void func5() try { + int i; +} catch (...) { + int j = i; // expected-error{{use of undeclared identifier 'i'}} +} |