From: Iain Sandoe Date: Fri, 5 Nov 2010 10:03:54 +0000 (+0000) Subject: NeXT runtime compatibility changes. X-Git-Tag: releases/gcc-4.6.0~2892 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a5ad8c30d627e2e243ebd0662c2d4dac778462d5;p=thirdparty%2Fgcc.git NeXT runtime compatibility changes. gcc/testsuite: * objc.dg/torture/forward-1.m: Restore for m32 NeXT. * objc.dg/demangle-1.m: Remove NeXT ifdef around +initialize declaration and implementation. * objc.dg/property/dotsyntax-3.m: XFAIL NeXT m64 run. * obj-c++.dg/property/at-property-13.mm: Likewise. * obj-c++.dg/property/fsf-property-method-access.mm: Likewise. * obj-c++.dg/property/property-1.mm: Likewise. * obj-c++.dg/property/at-property-7.mm: Likewise. * obj-c++.dg/property/at-property-9.mm: Likewise. * obj-c++.dg/property/dotsyntax-2.mm: Likewise. * obj-c++.dg/property/at-property-10.mm: Likewise. * obj-c++.dg/property/synthesize-2.mm: Likewise. * obj-c++.dg/property/at-property-12.mm: Likewise. * obj-c++.dg/property/fsf-property-basic.mm: Likewise. * obj-c++.dg/property/fsf-property-named-ivar.mm: Likewise. * obj-c++.dg/property/at-property-6.mm: Likewise. * obj-c++.dg/property/at-property-8.mm: Likewise. * obj-c++.dg/property/dotsyntax-1.mm: Likewise. * obj-c++.dg/property/dotsyntax-3.mm: Likewise. * obj-c++.dg/property/at-property-11.mm: Likewise. * obj-c++.dg/template-8.mm: Likewise. * obj-c++.dg/encode-3.mm: Use abort (), cast char types. * obj-c++.dg/demangle-2.mm: Add +initialize:, XFAIL NeXT m64. * obj-c++.dg/property/at-property-2.mm: Comment out a case that ICEs and put a FIXME for this. * obj-c++.dg/property/property-2.mm: Remove. * obj-c++.dg/property/property-3.mm: Remove. From-SVN: r166352 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ef03bdac94f..2041a7a76204 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,33 @@ +2010-11-05 Iain Sandoe + + * objc.dg/torture/forward-1.m: Restore for m32 NeXT. + * objc.dg/demangle-1.m: Remove NeXT ifdef around +initialize + declaration and implementation. + * objc.dg/property/dotsyntax-3.m: XFAIL NeXT m64 run. + * obj-c++.dg/property/at-property-13.mm: Likewise. + * obj-c++.dg/property/fsf-property-method-access.mm: Likewise. + * obj-c++.dg/property/property-1.mm: Likewise. + * obj-c++.dg/property/at-property-7.mm: Likewise. + * obj-c++.dg/property/at-property-9.mm: Likewise. + * obj-c++.dg/property/dotsyntax-2.mm: Likewise. + * obj-c++.dg/property/at-property-10.mm: Likewise. + * obj-c++.dg/property/synthesize-2.mm: Likewise. + * obj-c++.dg/property/at-property-12.mm: Likewise. + * obj-c++.dg/property/fsf-property-basic.mm: Likewise. + * obj-c++.dg/property/fsf-property-named-ivar.mm: Likewise. + * obj-c++.dg/property/at-property-6.mm: Likewise. + * obj-c++.dg/property/at-property-8.mm: Likewise. + * obj-c++.dg/property/dotsyntax-1.mm: Likewise. + * obj-c++.dg/property/dotsyntax-3.mm: Likewise. + * obj-c++.dg/property/at-property-11.mm: Likewise. + * obj-c++.dg/template-8.mm: Likewise. + * obj-c++.dg/encode-3.mm: Use abort (), cast char types. + * obj-c++.dg/demangle-2.mm: Add +initialize:, XFAIL NeXT m64. + * obj-c++.dg/property/at-property-2.mm: Comment out a case that ICEs and + put a FIXME for this. + * obj-c++.dg/property/property-2.mm: Remove. + * obj-c++.dg/property/property-3.mm: Remove. + 2010-11-05 Jakub Jelinek PR debug/46307 @@ -76,10 +106,9 @@ * objc.dg/encode-7-next.m: Use next-mapping.h, ignore deprecation warnings. * objc.dg/encode-7-next-64bit.m: Use next-mapping.h, ignore - deprecation warnings. Use Object1 implemenation. + deprecation warnings. Use Object1 implementation. * objc.dg/demangle-1.m: Provide +initialize. XFAIL m64 NeXT run. - * objc/execute/forward-1.m: Move to objc.dg/torture and reduce scope - to m32 NeXT. + * objc/execute/forward-1.m: Remove. * objc/execute/forward-1.x: Remove. 2010-11-04 Jason Merrill diff --git a/gcc/testsuite/obj-c++.dg/demangle-2.mm b/gcc/testsuite/obj-c++.dg/demangle-2.mm index c58a4f8ce4fc..f28208591372 100644 --- a/gcc/testsuite/obj-c++.dg/demangle-2.mm +++ b/gcc/testsuite/obj-c++.dg/demangle-2.mm @@ -1,5 +1,6 @@ /* Test demangling an Objective-C method. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #include #include @@ -13,6 +14,7 @@ + (int) testFunction1; + (int) test_function2; + (int) __testFunction3: (int)unused andArgument: (char)unused2; ++ (id) initialize; @end @implementation DemangleTest @@ -31,6 +33,7 @@ std::cout << __PRETTY_FUNCTION__ << "\n"; return std::strcmp (__PRETTY_FUNCTION__, "+[DemangleTest __testFunction3:andArgument:]"); } ++ (id) initialize { return self; } @end int main () diff --git a/gcc/testsuite/obj-c++.dg/encode-3.mm b/gcc/testsuite/obj-c++.dg/encode-3.mm index 8627a773e254..44f288d7de09 100644 --- a/gcc/testsuite/obj-c++.dg/encode-3.mm +++ b/gcc/testsuite/obj-c++.dg/encode-3.mm @@ -1,8 +1,8 @@ /* { dg-do run } */ extern "C" { -extern void _exit(int); -extern int strcmp(const char *, const char *); +extern void abort (void); +extern int strcmp (const char *, const char *); } template @@ -36,16 +36,16 @@ int main(void) { const char *encode = @encode(long); if (strcmp (encode, L)) - _exit(-(__LINE__)); + abort (); - if (strcmp (enc, "{Vec=ff" L "q}")) - _exit(-(__LINE__)); + if (strcmp (enc, (const char *)"{Vec=ff" L "q}")) + abort (); - if (strcmp (enc2, "{Vec=dd" L "q}")) - _exit(-(__LINE__)); + if (strcmp (enc2, (const char *)"{Vec=dd" L "q}")) + abort (); - if (strcmp (enc3, "{?=f[10d]i" L "q{Vec=rcrc" L "q}}")) - _exit(-(__LINE__)); + if (strcmp (enc3, (const char *)"{?=f[10d]i" L "q{Vec=rcrc" L "q}}")) + abort (); return 0; } diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-10.mm b/gcc/testsuite/obj-c++.dg/property/at-property-10.mm index 83494ec3bccd..b867896f8b54 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-10.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-10.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the property syntax in a number of expressions. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-11.mm b/gcc/testsuite/obj-c++.dg/property/at-property-11.mm index 82880521680d..51c402346470 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-11.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-11.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test that properties are found even if implemented in superclasses. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-12.mm b/gcc/testsuite/obj-c++.dg/property/at-property-12.mm index 8d28bde96684..89001e73b85a 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-12.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-12.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test atomic, assign synthesized methods. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-13.mm b/gcc/testsuite/obj-c++.dg/property/at-property-13.mm index 5a5dcbbf63ce..6786c3aa8579 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-13.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-13.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test retain and copy synthesized methods. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-2.mm b/gcc/testsuite/obj-c++.dg/property/at-property-2.mm index a97c33ea8745..7966b9a44d0f 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-2.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-2.mm @@ -8,6 +8,7 @@ } @property int name __attribute__((deprecated)); @property int table __attribute__((xxx)); /* { dg-warning ".xxx. attribute directive ignored" } */ -@property void function (void); /* { dg-error "can.t make .function. into a method" } */ -@property typedef int j; /* { dg-error "invalid type for property" } */ +/* FIXME: the test below should not ICE. +@property void function (void); { dg-error "can.t make .function. into a method" } */ +@property typedef int j; /* { dg-error "invalid type for property" } */ @end diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-6.mm b/gcc/testsuite/obj-c++.dg/property/at-property-6.mm index 8b7346b95af7..f2e2044cc3ba 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-6.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-6.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the property syntax with non-synthesized setter/getter and with standard names. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-7.mm b/gcc/testsuite/obj-c++.dg/property/at-property-7.mm index bace2420e57e..dc8e90fc3b97 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-7.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-7.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the property syntax with non-synthesized setter/getter and with a non-standard name for the getter. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-8.mm b/gcc/testsuite/obj-c++.dg/property/at-property-8.mm index a290dd3df35c..f40416567525 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-8.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-8.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the property syntax with non-synthesized setter/getter and with a non-standard name for the setter. */ diff --git a/gcc/testsuite/obj-c++.dg/property/at-property-9.mm b/gcc/testsuite/obj-c++.dg/property/at-property-9.mm index be52e37f5d06..4b2b64d3f042 100644 --- a/gcc/testsuite/obj-c++.dg/property/at-property-9.mm +++ b/gcc/testsuite/obj-c++.dg/property/at-property-9.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the property syntax with synthesized setter/getter and with a non-standard name for the getter and setter. */ diff --git a/gcc/testsuite/obj-c++.dg/property/dotsyntax-1.mm b/gcc/testsuite/obj-c++.dg/property/dotsyntax-1.mm index 8bc3b3a59575..8922f5f03404 100644 --- a/gcc/testsuite/obj-c++.dg/property/dotsyntax-1.mm +++ b/gcc/testsuite/obj-c++.dg/property/dotsyntax-1.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , November 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the 'dot syntax' without a declarated property. */ diff --git a/gcc/testsuite/obj-c++.dg/property/dotsyntax-2.mm b/gcc/testsuite/obj-c++.dg/property/dotsyntax-2.mm index ba615a318257..03e49aebc527 100644 --- a/gcc/testsuite/obj-c++.dg/property/dotsyntax-2.mm +++ b/gcc/testsuite/obj-c++.dg/property/dotsyntax-2.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , November 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the 'dot syntax' without a declarated property. This tests the case where only the setter (or only the getter) exists. */ diff --git a/gcc/testsuite/obj-c++.dg/property/dotsyntax-3.mm b/gcc/testsuite/obj-c++.dg/property/dotsyntax-3.mm index 5991962b921a..d3478062882c 100644 --- a/gcc/testsuite/obj-c++.dg/property/dotsyntax-3.mm +++ b/gcc/testsuite/obj-c++.dg/property/dotsyntax-3.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , November 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the 'dot syntax' without a declarated property. This tests the case where the object is a Class. */ diff --git a/gcc/testsuite/obj-c++.dg/property/fsf-property-basic.mm b/gcc/testsuite/obj-c++.dg/property/fsf-property-basic.mm index e7f8cbb7730e..2c3774a9324c 100644 --- a/gcc/testsuite/obj-c++.dg/property/fsf-property-basic.mm +++ b/gcc/testsuite/obj-c++.dg/property/fsf-property-basic.mm @@ -1,5 +1,6 @@ /* Basic test, auto-generated getter/setter based on property name. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #ifdef __cplusplus extern "C" { diff --git a/gcc/testsuite/obj-c++.dg/property/fsf-property-method-access.mm b/gcc/testsuite/obj-c++.dg/property/fsf-property-method-access.mm index 8053c84f9f77..11efb4af0ffb 100644 --- a/gcc/testsuite/obj-c++.dg/property/fsf-property-method-access.mm +++ b/gcc/testsuite/obj-c++.dg/property/fsf-property-method-access.mm @@ -1,5 +1,6 @@ /* test access in methods, auto-generated getter/setter based on property name. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #ifdef __cplusplus extern "C" { diff --git a/gcc/testsuite/obj-c++.dg/property/fsf-property-named-ivar.mm b/gcc/testsuite/obj-c++.dg/property/fsf-property-named-ivar.mm index 8538a1f5601a..d29f43106576 100644 --- a/gcc/testsuite/obj-c++.dg/property/fsf-property-named-ivar.mm +++ b/gcc/testsuite/obj-c++.dg/property/fsf-property-named-ivar.mm @@ -1,5 +1,6 @@ /* Basic test, auto-generated getter/setter based on named ivar */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #ifdef __cplusplus extern "C" { diff --git a/gcc/testsuite/obj-c++.dg/property/property-1.mm b/gcc/testsuite/obj-c++.dg/property/property-1.mm index b89d34bf2a42..4447946d1ab5 100644 --- a/gcc/testsuite/obj-c++.dg/property/property-1.mm +++ b/gcc/testsuite/obj-c++.dg/property/property-1.mm @@ -1,5 +1,6 @@ /* This program tests use of property provided setter/getter functions. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* { dg-additional-sources "../../objc-obj-c++-shared/Object1.mm" } */ #import "../../objc-obj-c++-shared/Object1.h" diff --git a/gcc/testsuite/obj-c++.dg/property/property-2.mm b/gcc/testsuite/obj-c++.dg/property/property-2.mm deleted file mode 100644 index 5d55b407cd63..000000000000 --- a/gcc/testsuite/obj-c++.dg/property/property-2.mm +++ /dev/null @@ -1,62 +0,0 @@ -/* { dg-do run { target *-*-darwin* } } */ -/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ -/* We can't do this yet on m64, since we have not got the NSConstantString implementation - built-in to the compiler, and therefore we get missing implementation warnings. */ -/* { dg-require-effective-target ilp32 } */ -/* Force ABI = 0 in the NeXT headers, also suppress deprecation warnings. */ -/* { dg-options "-framework Foundation -fobjc-exceptions -mmacosx-version-min=10.4 -Wno-deprecated-declarations" } */ - -#include -#include - -@interface Person : NSObject -@property NSString *firstName, *lastName; -@property(readonly) NSString *fullName; -@end - -@interface Group : NSObject -@property Person *techLead, *runtimeGuru, *propertiesMaven; -@end - -@implementation Group -@property Person *techLead, *runtimeGuru, *propertiesMaven; -- init { - techLead = [[Person alloc] init]; - runtimeGuru = [[Person alloc] init]; - propertiesMaven = [[Person alloc] init]; - return self; -} -@end - -@implementation Person -@property NSString *firstName, *lastName; -@property(readonly) NSString *fullName; -- (NSString*)fullName { // computed getter - return [NSString stringWithFormat:@"%@ %@", firstName, lastName]; -} -@end - -NSString *playWithProperties() -{ - Group *g = [[Group alloc] init] ; - - g.techLead.firstName = @"Blaine"; - g.techLead.lastName = @"Garst"; - g.runtimeGuru.firstName = @"Greg"; - g.runtimeGuru.lastName = @"Parker"; - g.propertiesMaven.firstName = @"Patrick"; - g.propertiesMaven.lastName = @"Beard"; - - return [NSString stringWithFormat:@"techlead %@ runtimeGuru %@ propertiesMaven %@", - g.techLead.fullName, g.runtimeGuru.fullName, g.propertiesMaven.fullName]; -} - -main() -{ - char buf [256]; - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - sprintf(buf, "%s", [playWithProperties() cString]); - [pool release]; - return strcmp (buf, "techlead Blaine Garst runtimeGuru Greg Parker propertiesMaven Patrick Beard"); -} - diff --git a/gcc/testsuite/obj-c++.dg/property/property-3.mm b/gcc/testsuite/obj-c++.dg/property/property-3.mm deleted file mode 100644 index 5a83263e8dc1..000000000000 --- a/gcc/testsuite/obj-c++.dg/property/property-3.mm +++ /dev/null @@ -1,75 +0,0 @@ -/* This program tests use of properties . */ -/* { dg-do run { target *-*-darwin* } } */ -/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ -/* We can't do this yet on m64, since we have not got the NSConstantString implementation - built-in to the compiler, and therefore we get missing implementation warnings. */ -/* { dg-require-effective-target ilp32 } */ -/* Force ABI = 0 in the NeXT headers, also suppress deprecation warnings. */ -/* { dg-options "-framework Foundation -fobjc-exceptions -mmacosx-version-min=10.4 -Wno-deprecated-declarations" } */ - -#include -#include - -@interface Person : NSObject -{ -} -@property NSString *firstName, *lastName; -@property(readonly) NSString *fullName; - -@end - -@interface Group : NSObject -{ -} - -@property Person *techLead, *runtimeGuru, *propertiesMaven; - -@end - -@implementation Group - -@property Person *techLead, *runtimeGuru, *propertiesMaven; -- init { - techLead = [[Person alloc] init]; - runtimeGuru = [[Person alloc] init]; - propertiesMaven = [[Person alloc] init]; - return self; -} - -@end - -@implementation Person - -@property NSString *firstName, *lastName; -@property(readonly, getter = fullName) NSString *fullName; - -- (NSString*)fullName { // computed getter - return [NSString stringWithFormat:@"%@ %@", firstName, lastName]; -} - -@end - -NSString *playWithProperties() -{ - Group *g = [[Group alloc] init] ; - - g.techLead.firstName = @"Blaine"; - g.techLead.lastName = @"Garst"; - g.runtimeGuru.firstName = @"Greg"; - g.runtimeGuru.lastName = @"Parker"; - g.propertiesMaven.firstName = @"Patrick"; - g.propertiesMaven.lastName = @"Beard"; - - return [NSString stringWithFormat:@"techlead %@ runtimeGuru %@ propertiesMaven %@", - g.techLead.fullName, g.runtimeGuru.fullName, g.propertiesMaven.fullName]; -} - -main() -{ - char buf [256]; - NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; - sprintf(buf, "%s", [playWithProperties() cString]); - [pool release]; - return strcmp (buf, "techlead Blaine Garst runtimeGuru Greg Parker propertiesMaven Patrick Beard"); -} - diff --git a/gcc/testsuite/obj-c++.dg/property/synthesize-2.mm b/gcc/testsuite/obj-c++.dg/property/synthesize-2.mm index dfa3fd576a56..b14fe264abe9 100644 --- a/gcc/testsuite/obj-c++.dg/property/synthesize-2.mm +++ b/gcc/testsuite/obj-c++.dg/property/synthesize-2.mm @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , October 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #include #include diff --git a/gcc/testsuite/obj-c++.dg/template-8.mm b/gcc/testsuite/obj-c++.dg/template-8.mm index eb01aa847101..97bdb7fb000d 100644 --- a/gcc/testsuite/obj-c++.dg/template-8.mm +++ b/gcc/testsuite/obj-c++.dg/template-8.mm @@ -3,18 +3,21 @@ /* Author: Fariborz Jahanian */ /* Adapted by Nicola Pero */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ #include #include @interface MyRootClass { Class isa; } ++ (id) initialize; + alloc; - init; - doSomething; @end @implementation MyRootClass ++ (id) initialize { return self; } + alloc { return class_createInstance (self, 0); } - init { return self; } - doSomething { return self; } diff --git a/gcc/testsuite/objc.dg/demangle-1.m b/gcc/testsuite/objc.dg/demangle-1.m index f790c56ca6af..42b79a9eb0a4 100644 --- a/gcc/testsuite/objc.dg/demangle-1.m +++ b/gcc/testsuite/objc.dg/demangle-1.m @@ -12,15 +12,14 @@ { Class isa; } ++ (id) initialize; + (int) testFunction1; + (int) test_function2; + (int) __testFunction3: (int)unused andArgument: (char)unused2; -#ifdef __NEXT_RUNTIME__ -+ (id) initialize ; -#endif @end @implementation DemangleTest ++ (id) initialize { return self; } + (int) testFunction1 { printf ("%s\n", __PRETTY_FUNCTION__); @@ -41,9 +40,6 @@ printf ("%s\n", __PRETTY_FUNCTION__); return strcmp (__PRETTY_FUNCTION__, "+[DemangleTest __testFunction3:andArgument:]"); } -#ifdef __NEXT_RUNTIME__ -+ (id) initialize { return self; } -#endif @end int main () diff --git a/gcc/testsuite/objc.dg/property/dotsyntax-3.m b/gcc/testsuite/objc.dg/property/dotsyntax-3.m index 5991962b921a..d3478062882c 100644 --- a/gcc/testsuite/objc.dg/property/dotsyntax-3.m +++ b/gcc/testsuite/objc.dg/property/dotsyntax-3.m @@ -1,5 +1,6 @@ /* Contributed by Nicola Pero , November 2010. */ /* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ /* Test the 'dot syntax' without a declarated property. This tests the case where the object is a Class. */ diff --git a/gcc/testsuite/objc.dg/torture/forward-1.m b/gcc/testsuite/objc.dg/torture/forward-1.m new file mode 100644 index 000000000000..086d69ef35e2 --- /dev/null +++ b/gcc/testsuite/objc.dg/torture/forward-1.m @@ -0,0 +1,83 @@ +/* { dg-do run } */ +/* See if -forward::/-performv:: is able to work. */ +/* { dg-skip-if "PR36610" { *-*-* } { "-fgnu-runtime" } { "" } } */ +/* { dg-skip-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ + +#include +#include + +#import "../../objc-obj-c++-shared/Object1.h" +#import "../../objc-obj-c++-shared/next-mapping.h" +#include + +#define VALUETOUSE 1234567890 + +id forwarder, receiver; + +@interface Forwarder: Object +{ + id receiver; +} + +-initWithReceiver:theReceiver; + +@end + +@interface Receiver:Object +{ + int foo; +} +-display; +-initWithFoo:(int)theFoo; +@end +@implementation Receiver + +-initWithFoo: (int)theFoo +{ + foo = theFoo; + return self; +} + +-display +{ + /* Check to see if we are really the reciever. */ + if (self != receiver) + abort (); + /* And the value of foo is set correctly. */ + if (foo != VALUETOUSE) + abort (); + return self; +} + +@end + +@implementation Forwarder +-initWithReceiver: theReceiver +{ + [super init]; + receiver = theReceiver; + return self; +} +#ifdef __NEXT_RUNTIME__ +- forward: (SEL)theSel: (marg_list)theArgFrame +#else +-(retval_t) forward: (SEL)theSel: (arglist_t)theArgFrame +#endif +{ + /* If we have a reciever try to perform on that object */ + if (receiver) + return [receiver performv: theSel: theArgFrame]; + return [self doesNotRecognize:theSel]; +} +@end +int main() +{ + /* Init the reciever. */ + receiver = [[Receiver alloc] initWithFoo: VALUETOUSE]; + /* Init the fowarder. */ + forwarder = [[Forwarder alloc] initWithReceiver: receiver]; + /* Call display on the forwarder which in turns calls display on + the reciever. */ + [forwarder display]; + exit(0); +}