add parsing for ObjC* method & method parm attributes
[gcc.git] / gcc / testsuite / obj-c++.dg / except-1.mm
1 /* { dg-do run } */
2 /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
3
4 /* This tests that exceptions work. It used to fail because
5 objc_msgSend was marked with DECL_NOTHROW.
6 If you include objc/Object.h, the problem goes away, because
7 that file includes objc/objc-runtime.h which explicitly prototypes
8 objc_msgSend without 'nothrow'. */
9
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include "../objc-obj-c++-shared/Object1.h"
13
14 // ObjectiveC class header
15 @interface ObjCclass : Object {
16 }
17 -(void)method1;
18 -(void)method2;
19 @end
20
21 // C++ class header
22 class CPPclass {
23 public:
24 void function1();
25 };
26
27
28 // Main
29 int main(int argc, char *argv[])
30 {
31 ObjCclass * foo = [[ObjCclass alloc] init];
32 [foo method1];
33 exit (0);
34 }
35
36
37 // ObjectiveC implementation
38 @implementation ObjCclass
39
40 -(void) method1
41 {
42 try {
43 [self method2];
44 }
45 catch(...) {
46 return;
47 }
48 }
49
50 -(void) method2
51 {
52 CPPclass foo;
53 foo.function1();
54 }
55
56 @end
57
58
59 // C++ implementation
60 void CPPclass::function1()
61 {
62 throw (1);
63 /* Shouldn't be here because we threw. */
64 abort ();
65 }
66
67 #include "../objc-obj-c++-shared/Object1-implementation.h"