11c9c9049SDavid Blaikie // RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions -fexceptions -verify %s
21c9c9049SDavid Blaikie 
func1(int i)31c9c9049SDavid Blaikie void func1(int i) { // expected-note{{previous definition is here}}
41c9c9049SDavid Blaikie   int i; // expected-error{{redefinition of 'i'}}
51c9c9049SDavid Blaikie }
61c9c9049SDavid Blaikie 
func2(int i)71c9c9049SDavid Blaikie void func2(int i) try { // expected-note{{previous definition is here}}
81c9c9049SDavid Blaikie   int i; // expected-error{{redefinition of 'i'}}
91c9c9049SDavid Blaikie } catch (...) {
101c9c9049SDavid Blaikie }
111c9c9049SDavid Blaikie 
func3(int i)12*9ef622e5SAaron Ballman void func3(int i) try { // expected-note {{previous definition is here}}
13*9ef622e5SAaron Ballman } catch (int i) { // expected-error {{redefinition of 'i'}}
141c9c9049SDavid Blaikie }
151c9c9049SDavid Blaikie 
func4(int i)161c9c9049SDavid Blaikie void func4(int i) try { // expected-note{{previous definition is here}}
171c9c9049SDavid Blaikie } catch (...) {
181c9c9049SDavid Blaikie   int i; // expected-error{{redefinition of 'i'}}
191c9c9049SDavid Blaikie }
201c9c9049SDavid Blaikie 
func5()211c9c9049SDavid Blaikie void func5() try {
221c9c9049SDavid Blaikie   int i;
231c9c9049SDavid Blaikie } catch (...) {
241c9c9049SDavid Blaikie   int j = i; // expected-error{{use of undeclared identifier 'i'}}
251c9c9049SDavid Blaikie }
2643df4cc5SDavid Blaikie 
func6()2743df4cc5SDavid Blaikie void func6() try {
2843df4cc5SDavid Blaikie } catch (int i) { // expected-note{{previous definition is here}}
2943df4cc5SDavid Blaikie   int i; // expected-error{{redefinition of 'i'}}
3043df4cc5SDavid Blaikie }
3143df4cc5SDavid Blaikie 
func7()3243df4cc5SDavid Blaikie void func7() {
3343df4cc5SDavid Blaikie   try {
3443df4cc5SDavid Blaikie   } catch (int i) { // expected-note{{previous definition is here}}
3543df4cc5SDavid Blaikie     int i; // expected-error{{redefinition of 'i'}}
3643df4cc5SDavid Blaikie   }
3743df4cc5SDavid Blaikie }
381d617806SDavid Blaikie 
func8()391d617806SDavid Blaikie void func8() {
401d617806SDavid Blaikie   int i;
411d617806SDavid Blaikie   try {
421d617806SDavid Blaikie     int i;
431d617806SDavid Blaikie   } catch (...) {
441d617806SDavid Blaikie   }
451d617806SDavid Blaikie }
461d617806SDavid Blaikie 
func9()471d617806SDavid Blaikie void func9() {
481d617806SDavid Blaikie   if (bool b = true)
491d617806SDavid Blaikie     try {
501d617806SDavid Blaikie       int b; // FIXME: this probably should be invalid, maybe
511d617806SDavid Blaikie     } catch (...) {
521d617806SDavid Blaikie     }
531d617806SDavid Blaikie }
541d617806SDavid Blaikie 
func10()551d617806SDavid Blaikie void func10() {
561d617806SDavid Blaikie   if (bool b = true)
571d617806SDavid Blaikie     if (true) {
581d617806SDavid Blaikie       int b; // FIXME: decide whether this is valid
591d617806SDavid Blaikie     }
601d617806SDavid Blaikie }
61*9ef622e5SAaron Ballman 
func11(int a)62*9ef622e5SAaron Ballman void func11(int a) {
63*9ef622e5SAaron Ballman   try {
64*9ef622e5SAaron Ballman   } catch (int a) {  // OK
65*9ef622e5SAaron Ballman   }
66*9ef622e5SAaron Ballman }
67