Мы начали видеть странную проблему, которая возникла несколько неожиданно, когда компилятор завершился ошибкой в 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
(да, я знаю, что это ужасно).
Что странно, это segfault в handleDeferredImports
, который отличается от всехдругие проблемы с ошибками компилятора Swift, обнаруженные при переполнении стека.
Версия Swift - 4.2, и мы используем «Новую систему сборки» в Xcode 10 (она также вызывает ошибки в «Legacy Build System»).