Merge from mainline (157519:158021).
[official-gcc/graphite-test-results.git] / gcc / testsuite / objc.dg / call-super-3.m
blob0b950294b8f2d5b8610d41ad1fc3d15cf57ea7de
1 /* Check if sending messages to super does not interfere with sending messages
2    to classes. */
3 /* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
4 /* { dg-options "" } */
5 /* { dg-do run } */
6 /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
8 #include "../objc-obj-c++-shared/Object1.h"
10 extern void abort(void);
11 #define CHECK_IF(expr) if(!(expr)) abort()
13 @interface Base: Object
14 + (int) class_func1;
15 - (int) instance_func1;
16 @end
18 @interface Derived: Base
19 + (int) class_func1;
20 @end
22 @interface Derived (Categ)
23 - (int) instance_func1;
24 @end
26 @implementation Base
27 + (int) class_func1 { return 234; }
28 - (int) instance_func1 { return 345; }
29 @end
31 @implementation Derived
32 + (int) class_func1 { 
33   int i = [super class_func1];
34   i += [Base class_func1];
35   return i;
37 @end
39 @implementation Derived (Categ)
40 - (int) instance_func1 { 
41   int i = [super instance_func1];
42   i += [Base class_func1];  /* { dg-bogus "invalid receiver type" } */
43   return i;
45 @end
47 int main(void) {
48   Base *base = [[Base alloc] init];  /* { dg-bogus "invalid receiver type" } */
49   Derived *derived = [[Derived alloc] init];
50   CHECK_IF([Base class_func1] == 234);  /* { dg-bogus "invalid receiver type" } */
51   CHECK_IF([Derived class_func1] == 234 + 234);
52   CHECK_IF([base instance_func1] == 345);
53   CHECK_IF([derived instance_func1] == 234 + 345);
54   return 0;
57 #include "../objc-obj-c++-shared/Object1-implementation.h"