Swift 1.2发布scheme编译时的分段错误

我刚刚升级到Swift 1.2,当我尝试使用Releasescheme编译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 

当我使用开发/debuggingscheme时,应用程序编译和运行完美。

我已经将编译器问题缩小到单个文件和几行代码。

 let directPhoneType = PhoneNumber.Codes.Contacts["D"] phoneTypes = phoneTypes.filter { $0 != directPhoneType } 

我试着改变过滤代码(使用“元素”等),但每个尝试仍然导致分段错误。 在我们的应用程序中还有其他的过滤逻辑很好的编译。

如果我删除过滤代码或将其更改为手动过滤电话types的循环,则应用程序将在发布scheme中正常运行。

我已经尝试将优化级别设置为“最快,未检查”或“最快”,分段错误仍然存​​在。 如果我将优化级别设置为“无”; 该项目build立。

这两个代码在Swift 1.2之前工作得很好。

任何人都有任何洞察到这里发生了什么?

更新:它看起来像Xcode 6.3.1已经修复了我的seg故障问题。

跑到同样的问题,没有代码类似于你的。 closures整个模块优化 (默认closures)解决了我的问题,这意味着我仍然能够以最快的优化设置存档。

不幸的是,我们一直都有这样的问题。 这个错误不在你身边,他们很难追查。 通常有些随意的代码更改最终会解决问题

我们制定的各种迷信包括:尽可能减lessunowned使用,尽可能减less使用weak ,小心谨慎。 运算符,谨慎在一行中“太多”的东西(如max(min(x,y),z) ),切换到var等。

在你的代码中,我可能会尝试将你的let切换到var ,或者尝试删除filter并做一个老派

 var resultList = [MyType]() for type in phoneTypes { if type != directPhoneType { resultList.append(type) } } 

或更改PhoneNumber.Codes.Contacts["D"]以不同的方式进行访问。

祝你好运! 快乐狩猎。

当切换到Swift 1.2时,我遇到了这个问题,而不仅仅是发布scheme。 在迁移时,我改变了一个推荐的“as!” 为“as?” 以为这是我想要的。 这似乎导致了这个问题; 我回去了,变成了“as!” 它的工作。