1// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -verify %s
2
3void f1()
4{
5  try {
6    ;
7  } catch(int i) {
8    ;
9  } catch(...) {
10  }
11}
12
13void f2()
14{
15  try; // expected-error {{expected '{'}}
16
17  try {}
18  catch; // expected-error {{expected '('}}
19
20  try {}
21  catch (...); // expected-error {{expected '{'}}
22
23  try {}
24  catch {} // expected-error {{expected '('}}
25}
26
27void f3() try {
28} catch(...) {
29}
30
31struct A {
32  int i;
33  A(int);
34  A(char);
35  A() try : i(0) {} catch(...) {}
36  void f() try {} catch(...) {}
37  A(float) : i(0) try {} // expected-error {{expected '{' or ','}}
38};
39
40A::A(char) : i(0) try {} // expected-error {{expected '{' or ','}}
41A::A(int j) try : i(j) {} catch(...) {}
42
43
44
45// PR5740
46struct Type { };
47
48enum { Type } Kind;
49void f4() {
50  int i = 0;
51  switch (Kind) {
52    case Type: i = 7; break;  // no error.
53  }
54}
55
56// PR5500
57void f5() {
58  asm volatile ("":: :"memory");
59  asm volatile ("": ::"memory");
60}
61
62int f6() {
63  int k, // expected-note {{change this ',' to a ';' to call 'f6'}}
64  f6(), // expected-error {{expected ';'}} expected-warning {{interpreted as a function declaration}} expected-note {{replace paren}}
65  int n = 0, // expected-error {{expected ';'}}
66  return f5(), // ok
67  int(n);
68}
69