Skip to content

[Sema] Compiler crash when using a property wrapper parameter without wrapped value initializer #68570

Open
@mininny

Description

@mininny

Description
Compiler crash when using a property wrapper with a projected value, but without wrapped value initializer, in an function argument.

Steps to reproduce

  • Create a property wrapper with a projected value but without a wrapped value initializer
  • Apply the property wrapper to an function argument
  • Call the function without the $

Steps to reproduce

@propertyWrapper
struct ProjectionOnlyWrapper {
  var wrappedValue: String

  var projectedValue: String { self.wrappedValue }
  init(projectedValue: String) { self.wrappedValue = projectedValue }
}

func testParameterWithoutWrappedValueInit(@ProjectionOnlyWrapper value: String) {}
_ = testParameterWithoutWrappedValueInit(value: "")

Expected behavior
Compiler diagnostic saying that the init(wrappedValue:) is required.

Stack trace

error: compile command failed due to signal 11 (use -v to see invocation)
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.	Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -c -primary-file test.swift -target arm64-apple-macosx13.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -color-diagnostics -new-driver-path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-driver -empty-abi-descriptor -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift -module-name test -disable-clang-spi -target-sdk-version 13.3 -target-sdk-name macosx13.3 -o /var/folders/tt/78fgjm150cd74y4p0jm31zvm0000gn/T/TemporaryDirectory.uvoncx/test-1.o
1.	Apple Swift version 5.8.1 (swiftlang-5.8.0.124.5 clang-1403.0.22.11.100)
2.	Compiling with the current language version
3.	While evaluating request TypeCheckSourceFileRequest(source_file "test.swift")
4.	While type-checking statement at [test.swift:10:1 - line:10:51] RangeText="_ = testParameterWithoutWrappedValueInit(value: """
5.	While type-checking expression at [test.swift:10:1 - line:10:51] RangeText="_ = testParameterWithoutWrappedValueInit(value: """
6.	While type-checking-target starting at test.swift:10:1
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           0x00000001073bf2a8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x00000001073be28c llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x00000001073bf8b8 SignalHandler(int) + 344
3  libsystem_platform.dylib 0x000000019f2aaa24 _sigtramp + 56
4  swift-frontend           0x0000000103233f9c (anonymous namespace)::ExprRewriter::coerceCallArguments(swift::ArgumentList*, swift::AnyFunctionType*, swift::ConcreteDeclRef, swift::ApplyExpr*, swift::constraints::ConstraintLocatorBuilder, llvm::ArrayRef<swift::AppliedPropertyWrapper>) + 4860
5  swift-frontend           0x000000010323e81c (anonymous namespace)::ExprRewriter::finishApply(swift::ApplyExpr*, swift::Type, swift::constraints::ConstraintLocatorBuilder, swift::constraints::ConstraintLocatorBuilder) + 6284
6  swift-frontend           0x0000000103245838 (anonymous namespace)::ExprRewriter::visitApplyExpr(swift::ApplyExpr*) + 440
7  swift-frontend           0x00000001032284e8 (anonymous namespace)::ExprRewriter::walkToExprPost(swift::Expr*) + 120
8  swift-frontend           0x0000000103224cf8 (anonymous namespace)::ExprWalker::walkToExprPost(swift::Expr*) + 24
9  swift-frontend           0x0000000103892234 (anonymous namespace)::Traversal::visitAssignExpr(swift::AssignExpr*) + 236
10 swift-frontend           0x000000010388e2fc (anonymous namespace)::Traversal::visit(swift::Expr*) + 1016
11 swift-frontend           0x000000010321fa74 (anonymous namespace)::ExprWalker::rewriteTarget(swift::constraints::SolutionApplicationTarget) + 2740
12 swift-frontend           0x000000010321ead4 swift::constraints::ConstraintSystem::applySolution(swift::constraints::Solution&, swift::constraints::SolutionApplicationTarget) + 7264
13 swift-frontend           0x00000001034a7dd4 swift::TypeChecker::typeCheckTarget(swift::constraints::SolutionApplicationTarget&, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 708
14 swift-frontend           0x00000001034a79dc swift::TypeChecker::typeCheckExpression(swift::constraints::SolutionApplicationTarget&, swift::OptionSet<swift::TypeCheckExprFlags, unsigned int>) + 400
15 swift-frontend           0x0000000103596170 (anonymous namespace)::StmtChecker::typeCheckASTNode(swift::ASTNode&) + 384
16 swift-frontend           0x0000000103599fa0 swift::ASTVisitor<(anonymous namespace)::StmtChecker, void, swift::Stmt*, void, void, void, void>::visit(swift::Stmt*) + 292
17 swift-frontend           0x00000001035987b4 bool (anonymous namespace)::StmtChecker::typeCheckStmt<swift::BraceStmt>(swift::BraceStmt*&) + 320
18 swift-frontend           0x00000001035da838 swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 712
19 swift-frontend           0x00000001035df9ec llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultUncached<swift::TypeCheckSourceFileRequest>(swift::TypeCheckSourceFileRequest const&) + 680
20 swift-frontend           0x00000001035df6b0 llvm::Expected<swift::TypeCheckSourceFileRequest::OutputType> swift::Evaluator::getResultCached<swift::TypeCheckSourceFileRequest, (void*)0>(swift::TypeCheckSourceFileRequest const&) + 240
21 swift-frontend           0x00000001035da508 swift::performTypeChecking(swift::SourceFile&) + 88
22 swift-frontend           0x000000010244950c swift::CompilerInstance::performSema() + 236
23 swift-frontend           0x00000001022afee0 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 464
24 swift-frontend           0x00000001022ae874 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 4308
25 swift-frontend           0x00000001022735bc swift::mainEntry(int, char const**) + 4116
26 dyld                     0x000000019ef23f28 start + 2236

Environment

  • swift-driver version: 1.75.2
  • Apple Swift version 5.8.1 (swiftlang-5.8.0.124.5 clang-1403.0.22.11.100)
  • Target: arm64-apple-macosx13.0
  • Xcode 14.3.1 Build version 14E300c

Metadata

Metadata

Assignees

Labels

bugA deviation from expected or documented behavior. Also: expected but undesirable behavior.call expressionsFeature → expressions: Call expressionscompilerThe Swift compiler itselfcrashBug: A crash, i.e., an abnormal termination of softwaredeclarationsFeature: declarationsexpressionsFeature: expressionsfunction parametersFeature → declarations: function parametersproperty wrappersFeature: property wrappersswift 6.0type checkerArea → compiler: Semantic analysis

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions