swiftlang / swift

The Swift Programming Language
https://swift.org
Apache License 2.0
66.71k stars 10.28k forks source link

Compiler crash when type-checking a subclass that overrides a property #74651

Open adamwych opened 1 week ago

adamwych commented 1 week ago

Description

Compiler crashes when trying to type-check a class, that overrides its base class' property. Looks like it happens only if BaseClass is generic and SubClass does not specify any type for that generic.

Reproduction

class BaseClass<T> {
    public var values: [Float: Int] = [:]
}

class SubClass: BaseClass { // Note missing generic type here.
    public var values: [Float: Float] = [:]
}

Stack dump

Assertion failed: (selfType && "No superclass type?"), function getSuperMemberDeclType, file TypeCheckDeclOverride.cpp, line 866.
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: /Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin/swift-frontend -frontend -emit-module -experimental-skip-non-inlinable-function-bodies-without-types /Users/adamwych/Projects/swift-bugs/Sources/main.swift -target arm64-apple-macosx14.0 -Xllvm -aarch64-use-tbi -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk -I /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/Modules -I /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -F /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -color-diagnostics -enable-testing -g -debug-info-format=dwarf -dwarf-version=4 -module-cache-path /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/ModuleCache -swift-version 5 -Onone -D SWIFT_PACKAGE -D DEBUG -entry-point-function-name Foo_main -empty-abi-descriptor -resource-dir /Library/Developer/Toolchains/swift-latest.xctoolchain/usr/lib/swift -enable-anonymous-context-mangled-names -file-compilation-dir /Users/adamwych/Projects/swift-bugs -Xcc -isysroot -Xcc /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk -Xcc -F -Xcc /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -Xcc -fPIC -Xcc -g -module-name Foo -package-name swift_bugs -plugin-path /Library/Developer/Toolchains/swift-latest.xctoolchain/usr/lib/swift/host/plugins -plugin-path /Library/Developer/Toolchains/swift-latest.xctoolchain/usr/local/lib/swift/host/plugins -target-sdk-version 14.4 -target-sdk-name macosx14.4 -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -external-plugin-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/local/lib/swift/host/plugins#/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server -emit-module-doc-path /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/Modules/Foo.swiftdoc -emit-module-source-info-path /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/Modules/Foo.swiftsourceinfo -emit-dependencies-path /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/Foo.build/Foo.emit-module.d -o /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/Modules/Foo.swiftmodule -emit-abi-descriptor-path /Users/adamwych/Projects/swift-bugs/.build/arm64-apple-macosx/debug/Modules/Foo.abi.json
1.      Apple Swift version 6.0-dev (LLVM de395d39a90ed7a, Swift 490cf64aee23f13)
2.      Compiling with effective version 5.10
3.      While evaluating request TypeCheckSourceFileRequest(source_file "/Users/adamwych/Projects/swift-bugs/Sources/main.swift")
4.      While type-checking 'SubClass' (at /Users/adamwych/Projects/swift-bugs/Sources/main.swift:5:1)
5.      While type-checking declaration 0x14b198b30 (at /Users/adamwych/Projects/swift-bugs/Sources/main.swift:6: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           0x00000001084ad0d0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  swift-frontend           0x00000001084ab89c llvm::sys::RunSignalHandlers() + 112
2  swift-frontend           0x00000001084ad718 SignalHandler(int) + 304
3  libsystem_platform.dylib 0x0000000183acda24 _sigtramp + 56
4  libsystem_pthread.dylib  0x0000000183a9dcc0 pthread_kill + 288
5  libsystem_c.dylib        0x00000001839a9a40 abort + 180
6  libsystem_c.dylib        0x00000001839a8d30 err + 0
7  swift-frontend           0x0000000108900224 (anonymous namespace)::OverrideMatcher::checkPotentialOverrides(llvm::SmallVectorImpl<(anonymous namespace)::OverrideMatch>&, (anonymous namespace)::OverrideCheckingAttempt) (.cold.30) + 0
8  swift-frontend           0x00000001042a68e4 (anonymous namespace)::OverrideMatcher::checkPotentialOverrides(llvm::SmallVectorImpl<(anonymous namespace)::OverrideMatch>&, (anonymous namespace)::OverrideCheckingAttempt) + 6636
9  swift-frontend           0x00000001042a3c3c swift::checkOverrides(swift::ValueDecl*) + 1068
10 swift-frontend           0x00000001042c858c (anonymous namespace)::DeclChecker::visitBoundVariable(swift::VarDecl*) + 392
11 swift-frontend           0x00000001042c7ce8 void llvm::function_ref<void (swift::VarDecl*)>::callback_fn<(anonymous namespace)::DeclChecker::visitPatternBindingDecl(swift::PatternBindingDecl*)::'lambda'(swift::VarDecl*)>(long, swift::VarDecl*) + 68
12 swift-frontend           0x00000001042b075c (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 1352
13 swift-frontend           0x00000001042b8930 (anonymous namespace)::DeclChecker::visitClassDecl(swift::ClassDecl*) + 932
14 swift-frontend           0x00000001042b0ee8 (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 3284
15 swift-frontend           0x00000001042b0200 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 136
16 swift-frontend           0x0000000104379680 swift::TypeCheckSourceFileRequest::evaluate(swift::Evaluator&, swift::SourceFile*) const + 176
17 swift-frontend           0x000000010437b228 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'()) + 232
18 swift-frontend           0x00000001043795a8 swift::performTypeChecking(swift::SourceFile&) + 84
19 swift-frontend           0x0000000103256320 bool llvm::function_ref<bool (swift::SourceFile&)>::callback_fn<swift::CompilerInstance::performSema()::$_7>(long, swift::SourceFile&) + 16
20 swift-frontend           0x000000010324fdb4 swift::CompilerInstance::forEachFileToTypeCheck(llvm::function_ref<bool (swift::SourceFile&)>) + 156
21 swift-frontend           0x000000010324fcf8 swift::CompilerInstance::performSema() + 76
22 swift-frontend           0x0000000103021928 withSemanticAnalysis(swift::CompilerInstance&, swift::FrontendObserver*, llvm::function_ref<bool (swift::CompilerInstance&)>, bool) + 60
23 swift-frontend           0x0000000103012cc4 performCompile(swift::CompilerInstance&, int&, swift::FrontendObserver*) + 708
24 swift-frontend           0x0000000103011c30 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2376
25 swift-frontend           0x0000000102e2bba4 swift::mainEntry(int, char const**) + 3096
26 dyld                     0x000000018371d0e0 start + 2360

Expected behavior

The compiler should not crash.

Environment

Apple Swift version 6.0-dev (LLVM de395d39a90ed7a, Swift 490cf64aee23f13) Target: arm64-apple-macosx14.0

Additional information

No response

AnthonyLatsis commented 1 week ago

Simpler:

class BaseClass <T> {
  var values: Int { 0 }
}
class SubClass: BaseClass {
  var values: Float { 0 }
}