Неожиданное поведение с операторами switch в LLVM 3.0 - PullRequest
1 голос
/ 29 февраля 2012

Я недавно переключился на компилятор 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)

1 Ответ

2 голосов
/ 29 февраля 2012

Я попробовал этот код двумя способами: Xcode 4.4, llvm 4.0, ARC и Xcode 4.3, llvm 3,1 no-ARC как с OS X 10.7.3, так и с целевой iOS 4.3 и iOS 5.0. симулятор и получил "свойство: 2" оба раза.

Итак, в вашем случае происходит что-то еще. Какую именно конфигурацию вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...