2010-07-27 Paolo Carlini <paolo.carlini@oracle.com>
[official-gcc/alias-decl.git] / gcc / testsuite / objc.dg / fix-and-continue-1.m
blob1560beac463652d23efa8fd2375fa90668cb6eb3
1 /* Fix and continue should not interfere with computation of
2    local (static) function addresses.  */
3 /* Author: Ziemowit Laski <zlaski@apple.com> */
4    
5 /* { dg-do run  { target *-*-darwin* } } */
6 /* { dg-options "-mfix-and-continue" } */
7 /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
9 #include "../objc-obj-c++-shared/Object1.h"
10 #include <stdlib.h>
12 @class MyTarget, MySet;
14 int global_value = 0;
16 @interface MyTargetBuildContext : Object
18   MyTarget * _target;
19   unsigned _cacheInvalDisableCount;
20   BOOL _cacheInvalidationNeeded;
21   unsigned short _isCreatingDependencies:1;
22   unsigned short _isCreatingHeadermap:1;
23   unsigned short _haveAddedIdleTimeInvoc:1;
24   BOOL _hasSetUpBuildSettings;
26 - (id)initWithTarget:(MyTarget *)target;
27 - (MyTarget *)target;
28 @end
30 @interface MyTargetBuildContext (PrivateMethods)
31 + (MySet *)_headerFileExtensions;
32 @end
34 @interface MyCountedSet: Object {
35 @public
36   int cardinality;
38 - (id)init;
39 - (id)sortedArrayUsingFunction:(int (*)(id, id, void *))comparator with:(int)value;
40 @end
42 @implementation MyCountedSet
43 - (id)init {
44   cardinality = 5;
45   global_value = 17;
46   return self;
48 - (id)sortedArrayUsingFunction:(int (*)(id, id, void *))comparator with:(int)value {
49   if(value == comparator(self, self, self))
50     return self;
51   return nil;
52 }  
53 @end
55 @implementation MyTargetBuildContext : Object
56 - (id)initWithTarget:(MyTarget *)target
58   self = [super init];
59   return self;
61 - (MyTarget *)target
63   return _target;
66 static int _MyCompareObjectsByDecreasingSetCount (id object1, id object2, MyCountedSet * countedSet)
68   global_value = 5;
69   return countedSet->cardinality;
71 + (MySet *)_headerFileExtensions
73   MySet * _headerFileExtensions = 0;
74   return _headerFileExtensions;
76 - (void)_recomputeHeadermap
78   MyCountedSet *set = [MyCountedSet new];
79   int (*functionPointer)(id, id, void *) = (int (*)(id, id, void *))_MyCompareObjectsByDecreasingSetCount;
80   id result = [set sortedArrayUsingFunction:functionPointer with:5];
82 @end
84 int main(void) {
85   MyTargetBuildContext *ctx = [MyTargetBuildContext new];
86   [ctx _recomputeHeadermap];
87   if (global_value != 5)
88     abort();
90   return 0;
93 #include "../objc-obj-c++-shared/Object1-implementation.h"