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-13982] 40037 illegal hardware instruction with protocol associatedtype constraints #56377

Closed
swift-ci opened this issue Dec 22, 2020 · 2 comments
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself type checker Area → compiler: Semantic analysis

Comments

@swift-ci
Copy link
Collaborator

Previous ID SR-13982
Radar rdar://problem/72593295
Original Reporter pryomoax (JIRA User)
Type Bug
Status Resolved
Resolution Done
Environment
  • Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)

  • macOS 10.15.7

Command Line:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -interpret test.swift -enable-objc-interop -stack-check -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk -color-diagnostics -target-sdk-version 11.1 -module-name test

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

md5: 524ca1e66c15cb03bcab273a74cf5dc8

Issue Description:

In some experimentation I happened upon a case that results in a:

"40037 illegal hardware instruction"

The follow code snippet reproduces the issue on the command line version of Swift 5.3.2

protocol ProtoDelegate where Self.Manager.Delegate: Self {
    associatedtype Manager: ProtoManager

    func bind(to: Manager)
}

protocol ProtoManager where Self.Delegate.Manager: Self {
    associatedtype Delegate: ProtoDelegate

    var name: String { get }
}

There is no stack trace provided in the output, only the 40037 error.

Related

I'm able to also produce a segmentation fault with a slight change:

"41147 segmentation fault"

protocol ProtoDelegate where Self.Manager.Delegate: Self {
    associatedtype Manager: ProtoManager

    func bind(to: Manager)
}

protocol ProtoManager where Self.Delegate.Manager: Self {
    // This is now a `typealias`, causes a seg fault
    typealias Delegate = ProtoDelegate

    var name: String { get }
}

There is stack trace for the segmentation fault, which might help diagnose one or both issues:

1.      Apple Swift version 5.3.2 (swiftlang-1200.0.45 clang-1200.0.32.28)
2.      While evaluating request TypeCheckSourceFileRequest(source_file "test.swift")
3.      While type-checking 'ProtoDelegate' (at test.swift:2:1)
4.      While type-checking 'bind(to:)' (at test.swift:5:5)
5.      While evaluating request CheckRedeclarationRequest(test.(file).ProtoDelegate.bind(to:)@test.swift:5:10)
6.      While evaluating request RequirementSignatureRequest(test.(file).ProtoDelegate@test.swift:2:10)
7.      While evaluating request RequirementSignatureRequest(test.(file).ProtoManager@test.swift:8:10)

0  swift                    0x000000010d406615 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  swift                    0x000000010d405615 llvm::sys::RunSignalHandlers() + 85
2  swift                    0x000000010d406bcf SignalHandler(int) + 111
3  libsystem_platform.dylib 0x00007fff709935fd _sigtramp + 29
4  libsystem_platform.dylib 0x00007f96ad868ce8 _sigtramp + 18446743623760172808
5  swift                    0x000000010a228032 swift::GenericSignatureBuilder::maybeResolveEquivalenceClass(swift::Type, swift::ArchetypeResolutionKind, bool) + 530
6  swift                    0x000000010a243aa1 llvm::Optional<swift::Type> llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>::callback_fn<resolveDependentMemberTypes(swift::GenericSignatureBuilder&, swift::Type, swift::ArchetypeResolutionKind)::$_72>(long, swift::TypeBase*) + 209
7  swift                    0x000000010a2bfeb9 swift::Type::transformRec(llvm::function_ref<llvm::Optional<swift::Type> (swift::TypeBase*)>) const + 57
8  swift                    0x000000010a22cac4 swift::GenericSignatureBuilder::addTypeRequirement(llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::GenericSignatureBuilder::UnresolvedHandlingKind, swift::ModuleDecl*) + 884
9  swift                    0x000000010a21f239 swift::GenericSignatureBuilder::addRequirement(swift::Requirement const&, swift::RequirementRepr const*, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::SubstitutionMap const*, swift::ModuleDecl*) + 1289
10 swift                    0x000000010a247204 bool llvm::function_ref<bool (swift::Requirement, swift::RequirementRepr*)>::callback_fn<swift::GenericSignatureBuilder::expandConformanceRequirement(swift::GenericSignatureBuilder::ResolvedType, swift::ProtocolDecl*, swift::GenericSignatureBuilder::RequirementSource const*, bool)::$_20>(long, swift::Requirement, swift::RequirementRepr*) + 148
11 swift                    0x000000010a2cdef3 swift::WhereClauseOwner::visitRequirements(swift::TypeResolutionStage, llvm::function_ref<bool (swift::Requirement, swift::RequirementRepr*)>) const && + 291
12 swift                    0x000000010a2293bb swift::GenericSignatureBuilder::expandConformanceRequirement(swift::GenericSignatureBuilder::ResolvedType, swift::ProtocolDecl*, swift::GenericSignatureBuilder::RequirementSource const*, bool) + 651
13 swift                    0x000000010a22ce49 swift::GenericSignatureBuilder::addTypeRequirement(llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::GenericSignatureBuilder::UnresolvedHandlingKind, swift::ModuleDecl*) + 1785
14 swift                    0x000000010a21f239 swift::GenericSignatureBuilder::addRequirement(swift::Requirement const&, swift::RequirementRepr const*, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::SubstitutionMap const*, swift::ModuleDecl*) + 1289
15 swift                    0x0000000109e28180 swift::RequirementSignatureRequest::evaluate(swift::Evaluator&, swift::ProtocolDecl*) const + 1008
16 swift                    0x000000010a19d43a swift::RequirementSignatureRequest::OutputType swift::evaluateOrDefault<swift::RequirementSignatureRequest>(swift::Evaluator&, swift::RequirementSignatureRequest, swift::RequirementSignatureRequest::OutputType) + 1242
17 swift                    0x000000010a2294a7 swift::GenericSignatureBuilder::expandConformanceRequirement(swift::GenericSignatureBuilder::ResolvedType, swift::ProtocolDecl*, swift::GenericSignatureBuilder::RequirementSource const*, bool) + 887
18 swift                    0x000000010a22ce49 swift::GenericSignatureBuilder::addTypeRequirement(llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::GenericSignatureBuilder::UnresolvedHandlingKind, swift::ModuleDecl*) + 1785
19 swift                    0x000000010a24a752 swift::GenericSignatureBuilder::ConstraintResult llvm::function_ref<swift::GenericSignatureBuilder::ConstraintResult (swift::Type, swift::TypeRepr const*)>::callback_fn<swift::GenericSignatureBuilder::addInheritedRequirements(swift::TypeDecl*, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::RequirementSource const*, swift::ModuleDecl*)::$_32>(long, swift::Type, swift::TypeRepr const*) + 562
20 swift                    0x000000010a24443b std::__1::__function::__func<visitInherited(llvm::PointerUnion<swift::TypeDecl*, swift::ExtensionDecl*>, llvm::function_ref<swift::GenericSignatureBuilder::ConstraintResult (swift::Type, swift::TypeRepr const*)>)::$_73, std::__1::allocator<visitInherited(llvm::PointerUnion<swift::TypeDecl*, swift::ExtensionDecl*>, llvm::function_ref<swift::GenericSignatureBuilder::ConstraintResult (swift::Type, swift::TypeRepr const*)>)::$_73>, void (swift::Type, swift::TypeRepr const*)>::operator()(swift::Type&&, swift::TypeRepr const*&&) + 219
21 swift                    0x000000010a229083 swift::GenericSignatureBuilder::addInheritedRequirements(swift::TypeDecl*, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::RequirementSource const*, swift::ModuleDecl*) + 467
22 swift                    0x000000010a229753 swift::GenericSignatureBuilder::expandConformanceRequirement(swift::GenericSignatureBuilder::ResolvedType, swift::ProtocolDecl*, swift::GenericSignatureBuilder::RequirementSource const*, bool) + 1571
23 swift                    0x000000010a22ce49 swift::GenericSignatureBuilder::addTypeRequirement(llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::GenericSignatureBuilder::UnresolvedHandlingKind, swift::ModuleDecl*) + 1785
24 swift                    0x000000010a21f239 swift::GenericSignatureBuilder::addRequirement(swift::Requirement const&, swift::RequirementRepr const*, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::SubstitutionMap const*, swift::ModuleDecl*) + 1289
25 swift                    0x0000000109e28180 swift::RequirementSignatureRequest::evaluate(swift::Evaluator&, swift::ProtocolDecl*) const + 1008
26 swift                    0x000000010a19d43a swift::RequirementSignatureRequest::OutputType swift::evaluateOrDefault<swift::RequirementSignatureRequest>(swift::Evaluator&, swift::RequirementSignatureRequest, swift::RequirementSignatureRequest::OutputType) + 1242
27 swift                    0x000000010a2294a7 swift::GenericSignatureBuilder::expandConformanceRequirement(swift::GenericSignatureBuilder::ResolvedType, swift::ProtocolDecl*, swift::GenericSignatureBuilder::RequirementSource const*, bool) + 887
28 swift                    0x000000010a22ce49 swift::GenericSignatureBuilder::addTypeRequirement(llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, llvm::PointerUnion<swift::GenericSignatureBuilder::PotentialArchetype*, swift::Type>, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::GenericSignatureBuilder::UnresolvedHandlingKind, swift::ModuleDecl*) + 1785
29 swift                    0x000000010a21f239 swift::GenericSignatureBuilder::addRequirement(swift::Requirement const&, swift::RequirementRepr const*, swift::GenericSignatureBuilder::FloatingRequirementSource, swift::SubstitutionMap const*, swift::ModuleDecl*) + 1289
30 swift                    0x000000010a0b29f2 swift::ASTContext::getOrCreateGenericSignatureBuilder(swift::CanGenericSignature) + 706
31 swift                    0x000000010a213f0c swift::GenericSignatureImpl::getCanonicalTypeInContext(swift::Type) + 60
32 swift                    0x000000010a2b4867 swift::TypeBase::computeCanonicalType() + 3031
33 swift                    0x0000000109e6255a swift::CheckRedeclarationRequest::evaluate(swift::Evaluator&, swift::ValueDecl*) const + 970
34 swift                    0x0000000109e7ab36 llvm::Expected<swift::CheckRedeclarationRequest::OutputType> swift::Evaluator::getResultCached<swift::CheckRedeclarationRequest, (void*)0>(swift::CheckRedeclarationRequest const&) + 1030
35 swift                    0x0000000109e6a0c5 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 20645
36 swift                    0x0000000109e6f24b (anonymous namespace)::DeclChecker::visitProtocolDecl(swift::ProtocolDecl*) + 555
37 swift                    0x0000000109e65722 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 1794
38 swift                    0x0000000109f2d6d1 swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 753
39 swift                    0x0000000109f30559 llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest>(swift::TypeCheckSourceFileRequest const&) + 953
40 swift                    0x0000000109f2d254 swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType) + 164
41 swift                    0x00000001090a59a7 swift::CompilerInstance::performSemaUpTo(swift::SourceFile::ASTStage_t) + 6439
42 swift                    0x0000000108f66771 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 6833
43 swift                    0x0000000108eeac27 main + 1255
44 libdyld.dylib            0x00007fff7079acc9 start + 1
@typesanitizer
Copy link

@swift-ci create

@slavapestov
Copy link
Member

This was fixed a while ago, and we already have a regression test: 5acd795

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
This issue was closed.
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 type checker Area → compiler: Semantic analysis
Projects
None yet
Development

No branches or pull requests

3 participants