| /* Handle C++ scoping ('::') operators in ObjC message receivers gracefully. */ |
| /* Author: Ziemowit Laski <zlaski@apple.com> */ |
| |
| /* { dg-do run } */ |
| /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ |
| #include "../objc-obj-c++-shared/TestsuiteObject.m" |
| #include <stdlib.h> |
| |
| @class Derived; |
| |
| Derived *inst[3]; |
| |
| struct CxxClass { |
| static Derived *get_instance(int); |
| }; |
| |
| Derived *CxxClass::get_instance(int offs) { |
| return inst[offs]; |
| } |
| |
| @interface Derived: TestsuiteObject { |
| int value; |
| } |
| -(id)initWithValue:(int)val; |
| -(int)derived_meth; |
| @end |
| |
| @implementation Derived |
| -(id)initWithValue:(int)val { |
| [super init]; |
| value = val; |
| return self; |
| } |
| - (int)derived_meth { |
| return value; |
| } |
| @end |
| |
| int main(void) { |
| int r; |
| inst[1] = [[::Derived alloc] initWithValue:7]; |
| inst[2] = [[Derived alloc] initWithValue:77]; |
| |
| r = [CxxClass::get_instance(2) derived_meth]; |
| if (r != 77) |
| abort(); |
| |
| r = [CxxClass::get_instance(1) derived_meth]; |
| if (r != 7) |
| abort(); |
| |
| return 0; |
| } |
| |