【发布时间】:2015-04-10 20:31:00
【问题描述】:
我刚刚升级到 Swift 1.2,当我尝试使用 Release 方案编译 iOS 应用程序时,我收到“分段错误:11”。
0 swift 0x00000001105a9a08 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001105a9ee4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff9a724f1a _sigtramp + 26
3 libsystem_platform.dylib 0x00007fff4fd6f6b0 _sigtramp + 3043272624
4 swift 0x00000001100e837a (anonymous namespace)::DCE::markControllingTerminatorsLive(swift::SILBasicBlock*) + 346
5 swift 0x00000001100e8109 (anonymous namespace)::DCE::markValueLive(swift::ValueBase*) + 201
6 swift 0x00000001100e791f (anonymous namespace)::DCE::run() + 1983
7 swift 0x000000011008f55e swift::SILPassManager::runFunctionPasses(llvm::ArrayRef<swift::SILFunctionTransform*>) + 1310
8 swift 0x000000011008ffe9 swift::SILPassManager::runOneIteration() + 633
9 swift 0x000000011008ea56 swift::runSILOptimizationPasses(swift::SILModule&) + 790
10 swift 0x000000010fe92ee7 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4695
11 swift 0x000000010fe91ae6 main + 1814
12 libdyld.dylib 0x00007fff995665c9 start + 1
当我使用 Dev/Debug 方案时,应用程序可以完美编译和运行。
我已将编译器问题缩小到一个文件和几行代码。
let directPhoneType = PhoneNumber.Codes.Contacts["D"]
phoneTypes = phoneTypes.filter { $0 != directPhoneType }
我尝试过更改过滤代码(使用“元素输入”等),但每次尝试仍然会导致分段错误。在我们的整个应用程序中还有其他过滤逻辑可以很好地编译。
如果我删除过滤代码或将其更改为手动过滤电话类型的循环,则应用程序在发布方案中运行良好。
我尝试将优化级别设置为“最快,未选中”或“最快”,仍然出现分段错误。如果我将优化级别设置为“无”;项目构建。
此代码在 Swift 1.2 之前在两种方案中都运行良好。
有人知道这里发生了什么吗?
更新: 看起来 Xcode 6.3.1 已经修复了我的 seg 错误问题。
【问题讨论】:
-
您已将一个测试版替换为另一个测试版
-
我发现了这个,这对我有用。我不确定不启用检查会产生什么后果stackoverflow.com/questions/26508911/…
-
将优化级别设置为最快,未选中并不能解决我的问题。如果我将优化级别设置为无;项目构建。
-
1.编译器不应该崩溃。由于您显然有一个减少的测试用例,请file a bug 这样苹果可以解决这个问题。 2. 作为一种解决方法,尝试在
directPhoneType或$0上显式声明类型,也许? -
是的,我尝试了显式输入,但没有运气。我已经提交了一个错误,现在将使用“无”优化。谢谢。