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-7927] Crash with renamed objective-c initializer #50462

Open
swift-ci opened this issue Jun 7, 2018 · 8 comments
Open

[SR-7927] Crash with renamed objective-c initializer #50462

swift-ci opened this issue Jun 7, 2018 · 8 comments
Labels
bug A deviation from expected or documented behavior. Also: expected but undesirable behavior. compiler The Swift compiler in itself crash Bug: A crash, i.e., an abnormal termination of software regression swift 4.1

Comments

@swift-ci
Copy link
Collaborator

swift-ci commented Jun 7, 2018

Previous ID SR-7927
Radar rdar://problem/40916837
Original Reporter vmagalhaes (JIRA User)
Type Bug

Attachment: Download

Environment

Xcode 10 Beta 1

Xcode 9.3

Xcode 9.4

It does not crash on 9.2

Additional Detail from JIRA
Votes 0
Component/s Compiler
Labels Bug, 4.1Regression, ClangImporter, CompilerCrash
Assignee None
Priority Medium

md5: b77ea6e63a849340bed99ac129b18b7a

Issue Description:

using NS_SWIFT_NAME in a given initializer causes assertions to fail.

Assertion failed: (Name.getBaseName() == DeclBaseName::createConstructor()), function ConstructorDecl, file /Users/buildnode/jenkins/workspace/oss-swift-package-osx/swift/lib/AST/Decl.cpp, line 5250.
0  swift                    0x000000010afba498 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
1  swift                    0x000000010afb96d7 llvm::sys::RunSignalHandlers() + 39
2  swift                    0x000000010afbab12 SignalHandler(int) + 258
3  libsystem_platform.dylib 0x00007fff7dd09f5a _sigtramp + 26
4  libsystem_platform.dylib 000000000000000000 _sigtramp + 2184143040
5  libsystem_c.dylib        0x00007fff7daa71ae abort + 127
6  libsystem_c.dylib        0x00007fff7da6f1ac basename_r + 0
7  swift                    0x00000001089a71a1 swift::ConstructorDecl::ConstructorDecl(swift::DeclName, swift::SourceLoc, swift::OptionalTypeKind, swift::SourceLoc, bool, swift::SourceLoc, swift::ParamDecl*, swift::ParameterList*, swift::GenericParamList*, swift::DeclContext*) + 225
8  swift                    0x00000001088303ff swift::ConstructorDecl* swift::ClangImporter::Implementation::createDeclWithClangNode<swift::ConstructorDecl, swift::DeclName, swift::SourceLoc, swift::OptionalTypeKind&, swift::SourceLoc, bool, swift::SourceLoc, swift::ParamDecl*&, swift::ParameterList*&, std::nullptr_t, swift::DeclContext*&>(swift::ClangNode, swift::AccessLevel, swift::DeclName&&, swift::SourceLoc&&, swift::OptionalTypeKind&&&, swift::SourceLoc&&, bool&&, swift::SourceLoc&&, swift::ParamDecl*&&&, swift::ParameterList*&&&, std::nullptr_t&&, swift::DeclContext*&&&) + 191
9  swift                    0x000000010882bec9 (anonymous namespace)::SwiftDeclConverter::importConstructor(clang::ObjCMethodDecl const*, swift::DeclContext*, bool, llvm::Optional<swift::CtorInitializerKind>, bool, swift::ObjCSelector, swift::importer::ImportedName, llvm::ArrayRef<clang::ParmVarDecl const*>, bool, bool&) + 5225
10 swift                    0x00000001088298d3 (anonymous namespace)::SwiftDeclConverter::importConstructor(clang::ObjCMethodDecl const*, swift::DeclContext*, bool, llvm::Optional<swift::CtorInitializerKind>, bool) + 851
11 swift                    0x0000000108827da8 (anonymous namespace)::SwiftDeclConverter::importObjCMethodDecl(clang::ObjCMethodDecl const*, swift::DeclContext*, bool, llvm::Optional<(anonymous namespace)::AccessorInfo>) + 104
12 swift                    0x000000010881f352 clang::declvisitor::Base<clang::declvisitor::make_const_ptr, (anonymous namespace)::SwiftDeclConverter, swift::Decl*>::Visit(clang::Decl const*) + 1378
13 swift                    0x000000010881e5dd swift::ClangImporter::Implementation::importDeclImpl(clang::NamedDecl const*, swift::importer::ImportNameVersion, bool&, bool&) + 285
14 swift                    0x0000000108822651 swift::ClangImporter::Implementation::importDeclAndCacheImpl(clang::NamedDecl const*, swift::importer::ImportNameVersion, bool) + 513
15 swift                    0x000000010884925f bool llvm::function_ref<bool (swift::importer::ImportedName, swift::importer::ImportNameVersion)>::callback_fn<swift::ClangImporter::Implementation::insertMembersAndAlternates(clang::NamedDecl const*, llvm::SmallVectorImpl<swift::Decl*>&)::$_3>(long, swift::importer::ImportedName, swift::importer::ImportNameVersion) + 47
16 swift                    0x0000000108855eb3 swift::importer::NameImporter::forEachDistinctImportName(clang::NamedDecl const*, swift::importer::ImportNameVersion, llvm::function_ref<bool (swift::importer::ImportedName, swift::importer::ImportNameVersion)>) + 195
17 swift                    0x0000000108826060 swift::ClangImporter::Implementation::collectMembersToAdd(clang::ObjCContainerDecl const*, swift::Decl*, swift::DeclContext*, llvm::SmallVectorImpl<swift::Decl*>&) + 304
18 swift                    0x00000001088258b2 swift::ClangImporter::Implementation::loadAllMembersOfObjcContainer(swift::Decl*, clang::ObjCContainerDecl const*) + 370
19 swift                    0x000000010882570f swift::ClangImporter::Implementation::loadAllMembers(swift::Decl*, unsigned long long) + 207
20 swift                    0x00000001089ac984 swift::IterableDeclContext::loadAllMembers() const + 100
21 swift                    0x00000001089ac90e swift::IterableDeclContext::getMembers() const + 14
22 swift                    0x00000001086840ac swift::TypeChecker::addImplicitConstructors(swift::NominalTypeDecl*) + 76
23 swift                    0x0000000108684776 swift::TypeChecker::addImplicitConstructors(swift::NominalTypeDecl*) + 1814
24 swift                    0x000000010868ddf9 (anonymous namespace)::DeclChecker::visitClassDecl(swift::ClassDecl*) + 2473
25 swift                    0x000000010867849c (anonymous namespace)::DeclChecker::visit(swift::Decl*) + 684
26 swift                    0x00000001086781e6 swift::TypeChecker::typeCheckDecl(swift::Decl*) + 38
27 swift                    0x0000000108713f18 swift::performTypeChecking(swift::SourceFile&, swift::TopLevelContext&, swift::OptionSet<swift::TypeCheckingFlags, unsigned int>, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) + 1720
28 swift                    0x000000010834aa42 swift::CompilerInstance::parseAndCheckTypes(swift::CompilerInstance::ImplicitImports const&) + 834
29 swift                    0x000000010834a2a8 swift::CompilerInstance::performSema() + 472
30 swift                    0x00000001077b8532 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*, swift::UnifiedStatsReporter*) + 1410
31 swift                    0x00000001077b6f3d swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 2973
32 swift                    0x00000001077725dd main + 2317
33 libdyld.dylib            0x00007fff7d9fb015 start + 1
Stack dump:
0. Program arguments: /Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2018-06-06-a.xctoolchain/usr/bin/swift -frontend -c -primary-file /Users/vmagalhaes/work/SwiftInitConstructorCrash/SwiftInitConstructorCrash/SomeConsumer.swift -emit-module-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/Objects-normal/x86_64/SomeConsumer~partial.swiftmodule -emit-module-doc-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/Objects-normal/x86_64/SomeConsumer~partial.swiftdoc -serialize-diagnostics-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/Objects-normal/x86_64/SomeConsumer.dia -emit-dependencies-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/Objects-normal/x86_64/SomeConsumer.d -emit-reference-dependencies-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/Objects-normal/x86_64/SomeConsumer.swiftdeps -target x86_64-apple-ios12.0-simulator -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.0.sdk -I /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Products/Debug-iphonesimulator -F /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Products/Debug-iphonesimulator -enable-testing -g -module-cache-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/ModuleCache.noindex -swift-version 4.2 -enforce-exclusivity=checked -Onone -D DEBUG -serialize-debugging-options -Xcc -I/Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/SwiftInitConstructorCrash-generated-files.hmap -Xcc -I/Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/SwiftInitConstructorCrash-own-target-headers.hmap -Xcc -I/Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/SwiftInitConstructorCrash-all-target-headers.hmap -Xcc -iquote -Xcc /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/SwiftInitConstructorCrash-project-headers.hmap -Xcc -I/Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/DerivedSources/x86_64 -Xcc -I/Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/Users/vmagalhaes/work/SwiftInitConstructorCrash -import-objc-header /Users/vmagalhaes/work/SwiftInitConstructorCrash/SwiftInitConstructorCrash/SwiftInitConstructorCrash-Bridging-Header.h -pch-output-dir /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/PrecompiledHeaders -parse-as-library -module-name SwiftInitConstructorCrash -o /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Build/Intermediates.noindex/SwiftInitConstructorCrash.build/Debug-iphonesimulator/SwiftInitConstructorCrash.build/Objects-normal/x86_64/SomeConsumer.o -index-store-path /Users/vmagalhaes/Library/Developer/Xcode/DerivedData/SwiftInitConstructorCrash-agiqluydycbhdkaujidmwpqdaeln/Index/DataStore -index-system-modules
1. While type-checking 'SomeConsumer' at /Users/vmagalhaes/work/SwiftInitConstructorCrash/SwiftInitConstructorCrash/SomeConsumer.swift:11:1
2. /Users/vmagalhaes/work/SwiftInitConstructorCrash/SwiftInitConstructorCrash/SomeObjc.h:11:12: loading members for 'SomeObjc'
3. /Users/vmagalhaes/work/SwiftInitConstructorCrash/SwiftInitConstructorCrash/SomeObjc.h:13:1: importing 'SomeObjc::initWithMenuPlaceholder'
error: Abort trap: 6
@huonw
Copy link
Mannequin

huonw mannequin commented Jun 8, 2018

@swift-ci create

@huonw
Copy link
Mannequin

huonw mannequin commented Jun 8, 2018

Command-line reproduction:

// sr-7927.swift
class SomeConsumer: SomeObjc {} 
// sr-7927.h
@import Foundation;

@interface SomeObjc : NSObject

- (instancetype) initWithMenuPlaceholder
NS_SWIFT_NAME(initWithMenuPlaceholder());

@end

swiftc sr-7927.swift -import-objc-header sr-7927.h.

(BTW, I think I forgot to mention this to you in the lab: don't forget to switch your Xcode toolchain back to the default one.)

@belkadan
Copy link
Contributor

belkadan commented Jun 8, 2018

Yeah, I don't think we do anything sensible at all if you rename an initializer to not be an initializer. I might have a dup of this.

@swift-ci
Copy link
Collaborator Author

Comment by Vitor (JIRA)

@huonw Thanks for the help. I'll switch to the xcode embedded toolchain.

@swift-ci
Copy link
Collaborator Author

Comment by Vitor (JIRA)

@huonw Any update on this ?

@huonw
Copy link
Mannequin

huonw mannequin commented Jul 23, 2018

Unfortunately nothing from me. @belkadan did you find a dupe?

@belkadan
Copy link
Contributor

Nope, only the other way around (a method that's not named init but has objc_method_family(init)).

@belkadan
Copy link
Contributor

Note that if you control this code you can still import this as an initializer by using a dummy parameter: init(menuPlaceholder:).

@swift-ci swift-ci transferred this issue from apple/swift-issues Apr 25, 2022
@AnthonyLatsis AnthonyLatsis added the crash Bug: A crash, i.e., an abnormal termination of software label Dec 12, 2022
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 crash Bug: A crash, i.e., an abnormal termination of software regression swift 4.1
Projects
None yet
Development

No branches or pull requests

3 participants