Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SR-14061] Slowdown until eventual abort trap 6 + segfault when compiling with headers containing C structs with large arrays #56450

Open
swift-ci opened this issue Jan 17, 2021 · 6 comments
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself

Comments

@swift-ci
Copy link
Collaborator

Previous ID SR-14061
Radar rdar://problem/73358514
Original Reporter featherless (JIRA User)
Type Bug

Attachment: Download

Environment

Xcode: Version 12.3 (12C33)
Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug
Assignee None
Priority Medium

md5: c1f1b83cd9f3025eea068ecf2b4d7985

relates to:

  • SR-11763 C array larger than 4096 failed to import in Swift with Xcode 11.2

Issue Description:

Repro project:
https://github.com/jverkoey/swift_compiler_bug_large_c_struct_arrays

Reproduces every time.

When a struct containing an array of values is present in a C header file that's imported via bridging header and that struct is referenced from a Swift source file, the Swift compiler takes progressively longer to complete (on the order of dozens of seconds) until it eventually segfaults. At particularly large array sizes it eventually just abort trap 6's.

typedef struct {
  int image[262145 * 100];
} cause_abort_trap_6;

Stack trace:

    _
Stored value type does not match pointer operand type!
  store i3200 0, i3200\* %9, align 4, ![dbg ](dbg )80
 i3200in function $s14DemoSlowImport9SomeClassC12someFunctionyyF
<unknown>:0: error: fatal error encountered during compilation; please file a bug report with your project and the crash log
<unknown>:0: note: Broken function found, compilation aborted!
Stack dump:
0.	Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/featherless/workbench/DemoSlowImport/demo_slow.swift -emit-module-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow~partial.swiftmodule -emit-module-doc-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow~partial.swiftdoc -emit-module-source-info-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow~partial.swiftsourceinfo -serialize-diagnostics-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow.dia -emit-dependencies-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow.d -emit-reference-dependencies-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow.swiftdeps -target x86_64-apple-macos11.1 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -I /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Products/Debug -F /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Products/Debug -enable-testing -g -module-cache-path /Users/featherless/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -swift-version 5 -enforce-exclusivity=checked -Onone -serialize-debugging-options -Xcc -working-directory -Xcc /Users/featherless/workbench/DemoSlowImport -enable-anonymous-context-mangled-names -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DemoSlowImport-generated-files.hmap -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DemoSlowImport-own-target-headers.hmap -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DemoSlowImport-all-target-headers.hmap -Xcc -iquote -Xcc /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DemoSlowImport-project-headers.hmap -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Products/Debug/include -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DerivedSources-normal/x86_64 -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DerivedSources/x86_64 -Xcc -I/Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/DerivedSources -Xcc -DDEBUG=1 -target-sdk-version 11.1 -import-objc-header /Users/featherless/workbench/DemoSlowImport/DemoSlowImport-Bridging-Header.h -pch-output-dir /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/PrecompiledHeaders -pch-disable-validation -parse-as-library -module-name DemoSlowImport -o /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Build/Intermediates.noindex/DemoSlowImport.build/Debug/DemoSlowImport.build/Objects-normal/x86_64/demo_slow.o -index-store-path /Users/featherless/Library/Developer/Xcode/DerivedData/DemoSlowImport-cpdpnfvhtxdnadfhhvmmulkaylyw/Index/DataStore -index-system-modules 
1.	Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
2.	Running pass 'Module Verifier' on function '@"$s14DemoSlowImport9SomeClassC12someFunctionyyF"'
0  swift                    0x000000010bbfd615 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  swift                    0x000000010bbfc615 llvm::sys::RunSignalHandlers() + 85
2  swift                    0x000000010bbfdbcf SignalHandler(int) + 111
3  libsystem_platform.dylib 0x00007fff20391d7d _sigtramp + 29
4  libsystem_platform.dylib 000000000000000000 _sigtramp + 18446603339975549600
5  libsystem_c.dylib        0x00007fff202a0720 abort + 120
6  swift                    0x0000000107761aaf swift::performFrontend(llvm::ArrayRef<char const\*>, char const\*, void\*, swift::FrontendObserver\*)::$_1::__invoke(void\*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) + 1151
7  swift                    0x000000010bb7ca1a llvm::report_fatal_error(llvm::Twine const&, bool) + 234
8  swift                    0x000000010bb7c922 llvm::report_fatal_error(char const\*, bool) + 50
9  swift                    0x000000010bb29bcf (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) + 111
10 swift                    0x000000010bac9abd llvm::FPPassManager::runOnFunction(llvm::Function&) + 925
11 swift                    0x000000010bac92e8 llvm::legacy::FunctionPassManagerImpl::run(llvm::Function&) + 104
12 swift                    0x000000010bac915b llvm::legacy::FunctionPassManager::run(llvm::Function&) + 91
13 swift                    0x0000000107b20f51 swift::performLLVM(swift::IRGenOptions const&, swift::DiagnosticEngine&, llvm::sys::SmartMutex<false>**, llvm::GlobalVariable**, llvm::Module\*, llvm::TargetMachine\*, swift::version::Version const&, llvm::StringRef, swift::UnifiedStatsReporter\*) + 5089
14 swift                    0x0000000107771540 performCompileStepsPostSILGen(swift::CompilerInstance&, swift::CompilerInvocation const&, std::__1::unique_ptr<swift::SILModule, std::__1::default_delete<swift::SILModule> >, llvm::PointerUnion<swift::ModuleDecl\*, swift::SourceFile\*>, swift::PrimarySpecificPaths const&, int&, swift::FrontendObserver\*) + 3904
15 swift                    0x0000000107760d97 swift::performFrontend(llvm::ArrayRef<char const\*>, char const\*, void\*, swift::FrontendObserver\*) + 20695
16 swift                    0x00000001076e1c27 main + 1255
17 libdyld.dylib            0x00007fff20368621 start + 1
18 libdyld.dylib            0x000000000000004f start + 18446603339975719471
error: Abort trap: 6 (in target 'DemoSlowImport' from project 'DemoSlowImport')
@swift-ci
Copy link
Collaborator Author

Comment by Jeff Verkoeyen (JIRA)

I've also attached a screenshot showing an Instruments timing analysis of the swift build process in case it's helpful.

@swift-ci
Copy link
Collaborator Author

Comment by Jeff Verkoeyen (JIRA)

Is it possible the slowdown + eventual segfault is to do with the generation of the tuple representation of the C array?

@swift-ci
Copy link
Collaborator Author

Comment by Jeff Verkoeyen (JIRA)

Looks like this may be related to https://bugs.swift.org/browse/SR-11763

@typesanitizer
Copy link

We shouldn't be crashing, so this is certainly a bug. That said, based on the comments in SR-11763, we can't allow direct access, you will need to write a few helper functions in C to manipulate the array.

@swift-ci create

@swift-ci
Copy link
Collaborator Author

Comment by Jeff Verkoeyen (JIRA)

Thank you! As you suggested, I worked around this by not allowing this particular header to be imported via my project's bridging header, and instead providing a wrapper API that is imported via the bridging header.

@swift-ci
Copy link
Collaborator Author

Comment by Cuscus (JIRA)

Might also be related to SR-13823, Swift doesn't like large fixed size C arrays.

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself
Projects
None yet
Development

No branches or pull requests

2 participants