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.

Другие вопросы по тегам