1 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -verify %s
2 
f1()3 void f1()
4 {
5   try {
6     ;
7   } catch(int i) {
8     ;
9   } catch(...) {
10   }
11 }
12 
f2()13 void 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 
27 void f3() try {
28 } catch(...) {
29 }
30 
31 struct 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 
40 A::A(char) : i(0) try {} // expected-error {{expected '{' or ','}}
41 A::A(int j) try : i(j) {} catch(...) {}
42 
43 
44 
45 // PR5740
46 struct Type { };
47 
48 enum { Type } Kind;
49 void f4() {
50   int i = 0;
51   switch (Kind) {
52     case Type: i = 7; break;  // no error.
53   }
54 }
55 
56 // PR5500
57 void f5() {
58   asm volatile ("":: :"memory");
59   asm volatile ("": ::"memory");
60 }
61 
62 int 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