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-5432] Using nested type as a superclass generic parameter leads to a crash #48006

Closed
rintaro mannequin opened this issue Jul 11, 2017 · 3 comments
Closed

[SR-5432] Using nested type as a superclass generic parameter leads to a crash #48006

rintaro mannequin opened this issue Jul 11, 2017 · 3 comments
Assignees
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself crash Bug: A crash, i.e., an abnormal termination of software

Comments

@rintaro
Copy link
Mannequin

rintaro mannequin commented Jul 11, 2017

Previous ID SR-5432
Radar rdar://problem/33856652
Original Reporter @rintaro
Type Bug
Status Resolved
Resolution Duplicate
Environment

Swift version 4.0-dev (LLVM 2c7b572db2, Clang 54c8e38855, Swift 9f68dee)
Target: x86_64-unknown-linux-gnu

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, CompilerCrash
Assignee @slavapestov
Priority Medium

md5: a8aeae1a8c17ec2096387b86024b65dd

duplicates:

  • SR-5650 Remove parent field from type metadata

is duplicated by:

  • SR-5711 EXC_BAD_INSTRUCTION crash when using inner type as generics parameter

relates to:

  • SR-4611 Runtime crash with nested type used as superclass generic argument
  • SR-5711 EXC_BAD_INSTRUCTION crash when using inner type as generics parameter

Issue Description:

protocol Proto {}
class Base<T> {}

class Concrete : Base<Concrete.Sub> {
  enum Sub : Proto {}
}
$ ../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift -frontend -typecheck test.swift
swift: /home/rintaro/Documents/swift-oss/swift/lib/Sema/IterativeTypeChecker.cpp:107: void swift::IterativeTypeChecker::satisfy(swift::TypeCheckRequest): Assertion `isSatisfied(request)' failed.
#&#8203;0 0x0000000003a941f8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x3a941f8)
#&#8203;1 0x0000000003a94936 SignalHandler(int) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x3a94936)
#&#8203;2 0x00007f544fd24390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#&#8203;3 0x00007f544e464428 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x35428)
#&#8203;4 0x00007f544e46602a abort (/lib/x86_64-linux-gnu/libc.so.6+0x3702a)
#&#8203;5 0x00007f544e45cbd7 (/lib/x86_64-linux-gnu/libc.so.6+0x2dbd7)
#&#8203;6 0x00007f544e45cc82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
#&#8203;7 0x0000000001470ff9 (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x1470ff9)
#&#8203;8 0x0000000001470e9b swift::IterativeTypeChecker::satisfy(swift::TypeCheckRequest) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x1470e9b)
#&#8203;9 0x0000000001470e9b swift::IterativeTypeChecker::satisfy(swift::TypeCheckRequest) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x1470e9b)
#&#8203;10 0x0000000001362570 swift::TypeChecker::resolveRawType(swift::EnumDecl*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x1362570)
#&#8203;11 0x00000000015d61fe swift::NominalTypeDecl::prepareConformanceTable() const (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x15d61fe)
#&#8203;12 0x00000000015d651f swift::NominalTypeDecl::getImplicitProtocols(llvm::SmallVectorImpl<swift::ProtocolDecl*>&) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x15d651f)
#&#8203;13 0x0000000001362c91 swift::TypeChecker::checkInheritanceClause(swift::Decl*, swift::GenericTypeResolver*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x1362c91)
#&#8203;14 0x000000000136bd71 swift::TypeChecker::validateDecl(swift::ValueDecl*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x136bd71)
#&#8203;15 0x00000000015c90bc swift::DeclContext::lookupQualified(swift::Type, swift::DeclName, swift::NLOptions, swift::LazyResolver*, llvm::SmallVectorImpl<swift::ValueDecl*>&) const (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x15c90bc)
#&#8203;16 0x000000000139de4f swift::TypeChecker::lookupMemberType(swift::DeclContext*, swift::Type, swift::Identifier, swift::OptionSet<swift::NameLookupFlags, unsigned int>) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x139de4f)
#&#8203;17 0x00000000013e70bb resolveIdentTypeComponent(swift::TypeChecker&, swift::DeclContext*, llvm::ArrayRef<swift::ComponentIdentTypeRepr*>, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, bool, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e70bb)
#&#8203;18 0x00000000013e6869 swift::TypeChecker::resolveIdentifierType(swift::DeclContext*, swift::IdentTypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, bool, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e6869)
#&#8203;19 0x00000000013e75d8 (anonymous namespace)::TypeResolver::resolveType(swift::TypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e75d8)
#&#8203;20 0x00000000013e74dc swift::TypeChecker::resolveType(swift::TypeRepr*, swift::DeclContext*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e74dc)
#&#8203;21 0x00000000013e5ee0 swift::TypeChecker::validateType(swift::TypeLoc&, swift::DeclContext*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e5ee0)
#&#8203;22 0x00000000013e62a5 swift::TypeChecker::applyUnboundGenericArguments(swift::UnboundGenericType*, swift::GenericTypeDecl*, swift::SourceLoc, swift::DeclContext*, llvm::MutableArrayRef<swift::TypeLoc>, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e62a5)
#&#8203;23 0x00000000013e5acd swift::TypeChecker::applyGenericArguments(swift::Type, swift::TypeDecl*, swift::SourceLoc, swift::DeclContext*, swift::GenericIdentTypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e5acd)
#&#8203;24 0x00000000013ecdd6 resolveTypeDecl(swift::TypeChecker&, swift::TypeDecl*, swift::SourceLoc, swift::DeclContext*, swift::GenericIdentTypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13ecdd6)
#&#8203;25 0x00000000013ec88f resolveTopLevelIdentTypeComponent(swift::TypeChecker&, swift::DeclContext*, swift::ComponentIdentTypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, bool, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13ec88f)
#&#8203;26 0x00000000013e6e93 resolveIdentTypeComponent(swift::TypeChecker&, swift::DeclContext*, llvm::ArrayRef<swift::ComponentIdentTypeRepr*>, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, bool, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e6e93)
#&#8203;27 0x00000000013e6869 swift::TypeChecker::resolveIdentifierType(swift::DeclContext*, swift::IdentTypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, bool, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e6869)
#&#8203;28 0x00000000013e75d8 (anonymous namespace)::TypeResolver::resolveType(swift::TypeRepr*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e75d8)
#&#8203;29 0x00000000013e74dc swift::TypeChecker::resolveType(swift::TypeRepr*, swift::DeclContext*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e74dc)
#&#8203;30 0x00000000013e5ee0 swift::TypeChecker::validateType(swift::TypeLoc&, swift::DeclContext*, swift::OptionSet<swift::TypeResolutionFlags, unsigned int>, swift::GenericTypeResolver*, llvm::function_ref<bool (swift::TypeCheckRequest)>*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13e5ee0)
#&#8203;31 0x000000000136363c swift::TypeChecker::checkInheritanceClause(swift::Decl*, swift::GenericTypeResolver*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x136363c)
#&#8203;32 0x000000000136bd71 swift::TypeChecker::validateDecl(swift::ValueDecl*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x136bd71)
#&#8203;33 0x000000000137aecc (anonymous namespace)::DeclChecker::visitClassDecl(swift::ClassDecl*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x137aecc)
#&#8203;34 0x000000000136a4be (anonymous namespace)::DeclChecker::visit(swift::Decl*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x136a4be)
#&#8203;35 0x000000000136a2c3 swift::TypeChecker::typeCheckDecl(swift::Decl*, bool) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x136a2c3)
#&#8203;36 0x00000000013f4eb4 swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, swift::OptionSet<swift::TypeCheckingFlags, unsigned int>, unsigned int, unsigned int, unsigned int, unsigned int) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x13f4eb4)
#&#8203;37 0x0000000000fac727 swift::CompilerInstance::performSema() (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0xfac727)
#&#8203;38 0x00000000004ad0d8 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x4ad0d8)
#&#8203;39 0x00000000004ab6c1 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x4ab6c1)
#&#8203;40 0x0000000000464cf4 main (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x464cf4)
#&#8203;41 0x00007f544e44f830 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20830)
#&#8203;42 0x00000000004625b9 _start (../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift+0x4625b9)
Stack dump:
0.  Program arguments: ../build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swift -frontend -typecheck test.swift 
1.  While type-checking 'Concrete' at test.swift:4:1
2.  While validating 'Concrete' at test.swift:4:1
3.  While resolving type Base<Concrete.Sub> at [test.swift:4:18 - line:4:35] RangeText="Base<Concrete.Sub>"
4.  While resolving type Concrete.Sub at [test.swift:4:23 - line:4:32] RangeText="Concrete.S"
5.  While validating 'Sub' at test.swift:5:3
Aborted (core dumped)
@rintaro
Copy link
Mannequin Author

rintaro mannequin commented Jul 11, 2017

Xcode
Version 8.3.3 (8E3004b)
Version 9.0 beta 3 (9M174d)
both result infinite loop.

@belkadan
Copy link
Contributor

I thought I saw a dup for this but I can't find it now.

@slavapestov
Copy link
Member

Note: if we don't remove the parent field from metadata, https://bugs.swift.org/browse/SR-263 tracks the more general solution (which we should do anyway, but perhaps a bit later).

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@AnthonyLatsis AnthonyLatsis added the crash Bug: A crash, i.e., an abnormal termination of software label Dec 12, 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 crash Bug: A crash, i.e., an abnormal termination of software
Projects
None yet
Development

No branches or pull requests

3 participants