1/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */ 2/* { dg-options "-fobjc-exceptions" } */ 3/* { dg-do compile } */ 4 5/* Test that you can use an unnamed argument with @catch. This test is the same 6 as exceptions-3.mm, but with no name for @catch arguments. */ 7 8#include <objc/objc.h> 9 10@interface MyObject 11{ 12 Class isa; 13} /* { dg-line interface_MyObject } */ 14@end 15 16@implementation MyObject 17@end 18 19@protocol MyProtocol; 20 21typedef MyObject MyObjectTypedef; 22typedef MyObject *MyObjectPtrTypedef; 23typedef int intTypedef; 24 25int test (id object) 26{ 27 int dummy = 0; 28 29 @try { @throw object; } 30 @catch (int) /* { dg-error "@catch parameter is not a known Objective-C class type" } */ 31 { 32 dummy++; 33 } 34 35 @try { @throw object; } 36 @catch (intTypedef) /* { dg-error "@catch parameter is not a known Objective-C class type" } */ 37 { 38 dummy++; 39 } 40 41 @try { @throw object; } 42 @catch (int *) /* { dg-error "@catch parameter is not a known Objective-C class type" } */ 43 { 44 dummy++; 45 } 46 47 @try { @throw object; } 48 @catch (id) /* Ok */ 49 { 50 dummy++; 51 } 52 53 @try { @throw object; } 54 @catch (id <MyProtocol>) /* { dg-error "@catch parameter can not be protocol-qualified" } */ 55 { 56 dummy++; 57 } 58 59 @try { @throw object; } 60 @catch (MyObject *) /* Ok */ 61 { 62 dummy++; 63 } 64 65 @try { @throw object; } 66 @catch (MyObject <MyProtocol> *) /* { dg-error "@catch parameter can not be protocol-qualified" } */ 67 { 68 dummy++; 69 } 70 71 @try { @throw object; } 72 @catch (MyObject) /* { dg-error "@catch parameter is not a known Objective-C class type" } */ 73 { /* { dg-error "no matching function" "" { target *-*-* } .-1 } */ 74 dummy++; /* { dg-message "MyObject" "" { target *-*-* } interface_MyObject } */ 75 } /* { dg-message "candidate" "" { target *-*-* } interface_MyObject } */ 76 77 @try { @throw object; } 78 @catch (static MyObject *) /* { dg-error "storage class" } */ 79 { 80 dummy++; 81 } 82 83 @try { @throw object; } 84 @catch (MyObjectTypedef *) /* Ok */ 85 { 86 dummy++; 87 } 88 89 @try { @throw object; } 90 @catch (MyObjectTypedef <MyProtocol> *) /* { dg-error "@catch parameter can not be protocol-qualified" } */ 91 { 92 dummy++; 93 } 94 95 @try { @throw object; } 96 @catch (MyObjectPtrTypedef) /* Ok */ 97 { 98 dummy++; 99 } 100 101 @try { @throw object; } 102 @catch (Class) /* { dg-error "@catch parameter is not a known Objective-C class type" } */ 103 { 104 dummy++; 105 } 106 107 @try { @throw object; } 108 @catch (...) /* Ok */ 109 { 110 dummy++; 111 } 112 113 return dummy; 114} 115