Я недавно переключился на компилятор LLVM 3.0 из LLVM GCC 4.2 при компиляции приложений для iOS. Кажется, все работает одинаково, за исключением некоторых моих заявлений о переключении. Похоже, что-то не так, когда методы Obj-C напрямую используются внутри условия переключения.
Я создал файл main.m ниже, чтобы воспроизвести это. Он печатает property: 846
, тогда как он должен четко печатать property: 2
. Что-то не так с моим использованием switch или это может быть ошибка в компиляторе?
#import <Foundation/Foundation.h>
@interface STSomeClass : NSObject
@end
@implementation STSomeClass
- (int)mytype{
return 2;
}
- (int)someProperty{
switch ([self mytype]) {
case 1:
case 2:
case 3:
case 6:
case 8:
case 9:
return 2;
case 4:
case 7:
return 1;
default:
return 0;
}
}
- (void)printSomeProperty{
printf("property: %d\n", [self someProperty]);
}
@end
int main(int argc, char *argv[])
{
STSomeClass* someObject;
someObject = [[STSomeClass alloc] init];
[someObject printSomeProperty];
[someObject release];
}
UPDATE
Чтобы было понятно, как я компилирую код:
- Я использую Xcode 4.2 и iOS SDK 5.0 на Mac OS X 10.6.8
- Использование LLVM 3.0
- Компиляция кода с -Os (также пробовал -O1)
- Сборка для arvm7 и тестирование на iPad с iOS 4.2.1 (также пробовал iPhone 4 с iOS 5.0)