Swift在handleDeferredImports中的segfaulting

时间:2018-12-16 12:26:04

标签: ios swift clang

我们已经开始看到一个奇怪的问题,在handleDeferredImports中,编译器出现段错误。这并非总是会发生,有时我需要清理并重建2-3次才能再次触发它,因此很难确定其根本原因。

我也无法在一个单独的示例项目中复制它,但是在寻找解决方案两天后,我将一片空白。

这是段错误:error: Segmentation fault: 11,具有以下堆栈:

0  swift                    0x000000011307064a PrintStackTraceSignalHandler(void*) + 42
1  swift                    0x000000011306fdfe SignalHandler(int) + 302
2  libsystem_platform.dylib 0x00007fff76391b3d _sigtramp + 29
3  libsystem_platform.dylib 000000000000000000 _sigtramp + 2311513312
4  swift                    0x0000000110605df0 swift::ClangImporter::Implementation::handleDeferredImports() + 512
5  swift                    0x00000001106058dc swift::ClangImporter::Implementation::importHeader(swift::ModuleDecl*, llvm::StringRef, swift::SourceLoc, bool, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer> >, bool) + 1804
6  swift                    0x0000000110606754 swift::ClangImporter::importBridgingHeader(llvm::StringRef, swift::ModuleDecl*, swift::SourceLoc, bool, bool) + 932
7  swift                    0x000000011010acfd swift::CompilerInstance::performSema() + 2029
8  swift                    0x000000010f2f859b performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) + 731
9  swift                    0x000000010f2f4dc5 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 7717
10 swift                    0x000000010f29aa35 main + 1349
11 libdyld.dylib            0x00007fff761a808d start + 1
12 libdyld.dylib            0x0000000000000123 start + 2313519255

没有指示单个文件或标头。

我们确实混合使用了Objective-C和Swift,将ProjectModuleName-Swift.h导入到许多文件中,类似的,它们具有非常大的ProjectModuleName-Bridging-Header.h文件。除此之外,由于遗留原因,默认的Objective-C包含ProjectModuleName-Prefix.pch(是的,我知道这很糟糕)。

这里奇怪的是handleDeferredImports中的segfault与在Stack Overflow上发现的所有其他Swift编译器segfault问题不同。

Swift版本是4.2,我们在Xcode 10中使用了“ New Build System”(在“ Legacy Build System”上也存在段错误)。

1 个答案:

答案 0 :(得分:0)

Swift 4编译器的解决方法是为所有构建启用Whole Module优化。

问题本身似乎在Swift 5.0中已解决

将来任何人都可以看到此问题,请参阅https://bugs.swift.org/browse/SR-9528