Home | History | Annotate | Download | only in Parser
      1 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -verify %s
      2 
      3 void f1()
      4 {
      5   try {
      6     ;
      7   } catch(int i) {
      8     ;
      9   } catch(...) {
     10   }
     11 }
     12 
     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