1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions -fexceptions -verify %s
2
3void func1(int i) { // expected-note{{previous definition is here}}
4  int i; // expected-error{{redefinition of 'i'}}
5}
6
7void func2(int i) try { // expected-note{{previous definition is here}}
8  int i; // expected-error{{redefinition of 'i'}}
9} catch (...) {
10}
11
12void func3(int i) try { // expected-note {{previous definition is here}}
13} catch (int i) { // expected-error {{redefinition of 'i'}}
14}
15
16void func4(int i) try { // expected-note{{previous definition is here}}
17} catch (...) {
18  int i; // expected-error{{redefinition of 'i'}}
19}
20
21void func5() try {
22  int i;
23} catch (...) {
24  int j = i; // expected-error{{use of undeclared identifier 'i'}}
25}
26
27void func6() try {
28} catch (int i) { // expected-note{{previous definition is here}}
29  int i; // expected-error{{redefinition of 'i'}}
30}
31
32void func7() {
33  try {
34  } catch (int i) { // expected-note{{previous definition is here}}
35    int i; // expected-error{{redefinition of 'i'}}
36  }
37}
38
39void func8() {
40  int i;
41  try {
42    int i;
43  } catch (...) {
44  }
45}
46
47void func9() {
48  if (bool b = true)
49    try {
50      int b; // FIXME: this probably should be invalid, maybe
51    } catch (...) {
52    }
53}
54
55void func10() {
56  if (bool b = true)
57    if (true) {
58      int b; // FIXME: decide whether this is valid
59    }
60}
61
62void func11(int a) {
63  try {
64  } catch (int a) {  // OK
65  }
66}
67