In gcc/objc/: 2010-11-29 Nicola Pero <nicola.pero@meta-innovation.com>
[official-gcc.git] / gcc / testsuite / objc.dg / exceptions-4.m
bloba8a26ecebb21a265621749c797701be05a99e837
1 /* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
2 /* { dg-options "-fobjc-exceptions" } */
3 /* { dg-do compile } */
5 /* Test warnings when parsing syntax errors in @catch().  */
7 #include <objc/objc.h>
9 @interface MyObject
11   Class isa;
13 @end
15 @implementation MyObject
16 @end
18 @interface MyObject2
20   Class isa;
22 @end
24 @implementation MyObject2
25 @end
27 @protocol MyProtocol;
29 int test (id object)
31   int dummy = 0;
33   @try { @throw object; }
34   @catch
35     { /* { dg-error "expected ... before ... token" } */
36       dummy++;
37     }
38   @catch ()  /* { dg-error "expected declaration specifiers or ..... before ..." } */
39     {
40       dummy++;
41     }
42   @catch (i) /* { dg-error "expected declaration specifiers or ..... before .i." } */
43     {
44       dummy++;
45     }
46   @catch (id <MyProtocol x) /* { dg-error "expected ... before .x." } */
47     {                       /* { dg-error "@catch parameter can not be protocol-qualified" "" { target *-*-* } 46 } */
48       dummy++;
49     }
50   @catch MyObject *x       /* { dg-error "expected ... before .MyObject." } */
51     {
52       dummy++;
53     }
54   @catch MyObject2 *x)      /* { dg-error "expected ... before .MyObject2." } */
55    {
56      dummy++;
57    }
59   @try { @throw object; }
60   @catch (MyObject *x)
61   @catch (MyObject2 *y)    /* { dg-error "expected ... before .catch." } */
63   return dummy;