1/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */ 2/* { dg-options "-fobjc-exceptions" } */ 3/* { dg-do compile } */ 4 5/* Test warnings when parsing syntax errors in @catch(). */ 6 7#include <objc/objc.h> 8 9@interface MyObject 10{ 11 Class isa; 12} 13@end 14 15@implementation MyObject 16@end 17 18@interface MyObject2 19{ 20 Class isa; 21} 22@end 23 24@implementation MyObject2 25@end 26 27@protocol MyProtocol; 28 29int test (id object) 30{ 31 int dummy = 0; 32 33 @try { @throw object; } 34 @catch 35 { /* { dg-error "expected" } */ 36 dummy++; /* { dg-error "@catch parameter is not a known Objective-C class type" "" { target *-*-* } .-1 } */ 37 } 38 @catch () /* { dg-error "expected identifier before" } */ 39 { /* { dg-error "@catch parameter is not a known Objective-C class type" "" { target *-*-* } .-1 } */ 40 dummy++; 41 } 42 @catch (i) /* { dg-error ".i. has not been declared" } */ 43 { /* { dg-error "@catch parameter is not a known Objective-C class type" "" { target *-*-* } .-1 } */ 44 dummy++; 45 } 46 @catch (id <MyProtocol x) /* { dg-error "expected ... before .x." } */ 47 { /* { dg-error "@catch parameter can not be protocol-qualified" "" { target *-*-* } .-1 } */ 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 } 58 59 @try { @throw object; } 60 @catch (MyObject *x) 61 @catch (MyObject2 *y) /* { dg-error "expected ... before .catch." } */ 62 63 return dummy; /* { dg-error "expected ... before .return." } */ 64} 65