diff options
| author | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-29 02:16:45 +0000 |
|---|---|---|
| committer | pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-29 02:16:45 +0000 |
| commit | 4d08644ea7c637356dd47d7b92e5f696481ae657 (patch) | |
| tree | c1f9dd32b22768f364547977033c7f379a55de4c | |
| parent | aac8b2bcc0bd5f00827152c60399681680afb8bd (diff) | |
| download | ppe42-gcc-4d08644ea7c637356dd47d7b92e5f696481ae657.tar.gz ppe42-gcc-4d08644ea7c637356dd47d7b92e5f696481ae657.zip | |
2008-12-28 Andrew Pinski <pinskia@gmail.com>
PR libobjc/36610
* objc/execute/forward-1.m: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142945 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/objc/execute/forward-1.m | 85 |
2 files changed, 90 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7f5c20cda6f..42cc3da1a8b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-12-28 Andrew Pinski <pinskia@gmail.com> + + PR libobjc/36610 + * objc/execute/forward-1.m: New test. + 2008-12-27 Jakub Jelinek <jakub@redhat.com> PR middle-end/38633 diff --git a/gcc/testsuite/objc/execute/forward-1.m b/gcc/testsuite/objc/execute/forward-1.m new file mode 100644 index 00000000000..9306dea7b27 --- /dev/null +++ b/gcc/testsuite/objc/execute/forward-1.m @@ -0,0 +1,85 @@ +/* See if -forward::/-performv:: is able to work. */ + +#include <stdio.h> +#include <stdlib.h> +#include <objc/Object.h> +#include <objc/objc-api.h> + +#define VALUETOUSE 1234567890 + +#ifdef __NEXT_RUNTIME__ +/* Does not run with the next runtime. */ +int main(void) +{ + return 0; +} + +#else + +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; +} +-(retval_t) forward: (SEL)theSel: (arglist_t)theArgFrame +{ + /* 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); +} + +#endif |

