Проблема с отключением оптимизации LLVM через прагму

У меня есть кусок кода, который дает сбой, если я не строю с отключенной оптимизацией. Я строю с помощью компилятора LLVM 2.0.

Я хотел бы отключить оптимизацию, обернув неправильный код директивой компилятора #pragma; или отключить оптимизацию для всего файла.

Я копался в руководстве и коде clang; а у меня ничего не вылетает.

Кто-нибудь знает, как изменить оптимизацию для одного CU (а не для всего приложения)?


person Dave    schedule 11.04.2011    source источник
comment
Я знаю, что это не исправит ситуацию, но вы должны отправить по электронной почте команде LLVM образец кода, который дает сбой при оптимизации. Это определенно ошибка в LLVM.   -  person yan    schedule 11.04.2011
comment
Происходит ли сбой на устройствах ARMv6? Если это так, это, вероятно, связано с этой известной ошибкой в ​​LLVM 2.0 в Xcode 4: to-crash-on-startup" title="сборка с помощью llvm и любая оптимизация приводят к сбою приложения при запуске">stackoverflow.com/questions/5490432/   -  person Brad Larson    schedule 11.04.2011
comment
Это может быть все. Приложение запускается, но первый вызов ASI-HTTP-REQUEST повреждает стек, как описано. Для нас проблема возникает ТОЛЬКО на iPodTouch 2G под управлением iOS 4.2.1. Я не совсем был готов винить инструменты; но у меня возникли проблемы с оттачиванием кода нарушения.   -  person Dave    schedule 12.04.2011


Ответы (1)


Вы можете установить флаги компилятора для каждого файла в Xcode. В Xcode 4 (который, я предполагаю, вы используете из-за ссылки на LLVM 2.0), сначала выберите проект в левом браузере проектов. Перейдите на вкладку Build Phases и разверните фазу сборки Compile Sources.

Там вы можете установить флаги компилятора для каждого файла, поэтому вы можете попробовать перейти к проблемному файлу и ввести -O0 в качестве флага, чтобы попытаться отключить оптимизацию только для этого файла.

У GCC есть некоторые атрибуты, которые вы можете установить для этого, как указал Йоханнес в его ответ здесь, но он может быть не в LLVM. Кроме того, из комментариев там видно, что их нет даже в пользовательском GCC Apple, используемом для создания приложений iOS.

person Brad Larson    schedule 11.04.2011
comment
Спасибо, Брэд, это помогает! Я не заметил столбец флагов компилятора, очень подлый. PS: мне понравились ваши курсы. - person Dave; 12.04.2011
comment
@Dave - Да, мне потребовалось некоторое время, чтобы найти их после перехода с Xcode 3, потому что эта версия обрабатывала это через инспектор для каждого файла .m. Приятно слышать, что тебе не надоели мои часы бессвязной болтовни на занятиях. - person Brad Larson; 12.04.2011
comment
Спасибо! Это также работает с компилятором LLVM 3.1 в Xcode 4.3.1 (для iOS 5.1). - person Leehro; 10.03.2012
comment
Это действительно работает для области уровня файла, но есть ли способ отключить оптимизацию только для определенных функций в XCode 5 с использованием LLVM? - person RealCasually; 09.10.2013