Сегмент компилятора Swift в handleDeferredImports - PullRequest
0 голосов
/ 16 декабря 2018

Мы начали видеть странную проблему, которая возникла несколько неожиданно, когда компилятор завершился ошибкой в ​​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»).

1 Ответ

0 голосов
/ 16 апреля 2019

Обходной путь для компилятора Swift 4 состоял в том, чтобы включить оптимизацию Whole Module для всех сборок.

Похоже, что сама проблема была исправлена ​​в Swift 5.0

Если кто-нибудь увидит эту проблему в будущемпожалуйста, обратитесь к https://bugs.swift.org/browse/SR-9528

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...