From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/objc.dg/special/load-category-2.m | 105 ++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 gcc/testsuite/objc.dg/special/load-category-2.m (limited to 'gcc/testsuite/objc.dg/special/load-category-2.m') diff --git a/gcc/testsuite/objc.dg/special/load-category-2.m b/gcc/testsuite/objc.dg/special/load-category-2.m new file mode 100644 index 000000000..7dc745952 --- /dev/null +++ b/gcc/testsuite/objc.dg/special/load-category-2.m @@ -0,0 +1,105 @@ +/* Contributed by Nicola Pero , December 2010. */ +/* { dg-do run } */ +/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */ + +#include +#include +#include + +#include "load-category-2.h" + +/* This test tests that +load is called in the correct order for + classes and categories. +load needs to be called in superclasses + before subclasses, and in the main class before categories. */ + +/* Compile the classes in random order to prevent the runtime from + sending +load in the correct order just because the classes happen + to have been compiled in that order. */ +@implementation TestClass2 ++ load +{ + printf ("[TestClass2 +load]\n"); + /* Check superclasses/subclasses +load order. */ + check_that_load_step_was_completed (0); + check_that_load_step_was_not_completed (1); + check_that_load_step_was_not_completed (2); + + /* Check that the corresponding category's +load was not done. */ + check_that_load_step_was_not_completed (4); + + complete_load_step (1); +} +@end + +@implementation TestClass3 ++ load +{ + printf ("[TestClass3 +load]\n"); + + /* Check superclasses/subclasses +load order. */ + check_that_load_step_was_completed (0); + check_that_load_step_was_completed (1); + check_that_load_step_was_not_completed (2); + + /* Check that the corresponding category's +load was not done. */ + check_that_load_step_was_not_completed (5); + + complete_load_step (2); +} +@end + +@implementation TestClass1 ++ initialize { return self; } ++ load +{ + printf ("[TestClass1 +load]\n"); + + /* Check superclasses/subclasses +load order. */ + check_that_load_step_was_not_completed (0); + check_that_load_step_was_not_completed (1); + check_that_load_step_was_not_completed (2); + + /* Check that the corresponding category's +load was not done. */ + check_that_load_step_was_not_completed (3); + + complete_load_step (0); +} +@end + + +static BOOL load_step_completed[6] = { NO, NO, NO, NO, NO, NO }; + +void complete_load_step (int load_step) +{ + load_step_completed[load_step] = YES; +} + +void check_that_load_step_was_completed (int load_step) +{ + if (load_step_completed[load_step] == NO) + { + printf ("Load step %d was not completed but should have been\n", load_step); + abort (); + } +} + +void check_that_load_step_was_not_completed (int load_step) +{ + if (load_step_completed[load_step] == YES) + { + printf ("Load step %d was completed but shouldn't have been\n", load_step); + abort (); + } +} + +int main (void) +{ + check_that_load_step_was_completed (0); + check_that_load_step_was_completed (1); + check_that_load_step_was_completed (2); + check_that_load_step_was_completed (3); + check_that_load_step_was_completed (4); + check_that_load_step_was_completed (5); + + return 0; +} -- cgit v1.2.3