diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-scope-1.mm')
-rw-r--r-- | gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-scope-1.mm | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-scope-1.mm b/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-scope-1.mm new file mode 100644 index 000000000..eb0c377da --- /dev/null +++ b/gcc-4.9/gcc/testsuite/obj-c++.dg/cxx-scope-1.mm @@ -0,0 +1,54 @@ +/* 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; +} + |