LLVM 3.0上的switch语句出现意外行为

时间:2012-02-29 11:45:53

标签: objective-c ios llvm

我最近在编译iOS应用程序时从LLVM GCC 4.2切换到LLVM 3.0编译器。除了我的一些switch语句之外,一切看起来都是一样的。在切换条件下直接使用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];
}

更新

要清楚我是如何编译代码的:

  • 我在Mac OS X 10.6.8上使用Xcode 4.2和iOS SDK 5.0
  • 使用LLVM 3.0
  • 使用-Os编译代码(也尝试了-O1)
  • 使用iOS 4.2.1构建arvm7并在iPad上进行测试(也尝试使用iOS 5.0的iPhone 4)

1 个答案:

答案 0 :(得分:2)

我尝试了两种方式的代码: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&#34;两次。

所以,你的案子还有其他事情发生。您使用的是哪种确切配置?

相关问题