Open hamishknight opened 1 week ago
This crashes the compiler:
struct S<each T> {} typealias U<each T> = S<> func foo(_ x: U<>.Type) { let y = x<Int>.self }
Stack dump: 0. Program arguments: /Users/hamish/src/swift-dev/build/Release/swift-macosx-arm64/bin/swift-frontend -typecheck /Users/hamish/src/swift-test-arena/main.swift -sdk /Users/hamish/src/MacOSX.sdk -debug-diagnostic-names 1. Swift version 6.0-dev (LLVM 7a0ecf027d00801, Swift 02a8f24406e348f) 2. Compiling with effective version 5.10 3. While evaluating request TypeCheckSourceFileRequest(source_file "/Users/hamish/src/swift-test-arena/main.swift") 4. While evaluating request TypeCheckFunctionBodyRequest(main.(file).foo@/Users/hamish/src/swift-test-arena/main.swift:140:6) 5. While type-checking statement at [/Users/hamish/src/swift-test-arena/main.swift:140:25 - line:142:1] RangeText="{ let y = x<Int>.self " 6. While type-checking declaration 0x133831358 (at /Users/hamish/src/swift-test-arena/main.swift:141:3) 7. While evaluating request PatternBindingEntryRequest((unknown decl)@/Users/hamish/src/swift-test-arena/main.swift:141:3, 0) 8. While type-checking expression at [/Users/hamish/src/swift-test-arena/main.swift:141:11 - line:141:18] RangeText="x<Int>." 9. While type-checking-target starting at /Users/hamish/src/swift-test-arena/main.swift:141:12 Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it): 0 swift-frontend 0x000000010a11ca98 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56 1 swift-frontend 0x000000010a11ade4 llvm::sys::RunSignalHandlers() + 112 2 swift-frontend 0x000000010a11d120 SignalHandler(int) + 352 3 libsystem_platform.dylib 0x0000000180ce9a24 _sigtramp + 56 4 swift-frontend 0x0000000105930a84 swift::constraints::ConstraintSystem::simplifyExplicitGenericArgumentsConstraint(swift::Type, swift::Type, swift::optionset::OptionSet<swift::constraints::ConstraintSystem::TypeMatchFlags, unsigned int>, swift::constraints::ConstraintLocatorBuilder) + 408 5 swift-frontend 0x0000000105934ac0 swift::constraints::ConstraintSystem::addConstraintImpl(swift::constraints::ConstraintKind, swift::Type, swift::Type, swift::constraints::ConstraintLocatorBuilder, bool) + 1024 6 swift-frontend 0x000000010590ff64 swift::constraints::ConstraintSystem::addConstraint(swift::constraints::ConstraintKind, swift::Type, swift::Type, swift::constraints::ConstraintLocatorBuilder, bool) + 76 7 swift-frontend 0x00000001058f9880 (anonymous namespace)::ConstraintGenerator::addSpecializationConstraint(swift::constraints::ConstraintLocator*, swift::Type, llvm::ArrayRef<swift::TypeRepr*>) + 616 8 swift-frontend 0x00000001058f2508 (anonymous namespace)::ConstraintGenerator::visitUnresolvedSpecializeExpr(swift::UnresolvedSpecializeExpr*) + 612 9 swift-frontend 0x00000001058edab8 (anonymous namespace)::ConstraintWalker::walkToExprPost(swift::Expr*) + 752 10 swift-frontend 0x0000000105e3adb0 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 232 11 swift-frontend 0x0000000105e3ad80 (anonymous namespace)::Traversal::doIt(swift::Expr*) + 184 12 swift-frontend 0x0000000105e3acbc swift::Expr::walk(swift::ASTWalker&) + 32 13 swift-frontend 0x00000001058e9704 swift::constraints::ConstraintSystem::generateConstraints(swift::Expr*, swift::DeclContext*) + 104 14 swift-frontend 0x00000001058e8a1c swift::constraints::ConstraintSystem::generateConstraints(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 432 15 swift-frontend 0x000000010594d61c swift::constraints::ConstraintSystem::solveImpl(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 392 16 swift-frontend 0x000000010594cee8 swift::constraints::ConstraintSystem::solve(swift::constraints::SyntacticElementTarget&, swift::FreeTypeVariableBinding) + 144 17 swift-frontend 0x0000000105ad2950 swift::TypeChecker::typeCheckTarget(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 296 18 swift-frontend 0x0000000105ad27d0 swift::TypeChecker::typeCheckExpression(swift::constraints::SyntacticElementTarget&, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 184 19 swift-frontend 0x0000000105ad38c0 swift::TypeChecker::typeCheckBinding(swift::Pattern*&, swift::Expr*&, swift::DeclContext*, swift::Type, swift::PatternBindingDecl*, unsigned int, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 120 20 swift-frontend 0x0000000105ad3af8 swift::TypeChecker::typeCheckPatternBinding(swift::PatternBindingDecl*, unsigned int, swift::Type, swift::optionset::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 248 21 swift-frontend 0x0000000105baa974 swift::PatternBindingEntryRequest::evaluate(swift::Evaluator&, swift::PatternBindingDecl*, unsigned int) const + 1800 22 swift-frontend 0x0000000105ec85e0 swift::PatternBindingEntryRequest::OutputType swift::Evaluator::getResultUncached<swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType swift::evaluateOrDefault<swift::PatternBindingEntryRequest>(swift::Evaluator&, swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType)::'lambda'()>(swift::PatternBindingEntryRequest const&, swift::PatternBindingEntryRequest::OutputType swift::evaluateOrDefault<swift::PatternBindingEntryRequest>(swift::Evaluator&, swift::PatternBindingEntryRequest, swift::PatternBindingEntryRequest::OutputType)::'lambda'()) + 212 23 swift-frontend 0x0000000105e98180 swift::PatternBindingDecl::getCheckedPatternBindingEntry(unsigned int) const + 124 24 swift-frontend 0x0000000105b1d178 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 1104 25 swift-frontend 0x0000000105b1cd10 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 116 26 swift-frontend 0x0000000105ba2330 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 144 27 swift-frontend 0x0000000105ba0968 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 136 28 swift-frontend 0x0000000105ba0104 (anonymous namespace)::StmtChecker::typeCheckBody(swift::BraceStmt*&) + 32 29 swift-frontend 0x0000000105b9ff24 swift::TypeCheckFunctionBodyRequest::evaluate(swift::Evaluator&, swift::AbstractFunctionDecl*) const + 1032 30 swift-frontend 0x0000000105f3c7c0 swift::TypeCheckFunctionBodyRequest::OutputType swift::Evaluator::getResultUncached<swift::TypeCheckFunctionBodyRequest, swift::TypeCheckFunctionBodyRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckFunctionBodyRequest>(swift::Evaluator&, swift::TypeCheckFunctionBodyRequest, swift::TypeCheckFunctionBodyRequest::OutputType)::'lambda'()>(swift::TypeCheckFunctionBodyRequest const&, swift::TypeCheckFunctionBodyRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckFunctionBodyRequest>(swift::Evaluator&, swift::TypeCheckFunctionBodyRequest, swift::TypeCheckFunctionBodyRequest::OutputType)::'lambda'()) + 224 31 swift-frontend 0x0000000105eaea9c swift::AbstractFunctionDecl::getTypecheckedBody() const + 112 32 swift-frontend 0x0000000105fe1dbc swift::SourceFile::typeCheckDelayedFunctions() + 96 33 swift-frontend 0x0000000105bdcf74 swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 240 34 swift-frontend 0x0000000105bde8f0 swift::TypeCheckSourceFileRequest::OutputType swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType)::'lambda'()>(swift::TypeCheckSourceFileRequest const&, swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType)::'lambda'()) + 216 35 swift-frontend 0x0000000105bdce5c swift::performTypeChecking(swift::SourceFile&) + 84 36 swift-frontend 0x0000000104b430bc bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_0>(long, swift::SourceFile&) + 16 37 swift-frontend 0x0000000104b3cc28 swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 156 38 swift-frontend 0x0000000104b3cb6c swift::CompilerInstance::performSema() + 76 39 swift-frontend 0x00000001048ec3ac withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60 40 swift-frontend 0x00000001048e1a6c performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 700 41 swift-frontend 0x00000001048e1214 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2288 42 swift-frontend 0x000000010471e6f4 swift::mainEntry(int, char const**) + 3060 43 dyld 0x0000000180941058 start + 2224 fish: Job 1, './swift -frontend -typecheck ~/…' terminated by signal SIGSEGV (Address boundary error)
Here’s a simpler example:
typealias U<T> = Int func foo(_ x: U<Int>.Type) { let y = x<Int>.self }
This crashes the compiler: