📄 fix-and-continue-1.m
字号:
/* Fix and continue should not interfere with computation of local (static) function addresses. *//* Author: Ziemowit Laski <zlaski@apple.com> */ /* { dg-do run { target *-*-darwin* } } *//* { dg-options "-mfix-and-continue" } */#include <objc/Object.h>#include <stdlib.h>@class MyTarget, MySet;int global_value = 0;@interface MyTargetBuildContext : Object{ MyTarget * _target; unsigned _cacheInvalDisableCount; BOOL _cacheInvalidationNeeded; unsigned short _isCreatingDependencies:1; unsigned short _isCreatingHeadermap:1; unsigned short _haveAddedIdleTimeInvoc:1; BOOL _hasSetUpBuildSettings;}- (id)initWithTarget:(MyTarget *)target;- (MyTarget *)target;@end@interface MyTargetBuildContext (PrivateMethods)+ (MySet *)_headerFileExtensions;@end@interface MyCountedSet: Object {@public int cardinality;}- (id)init;- (id)sortedArrayUsingFunction:(int (*)(id, id, void *))comparator with:(int)value;@end@implementation MyCountedSet- (id)init { cardinality = 5; global_value = 17; return self;}- (id)sortedArrayUsingFunction:(int (*)(id, id, void *))comparator with:(int)value { if(value == comparator(self, self, self)) return self; return nil;} @end@implementation MyTargetBuildContext : Object- (id)initWithTarget:(MyTarget *)target{ self = [super init]; return self;}- (MyTarget *)target{ return _target;}static int _MyCompareObjectsByDecreasingSetCount (id object1, id object2, MyCountedSet * countedSet){ global_value = 5; return countedSet->cardinality;}+ (MySet *)_headerFileExtensions{ MySet * _headerFileExtensions = 0; return _headerFileExtensions;}- (void)_recomputeHeadermap{ MyCountedSet *set = [MyCountedSet new]; int (*functionPointer)(id, id, void *) = (int (*)(id, id, void *))_MyCompareObjectsByDecreasingSetCount; id result = [set sortedArrayUsingFunction:functionPointer with:5];}@endint main(void) { MyTargetBuildContext *ctx = [MyTargetBuildContext new]; [ctx _recomputeHeadermap]; if (global_value != 5) abort(); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -