swiftlang / swift

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

[SR-7924] (!ty->hasError() && "Serializing error type") #50459

Closed tachyonics closed 5 years ago

tachyonics commented 6 years ago
Previous ID SR-7924
Radar rdar://problem/40922122
Original Reporter @tachyonics
Type Bug
Status Closed
Resolution Cannot Reproduce
Environment Swift version: swift-4.1.2-RELEASE OS version: macOS 10.12.6
Additional Detail from JIRA | | | |------------------|-----------------| |Votes | 0 | |Component/s | Compiler | |Labels | Bug, 4.1Regression, CompilerCrash, Serialization | |Assignee | @tachyonics | |Priority | Medium | md5: b5e626705fcf6903e3077e7e01f82c0e

Issue Description:

This may be a duplicate of https://bugs.swift.org/browse/SR-4317

I upgraded a Swift library to 4.1 and started getting the following error-

Assertion failed: (!ty->hasError() && "Serializing error type"), function addTypeRef, file /Users/buildnode/jenkins/workspace/oss-swift-4.1-package-osx/swift/lib/Serialization/Serialization.cpp, line 617.
0 swift 0x000000010603f3e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1 swift 0x000000010603faf6 SignalHandler(int) + 694
2 libsystem_platform.dylib 0x00007fffcad28b3a _sigtramp + 26
3 libsystem_platform.dylib 0x00007fd9040992d0 _sigtramp + 959907760
4 libsystem_c.dylib 0x00007fffcabad420 abort + 129
5 libsystem_c.dylib 0x00007fffcab74893 basename_r + 0
6 swift 0x00000001039b9578 swift::serialization::Serializer::addTypeRef(swift::Type) + 408
7 swift 0x00000001039c0f01 swift::serialization::Serializer::writeSubstitutions(llvm::ArrayRef<swift::Substitution>, std::__1::array<unsigned int, 256ul> const&, swift::GenericEnvironment*) + 161
8 swift 0x00000001039c05b7 swift::serialization::Serializer::writeNormalConformance(swift::NormalProtocolConformance const*) + 2919
9 swift 0x00000001039d072b swift::serialization::Serializer::writeAllDeclsAndTypes() + 2827
10 swift 0x00000001039d1c9a swift::serialization::Serializer::writeAST(llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, bool) + 3242
11 swift 0x00000001039d8d4b swift::serialization::Serializer::writeToStream(llvm::raw_ostream&, llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::SILModule const*, swift::SerializationOptions const&) + 139
12 swift 0x0000000103a1a8a3 void llvm::function_ref<void (llvm::raw_ostream&)>::callback_fn<swift::serialize(llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::SerializationOptions const&, swift::SILModule const*)::$_4>(long, llvm::raw_ostream&) + 179
13 swift 0x00000001039d9fa8 withOutputFile(swift::ASTContext&, llvm::StringRef, llvm::function_ref<void (llvm::raw_ostream&)>) + 440
14 swift 0x00000001039d9d6c swift::serialize(llvm::PointerUnion<swift::ModuleDecl*, swift::SourceFile*>, swift::SerializationOptions const&, swift::SILModule const*) + 220
15 swift 0x0000000102afd0e9 std::_1::function::func<performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*)::$_6, std::_1::allocator<performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*)::$_6>, void ()>::operator()() + 617
16 swift 0x000000010372eb64 swift::SILModule::serialize() + 36
17 swift 0x0000000102af5ccd performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) + 12621
18 swift 0x0000000102af1b90 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 3376
19 swift 0x0000000102ab1443 main + 3075
20 libdyld.dylib 0x00007fffcab19235 start + 1
Stack dump:
0. Program arguments: /Library/Developer/Toolchains/swift-4.1.2-RELEASE.xctoolchain/usr/bin/swift -frontend -merge-modules -emit-module /Volumes/Unix/Bugs/EncodingBug/.build/x86_64-apple-macosx10.10/debug/EncodingBug.build/InternalUnkeyedEncodingContainer~partial.swiftmodule -parse-as-library -sil-merge-partial-modules -disable-diagnostic-passes -disable-sil-perf-optzns -target x86_64-apple-macosx10.10 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk -I /Volumes/Unix/Bugs/EncodingBug/.build/x86_64-apple-macosx10.10/debug -F /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -enable-testing -g -module-cache-path /Volumes/Unix/Bugs/EncodingBug/.build/x86_64-apple-macosx10.10/debug/ModuleCache -swift-version 4 -Onone -D SWIFT_PACKAGE -color-diagnostics -emit-module-doc-path /Volumes/Unix/Bugs/EncodingBug/.build/x86_64-apple-macosx10.10/debug/EncodingBug.swiftdoc -module-name EncodingBug -o /Volumes/Unix/Bugs/EncodingBug/.build/x86_64-apple-macosx10.10/debug/EncodingBug.swiftmodule 
1. While serializing type 'τ_1_0'
<unknown>:0: error: unable to execute command: Abort trap: 6
<unknown>:0: error: merge-module command failed due to signal 6 (use -v to see invocation)
error: terminated(1): /Library/Developer/Toolchains/swift-4.1.2-RELEASE.xctoolchain/usr/bin/swift-build-tool -f /Volumes/Unix/Bugs/EncodingBug/.build/debug.yaml main output:

This can be replicated with the following code with the command swift build or building in XCode-

import Foundation

internal class InternalUnkeyedEncodingContainer: UnkeyedEncodingContainer {

    func encode(_ value: String) throws {

    }

    func encode(_ value: Double) throws {

    }  

    func encode(_ value: Float) throws {

    }

    func encode(_ value: Int) throws {

    }

    func encode(_ value: Int8) throws {

    }

    func encode(_ value: Int16) throws {

    }

    func encode(_ value: Int32) throws {

    }

    func encode(_ value: Int64) throws {

    }

    func encode(_ value: UInt) throws {

    }

    func encode(_ value: UInt8) throws {

    }

    func encode(_ value: UInt16) throws {

    }

    func encode(_ value: UInt32) throws {

    }

    func encode(_ value: UInt64) throws {

    }

    func encode<T>(_ value: T) throws where T : Encodable {

    }

    func encode(_ value: Bool) throws {

    }

    var codingPath: [CodingKey] = []

    var count: Int = 0

    func encodeNil() throws {

    }

    func nestedContainer<NestedKey>(keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer<NestedKey> where NestedKey : CodingKey {
        fatalError()
    }

    func nestedUnkeyedContainer() -> UnkeyedEncodingContainer {
        fatalError()
    }

    func superEncoder() -> Encoder {
        fatalError()
    }
}
tachyonics commented 6 years ago

As an additional note, changing the conforming class to a struct seems to resolve the error.

belkadan commented 6 years ago

Thank you for the reduced test case!

@swift-ci create

belkadan commented 6 years ago

I'm not seeing this happen on near-master. Mind trying with one of the 4.2 snapshots on swift.org?

belkadan commented 6 years ago

Alternately, can you attach a full project where this reproduces, so that I can be sure we have the same setup?

bc7072e8-7d37-4a38-8fee-cab463d443b7 commented 5 years ago

@tachyonics We could not reproduce. Closing this but feel free to reopen with more info on how to reproduce.