Navigation Menu

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-15249] Dynamic member lookup with IUO crashes compiler #57571

Closed
hamishknight opened this issue Sep 27, 2021 · 1 comment
Closed

[SR-15249] Dynamic member lookup with IUO crashes compiler #57571

hamishknight opened this issue Sep 27, 2021 · 1 comment
Assignees
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

@hamishknight
Copy link
Collaborator

Previous ID SR-15249
Radar None
Original Reporter @hamishknight
Type Bug
Status Closed
Resolution Done
Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, TypeChecker
Assignee @hamishknight
Priority Medium

md5: 5e9738f92d0b2174ddc21ff0fc12ec5a

Issue Description:

func takesKP(_ kp: KeyPath<R, Int>) {}

struct S {
  subscript() -> Int { 0 }
}

@dynamicMemberLookup
struct R {
  subscript(dynamicMember kp: KeyPath<S, Int>) -> Int! { 0 }
}

takesKP(\R.[])

Crashes in CSApply:

1.  Apple Swift version 5.6-dev (LLVM 70b82c8b83f6294, Swift a66435c61f9a895)
2.  Compiling with the current language version
3.  While evaluating request TypeCheckSourceFileRequest(source_file "/Users/hamish/projects/swift-test-arena/swift-test-arena/main.swift")
4.  While type-checking statement at [/Users/hamish/projects/swift-test-arena/swift-test-arena/main.swift:75:1 - line:75:14] RangeText="takesKP(\R.[]"
5.  While type-checking expression at [/Users/hamish/projects/swift-test-arena/swift-test-arena/main.swift:75:1 - line:75:14] RangeText="takesKP(\R.[]"
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           0x00000001148e72d7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 39
1  swift-frontend           0x00000001148e64f5 llvm::sys::RunSignalHandlers() + 85
2  swift-frontend           0x00000001148e7b26 SignalHandler(int) + 278
3  libsystem_platform.dylib 0x00007fff20492d7d _sigtramp + 29
4  libsystem_platform.dylib 0x000000011e8cfd6b _sigtramp + 18446603344782020619
5  libsystem_c.dylib        0x00007fff203a2406 abort + 125
6  libsystem_c.dylib        0x00007fff203a17d8 err + 0
7  swift-frontend           0x0000000114cac9b3 swift::constraints::Solution::getDisjunctionChoice(swift::constraints::ConstraintLocator*) const (.cold.1) + 35
8  swift-frontend           0x0000000110b515e4 swift::constraints::Solution::getDisjunctionChoice(swift::constraints::ConstraintLocator*) const + 180
9  swift-frontend           0x0000000110b59bb7 (anonymous namespace)::ExprRewriter::buildKeyPathSubscriptComponent(swift::constraints::SelectedOverload const&, swift::SourceLoc, swift::ArgumentList*, swift::constraints::ConstraintLocator*, llvm::SmallVectorImpl<swift::KeyPathExpr::Component>&) + 2695
10 swift-frontend           0x0000000110b4753a swift::ASTVisitor<(anonymous namespace)::ExprRewriter, swift::Expr*, void, void, void, void, void>::visit(swift::Expr*) + 21386
11 swift-frontend           0x0000000110b40146 (anonymous namespace)::ExprWalker::walkToExprPost(swift::Expr*) + 22
12 swift-frontend           0x0000000110ffd1d2 (anonymous namespace)::Traversal::doIt(swift::ArgumentList*) + 210
13 swift-frontend           0x0000000110fff2ef swift::ASTVisitor<(anonymous namespace)::Traversal, swift::Expr*, swift::Stmt*, bool, swift::Pattern*, bool, void>::visit(swift::Expr*) + 8351
14 swift-frontend           0x0000000110ffcaa9 swift::Expr::walk(swift::ASTWalker&) + 73
15 swift-frontend           0x0000000110b388be (anonymous namespace)::ExprWalker::rewriteTarget(swift::constraints::SolutionApplicationTarget) + 302
16 swift-frontend           0x0000000110b385b3 swift::constraints::ConstraintSystem::applySolution(swift::constraints::Solution&, swift::constraints::SolutionApplicationTarget) + 563
17 swift-frontend           0x0000000110d0858d swift::TypeChecker::typeCheckExpression(swift::constraints::SolutionApplicationTarget&, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 621
18 swift-frontend           0x0000000110d0829e swift::TypeChecker::typeCheckExpression(swift::Expr*&, swift::DeclContext*, swift::constraints::ContextualTypeInfo, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 78
19 swift-frontend           0x0000000110dc94e9 (anonymous namespace)::StmtChecker::typeCheckASTNode(swift::ASTNode&) + 249
20 swift-frontend           0x0000000110dcb44c swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 140
21 swift-frontend           0x0000000110dca730 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 128
22 swift-frontend           0x0000000110dca7b2 swift::TypeChecker::typeCheckTopLevelCodeDecl(swift::TopLevelCodeDecl*) + 50
23 swift-frontend           0x0000000110dfc79f swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 223
24 swift-frontend           0x0000000110dfe58e llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest>(swift::TypeCheckSourceFileRequest const&) + 430
25 swift-frontend           0x0000000110dfe312 llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultCached<swift::TypeCheckSourceFileRequest, (void*)0>(swift::TypeCheckSourceFileRequest const&) + 114
26 swift-frontend           0x0000000110dfc5ad swift::TypeCheckSourceFileRequest::OutputType swift::evaluateOrDefault<swift::TypeCheckSourceFileRequest>(swift::Evaluator&, swift::TypeCheckSourceFileRequest, swift::TypeCheckSourceFileRequest::OutputType) + 45
27 swift-frontend           0x000000011006c33e swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<void (swift::SourceFile&)>) + 158
28 swift-frontend           0x000000011006c1ea swift::CompilerInstance::performSema() + 74
29 swift-frontend           0x000000010ff184c5 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 4725
30 swift-frontend           0x000000010fee09d2 swift::mainEntry(int, char const**) + 546
31 libdyld.dylib            0x00007fff20468f3d start + 1
32 libdyld.dylib            0x0000000000000045 start + 18446603339974668553
error: Abort trap: 6 (in target 'swift-test-arena' from project 'swift-test-arena')
@hamishknight
Copy link
Collaborator Author

Fixed by #39541

@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

1 participant