EXC_BAD_ACCESS в простом коде в выпуске
Этот простой код, приведенный ниже, работает в режиме отладки, но не доступен в версии для iPhone 6.
XCode 6.2 (6C131e)
Вызов runTest вызывает EXC_BAD_ACCESS на последних 64-битных iPhone. И это происходит только тогда, когда для уровней оптимизации сборки установлено значение "Быстрее" и выше: -O2, -O3, -Os или -Ofast. Так обычно в конфигурации выпуска. Кстати, код работает хорошо, когда Уровни оптимизации устанавливают "Нет" или "Быстрый": -O0 или -O1.
#import <objc/NSObject.h>
@interface Foo : NSObject
@end
@interface Test : NSObject {
Foo *field;
}
@end
@implementation Foo
- (Foo *)bar {
return self;
}
@end
@implementation Test
- (void)runTest {
Foo *foo = [[Foo alloc] init];
field = foo;
field = nil;
[foo bar];
}
@end
Пожалуйста, объясните мне, почему это происходит.
1 ответ
Решение
Я отправил сообщение об ошибке в Apple Bug Reporter, но однажды Apple запросила некоторые подробности, а затем не ответила. Теперь сообщение о проблеме полностью исчезло.
Кстати, это похоже на работу с Clang, версия 7.3.