diff --git a/lib/ClangImporter/ClangImporter.cpp b/lib/ClangImporter/ClangImporter.cpp index 40a435966ef7f..767afaed57ac6 100644 --- a/lib/ClangImporter/ClangImporter.cpp +++ b/lib/ClangImporter/ClangImporter.cpp @@ -3274,19 +3274,6 @@ static void getImportDecls(ClangModuleUnit *ClangUnit, const clang::Module *M, auto *ID = createImportDecl(Ctx, ClangUnit, ImportedMod, Exported); Results.push_back(ID); } - - if (Ctx.LangOpts.EnableCXXInterop && requiresCPlusPlus(M)) { - // Try to load the Cxx module. We don't use it directly here, but we need to - // make sure that ASTContext has loaded this module. - auto *cxxModule = Ctx.getModuleByIdentifier(Ctx.Id_Cxx); - if (cxxModule) { - ImportPath::Builder builder(Ctx.Id_Cxx); - auto *importCxx = - ImportDecl::create(Ctx, ClangUnit, SourceLoc(), ImportKind::Module, - SourceLoc(), builder.get()); - Results.push_back(importCxx); - } - } } void ClangModuleUnit::getDisplayDecls(SmallVectorImpl &results, bool recursive) const { @@ -3923,6 +3910,17 @@ void ClangModuleUnit::getImportedModulesForLookup( } else { clangModule->getExportedModules(imported); topLevel = clangModule->getTopLevelModule(); + + // If this is a C++ module, implicitly import the Cxx module, which contains + // definitions of Swift protocols that C++ types might conform to, such as + // CxxSequence. + if (owner.SwiftContext.LangOpts.EnableCXXInterop && + requiresCPlusPlus(clangModule) && clangModule->Name != "CxxShim") { + auto *cxxModule = + owner.SwiftContext.getModuleByIdentifier(owner.SwiftContext.Id_Cxx); + if (cxxModule) + imports.push_back({ImportPath::Access(), cxxModule}); + } } if (imported.empty()) { diff --git a/lib/IRGen/GenDecl.cpp b/lib/IRGen/GenDecl.cpp index 0a71a60ae00a6..adcbf126fddb3 100644 --- a/lib/IRGen/GenDecl.cpp +++ b/lib/IRGen/GenDecl.cpp @@ -474,6 +474,10 @@ void IRGenModule::emitSourceFile(SourceFile &SF) { this->addLinkLibrary(LinkLibrary("c++", LibraryKind::Library)); else if (Context.LangOpts.Target.isOSLinux()) this->addLinkLibrary(LinkLibrary("stdc++", LibraryKind::Library)); + + // Do not try to link Cxx with itself. + if (!getSwiftModule()->getName().is("Cxx")) + this->addLinkLibrary(LinkLibrary("swiftCxx", LibraryKind::Library)); } // FIXME: It'd be better to have the driver invocation or build system that diff --git a/test/Interop/Cxx/class/constructors-copy-irgen-android.swift b/test/Interop/Cxx/class/constructors-copy-irgen-android.swift new file mode 100644 index 0000000000000..f1191caae7c3a --- /dev/null +++ b/test/Interop/Cxx/class/constructors-copy-irgen-android.swift @@ -0,0 +1,26 @@ +// Target-specific tests for C++ copy constructor code generation. + +// RUN: %swift -module-name MySwift -target armv7-none-linux-androideabi -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_ARM + +// REQUIRES: OS=linux-android || OS=linux-androideabi + +// REQUIRES: CODEGENERATOR=X86 +// REQUIRES: CODEGENERATOR=ARM + +import Constructors +import TypeClassification + +// ITANIUM_ARM-LABEL: define protected swiftcc void @"$s7MySwift35copyWithUserProvidedCopyConstructorySo03HascdeF0V_ACtACF" +// ITANIUM_ARM-SAME: (%TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG0:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG1:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG2:%.*]]) +// ITANIUM_ARM: [[ARG0_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG0]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_ARM: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_ARM: call %struct.HasUserProvidedCopyConstructor* @_ZN30HasUserProvidedCopyConstructorC2ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG0_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) +// ITANIUM_ARM: [[ARG1_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG1]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_ARM: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_ARM: call %struct.HasUserProvidedCopyConstructor* @_ZN30HasUserProvidedCopyConstructorC2ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG1_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) +// ITANIUM_ARM: ret void + +public func copyWithUserProvidedCopyConstructor(_ x: HasUserProvidedCopyConstructor) + -> (HasUserProvidedCopyConstructor, HasUserProvidedCopyConstructor) { + return (x, x) +} diff --git a/test/Interop/Cxx/class/constructors-copy-irgen-macosx.swift b/test/Interop/Cxx/class/constructors-copy-irgen-macosx.swift new file mode 100644 index 0000000000000..1e89b7298f199 --- /dev/null +++ b/test/Interop/Cxx/class/constructors-copy-irgen-macosx.swift @@ -0,0 +1,27 @@ +// Target-specific tests for C++ copy constructor code generation. + +// RUN: %swift -module-name MySwift -target x86_64-apple-macosx10.9 -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_X64 + +// REQUIRES: OS=macosx + +// REQUIRES: CODEGENERATOR=X86 +// REQUIRES: CODEGENERATOR=ARM + + +import Constructors +import TypeClassification + +// ITANIUM_X64-LABEL: define swiftcc void @"$s7MySwift35copyWithUserProvidedCopyConstructorySo03Has{{cdeF0V_ACtACF|efgH0V_ADtADF}}" +// ITANIUM_X64-SAME: (%TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG0:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG1:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG2:%.*]]) +// ITANIUM_X64: [[ARG0_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG0]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_X64: call void @_ZN30HasUserProvidedCopyConstructorC1ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG0_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) +// ITANIUM_X64: [[ARG1_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG1]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* +// ITANIUM_X64: call void @_ZN30HasUserProvidedCopyConstructorC1ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG1_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) +// ITANIUM_X64: ret void + +public func copyWithUserProvidedCopyConstructor(_ x: HasUserProvidedCopyConstructor) + -> (HasUserProvidedCopyConstructor, HasUserProvidedCopyConstructor) { + return (x, x) +} diff --git a/test/Interop/Cxx/class/constructors-copy-irgen-windows.swift b/test/Interop/Cxx/class/constructors-copy-irgen-windows.swift new file mode 100644 index 0000000000000..6e2319b94401c --- /dev/null +++ b/test/Interop/Cxx/class/constructors-copy-irgen-windows.swift @@ -0,0 +1,27 @@ +// Target-specific tests for C++ copy constructor code generation. + +// RUN: %swift -module-name MySwift -target x86_64-unknown-windows-msvc -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=MICROSOFT_X64 + +// REQUIRES: OS=windows-msvc + +// REQUIRES: CODEGENERATOR=X86 +// REQUIRES: CODEGENERATOR=ARM + + +import Constructors +import TypeClassification + +// MICROSOFT_X64-LABEL: define dllexport swiftcc void @"$s7MySwift35copyWithUserProvidedCopyConstructorySo03Has{{efgH0V_ADtADF|cdeF0V_ACtACF}}" +// MICROSOFT_X64-SAME: (%TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG0:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG1:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG2:%.*]]) +// MICROSOFT_X64: [[ARG0_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG0]] to %struct.HasUserProvidedCopyConstructor* +// MICROSOFT_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* +// MICROSOFT_X64: call %struct.HasUserProvidedCopyConstructor* @"??0HasUserProvidedCopyConstructor@@QEAA@AEBU0@@Z"(%struct.HasUserProvidedCopyConstructor* [[ARG0_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) +// MICROSOFT_X64: [[ARG1_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG1]] to %struct.HasUserProvidedCopyConstructor* +// MICROSOFT_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* +// MICROSOFT_X64: call %struct.HasUserProvidedCopyConstructor* @"??0HasUserProvidedCopyConstructor@@QEAA@AEBU0@@Z"(%struct.HasUserProvidedCopyConstructor* [[ARG1_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) +// MICROSOFT_X64: ret void + +public func copyWithUserProvidedCopyConstructor(_ x: HasUserProvidedCopyConstructor) + -> (HasUserProvidedCopyConstructor, HasUserProvidedCopyConstructor) { + return (x, x) +} diff --git a/test/Interop/Cxx/class/constructors-copy-irgen.swift b/test/Interop/Cxx/class/constructors-copy-irgen.swift deleted file mode 100644 index 260710c7ca44b..0000000000000 --- a/test/Interop/Cxx/class/constructors-copy-irgen.swift +++ /dev/null @@ -1,50 +0,0 @@ -// Target-specific tests for C++ copy constructor code generation. - -// RUN: %swift -module-name Swift -target x86_64-apple-macosx10.9 -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_X64 -// RUN: %swift -module-name Swift -target armv7-none-linux-androideabi -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_ARM -// RUN: %swift -module-name Swift -target x86_64-unknown-windows-msvc -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=MICROSOFT_X64 - -// REQUIRES: CODEGENERATOR=X86 -// REQUIRES: CODEGENERATOR=ARM - -import Constructors -import TypeClassification - -typealias Void = () -struct UnsafePointer { } -struct UnsafeMutablePointer { } - -// ITANIUM_X64-LABEL: define swiftcc void @"$ss35copyWithUserProvidedCopyConstructorySo03HascdeF0V_ACtACF" -// ITANIUM_X64-SAME: (%TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG0:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG1:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG2:%.*]]) -// ITANIUM_X64: [[ARG0_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG0]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_X64: call void @_ZN30HasUserProvidedCopyConstructorC1ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG0_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) -// ITANIUM_X64: [[ARG1_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG1]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_X64: call void @_ZN30HasUserProvidedCopyConstructorC1ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG1_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) -// ITANIUM_X64: ret void - -// ITANIUM_ARM-LABEL: define protected swiftcc void @"$ss35copyWithUserProvidedCopyConstructorySo03HascdeF0V_ACtACF" -// ITANIUM_ARM-SAME: (%TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG0:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG1:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG2:%.*]]) -// ITANIUM_ARM: [[ARG0_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG0]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_ARM: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_ARM: call %struct.HasUserProvidedCopyConstructor* @_ZN30HasUserProvidedCopyConstructorC2ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG0_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) -// ITANIUM_ARM: [[ARG1_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG1]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_ARM: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* -// ITANIUM_ARM: call %struct.HasUserProvidedCopyConstructor* @_ZN30HasUserProvidedCopyConstructorC2ERKS_(%struct.HasUserProvidedCopyConstructor* [[ARG1_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) -// ITANIUM_ARM: ret void - -// MICROSOFT_X64-LABEL: define dllexport swiftcc void @"$ss35copyWithUserProvidedCopyConstructorySo03HascdeF0V_ACtACF" -// MICROSOFT_X64-SAME: (%TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG0:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG1:%.*]], %TSo30HasUserProvidedCopyConstructorV* {{.*}}[[ARG2:%.*]]) -// MICROSOFT_X64: [[ARG0_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG0]] to %struct.HasUserProvidedCopyConstructor* -// MICROSOFT_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* -// MICROSOFT_X64: call %struct.HasUserProvidedCopyConstructor* @"??0HasUserProvidedCopyConstructor@@QEAA@AEBU0@@Z"(%struct.HasUserProvidedCopyConstructor* [[ARG0_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) -// MICROSOFT_X64: [[ARG1_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG1]] to %struct.HasUserProvidedCopyConstructor* -// MICROSOFT_X64: [[ARG2_AS_STRUCT:%.*]] = bitcast %TSo30HasUserProvidedCopyConstructorV* [[ARG2]] to %struct.HasUserProvidedCopyConstructor* -// MICROSOFT_X64: call %struct.HasUserProvidedCopyConstructor* @"??0HasUserProvidedCopyConstructor@@QEAA@AEBU0@@Z"(%struct.HasUserProvidedCopyConstructor* [[ARG1_AS_STRUCT]], %struct.HasUserProvidedCopyConstructor* [[ARG2_AS_STRUCT]]) -// MICROSOFT_X64: ret void - -public func copyWithUserProvidedCopyConstructor(_ x: HasUserProvidedCopyConstructor) - -> (HasUserProvidedCopyConstructor, HasUserProvidedCopyConstructor) { - return (x, x) -} diff --git a/test/Interop/Cxx/class/constructors-irgen-android.swift b/test/Interop/Cxx/class/constructors-irgen-android.swift new file mode 100644 index 0000000000000..b9fba6fe405e6 --- /dev/null +++ b/test/Interop/Cxx/class/constructors-irgen-android.swift @@ -0,0 +1,57 @@ +// Target-specific tests for C++ constructor call code generation. + +// RUN: %swift -module-name MySwift -target armv7-unknown-linux-androideabi -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_ARM + +// REQUIRES: OS=linux-android || OS=linux-androideabi + +// REQUIRES: CODEGENERATOR=X86 +// REQUIRES: CODEGENERATOR=ARM + +import Constructors +import TypeClassification + +public func createHasVirtualBase() -> HasVirtualBase { + // ITANIUM_ARM: define protected swiftcc void @"$s7MySwift20createHasVirtualBaseSo0bcD0VyF"(%TSo14HasVirtualBaseV* noalias nocapture sret({{.*}}) %0) + // To verify that the thunk is inlined, make sure there's no intervening + // `define`, i.e. the call to the C++ constructor happens in + // createHasVirtualBase(), not some later function. + // ITANIUM_ARM-NOT: define + // Note `this` return type. + // ITANIUM_ARM: call %struct.HasVirtualBase* @_ZN14HasVirtualBaseC1E7ArgType(%struct.HasVirtualBase* %{{[0-9]+}}, [1 x i32] %{{[0-9]+}}) + return HasVirtualBase(ArgType()) +} + +public func createImplicitDefaultConstructor() -> ImplicitDefaultConstructor { + // ITANIUM_ARM: define protected swiftcc i32 @"$s7MySwift32createImplicitDefaultConstructorSo0bcD0VyF"() + // ITANIUM_ARM-NOT: define + // Note `this` return type. + // ITANIUM_ARM: call %struct.ImplicitDefaultConstructor* @_ZN26ImplicitDefaultConstructorC2Ev(%struct.ImplicitDefaultConstructor* %{{[0-9]+}}) + return ImplicitDefaultConstructor() +} + +public func createStructWithSubobjectCopyConstructorAndValue() { + // ITANIUM_ARM-LABEL: define protected swiftcc void @"$s7MySwift48createStructWithSubobjectCopyConstructorAndValueyyF"() + // ITANIUM_ARM: [[MEMBER:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV + // ITANIUM_ARM: [[OBJ:%.*]] = alloca %TSo42StructWithSubobjectCopyConstructorAndValueV + // ITANIUM_ARM: [[TMP:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV + // ITANIUM_ARM: [[MEMBER_AS_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* + // ITANIUM_ARM: call %struct.StructWithCopyConstructorAndValue* @_ZN33StructWithCopyConstructorAndValueC2Ev(%struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT]]) + // ITANIUM_ARM: [[TMP_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[TMP]] to %struct.StructWithCopyConstructorAndValue* + // ITANIUM_ARM: [[MEMBER_AS_STRUCT_2:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* + // ITANIUM_ARM: call %struct.StructWithCopyConstructorAndValue* @_ZN33StructWithCopyConstructorAndValueC2ERKS_(%struct.StructWithCopyConstructorAndValue* [[TMP_STRUCT]], %struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT_2]]) + // ITANIUM_ARM: ret void + let member = StructWithCopyConstructorAndValue() + let obj = StructWithSubobjectCopyConstructorAndValue(member: member) +} + +public func createTemplatedConstructor() { + // ITANIUM_ARM-LABEL: define protected swiftcc void @"$s7MySwift26createTemplatedConstructoryyF"() + // ITANIUM_ARM: [[OBJ:%.*]] = alloca %TSo20TemplatedConstructorV + // ITANIUM_ARM: [[IVAL:%.*]] = load [1 x i32], [1 x i32]* + // ITANIUM_ARM: [[OBJ_AS_STRUCT:%.*]] = bitcast %TSo20TemplatedConstructorV* [[OBJ]] to %struct.TemplatedConstructor* + // ITANIUM_ARM: call %struct.TemplatedConstructor* @_ZN20TemplatedConstructorC2I7ArgTypeEET_(%struct.TemplatedConstructor* [[OBJ_AS_STRUCT]], [1 x i32] [[IVAL]]) + // ITANIUM_ARM: ret void + + // ITANIUM_ARM-LABEL: define {{.*}}%struct.TemplatedConstructor* @_ZN20TemplatedConstructorC2I7ArgTypeEET_(%struct.TemplatedConstructor* {{.*}}, [1 x i32] {{.*}}) + let templated = TemplatedConstructor(ArgType()) +} diff --git a/test/Interop/Cxx/class/constructors-irgen-macosx.swift b/test/Interop/Cxx/class/constructors-irgen-macosx.swift new file mode 100644 index 0000000000000..a06a051935420 --- /dev/null +++ b/test/Interop/Cxx/class/constructors-irgen-macosx.swift @@ -0,0 +1,52 @@ +// Target-specific tests for C++ constructor call code generation. + +// RUN: %swift -module-name MySwift -target x86_64-apple-macosx10.9 -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_X64 + +// REQUIRES: OS=macosx + +// REQUIRES: CODEGENERATOR=X86 +// REQUIRES: CODEGENERATOR=ARM + +import Constructors +import TypeClassification + +public func createHasVirtualBase() -> HasVirtualBase { + // ITANIUM_X64: define swiftcc void @"$s7MySwift20createHasVirtualBaseSo0deF0VyF"(%TSo14HasVirtualBaseV* noalias nocapture sret({{.*}}) %0) + // ITANIUM_X64-NOT: define + // ITANIUM_X64: call void @_ZN14HasVirtualBaseC1E7ArgType(%struct.HasVirtualBase* %{{[0-9]+}}, i32 %{{[0-9]+}}) + return HasVirtualBase(ArgType()) +} + +public func createImplicitDefaultConstructor() -> ImplicitDefaultConstructor { + // ITANIUM_X64: define swiftcc i32 @"$s7MySwift32createImplicitDefaultConstructorSo0deF0VyF"() + // ITANIUM_X64-NOT: define + // ITANIUM_X64: call void @_ZN26ImplicitDefaultConstructorC1Ev(%struct.ImplicitDefaultConstructor* %{{[0-9]+}}) + return ImplicitDefaultConstructor() +} + +public func createStructWithSubobjectCopyConstructorAndValue() { + // ITANIUM_X64-LABEL: define swiftcc void @"$s7MySwift48createStructWithSubobjectCopyConstructorAndValueyyF"() + // ITANIUM_X64: [[MEMBER:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV + // ITANIUM_X64: [[OBJ:%.*]] = alloca %TSo42StructWithSubobjectCopyConstructorAndValueV + // ITANIUM_X64: [[TMP:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV + // ITANIUM_X64: [[MEMBER_AS_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* + // ITANIUM_X64: void @_ZN33StructWithCopyConstructorAndValueC1Ev(%struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT]]) + // ITANIUM_X64: [[TMP_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[TMP]] to %struct.StructWithCopyConstructorAndValue* + // ITANIUM_X64: [[MEMBER_AS_STRUCT_2:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* + // ITANIUM_X64: call void @_ZN33StructWithCopyConstructorAndValueC1ERKS_(%struct.StructWithCopyConstructorAndValue* [[TMP_STRUCT]], %struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT_2]]) + // ITANIUM_X64: ret void + let member = StructWithCopyConstructorAndValue() + let obj = StructWithSubobjectCopyConstructorAndValue(member: member) +} + +public func createTemplatedConstructor() { + // ITANIUM_X64-LABEL: define swiftcc void @"$s7MySwift26createTemplatedConstructoryyF"() + // ITANIUM_X64: [[OBJ:%.*]] = alloca %TSo20TemplatedConstructorV + // ITANIUM_X64: [[IVAL:%.*]] = load i32, i32* + // ITANIUM_X64: [[OBJ_AS_STRUCT:%.*]] = bitcast %TSo20TemplatedConstructorV* [[OBJ]] to %struct.TemplatedConstructor* + // ITANIUM_X64: call void @_ZN20TemplatedConstructorC1I7ArgTypeEET_(%struct.TemplatedConstructor* [[OBJ_AS_STRUCT]], i32 [[IVAL]]) + // ITANIUM_X64: ret void + + // ITANIUM_X64-LABEL: define {{.*}}void @_ZN20TemplatedConstructorC1I7ArgTypeEET_(%struct.TemplatedConstructor* {{.*}}, i32 {{.*}}) + let templated = TemplatedConstructor(ArgType()) +} diff --git a/test/Interop/Cxx/class/constructors-irgen-windows.swift b/test/Interop/Cxx/class/constructors-irgen-windows.swift new file mode 100644 index 0000000000000..2c22c0b00debf --- /dev/null +++ b/test/Interop/Cxx/class/constructors-irgen-windows.swift @@ -0,0 +1,54 @@ +// Target-specific tests for C++ constructor call code generation. + +// RUN: %swift -module-name MySwift -target x86_64-unknown-windows-msvc -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=MICROSOFT_X64 + +// REQUIRES: OS=windows-msvc + +// REQUIRES: CODEGENERATOR=X86 +// REQUIRES: CODEGENERATOR=ARM + +import Constructors +import TypeClassification + +public func createHasVirtualBase() -> HasVirtualBase { + // MICROSOFT_X64: define dllexport swiftcc void @"$s7MySwift20createHasVirtualBaseSo0{{bcD0VyF|deF0VyF}}"(%TSo14HasVirtualBaseV* noalias nocapture sret({{.*}}) %0) + // MICROSOFT_X64-NOT: define + // Note `this` return type and implicit "most derived" argument. + // MICROSOFT_X64: call %struct.HasVirtualBase* @"??0HasVirtualBase@@QEAA@UArgType@@@Z"(%struct.HasVirtualBase* %{{[0-9]+}}, i32 %{{[0-9]+}}, i32 1) + return HasVirtualBase(ArgType()) +} + +public func createImplicitDefaultConstructor() -> ImplicitDefaultConstructor { + // MICROSOFT_X64: define dllexport swiftcc i32 @"$s7MySwift32createImplicitDefaultConstructorSo0{{bcD0VyF|deF0VyF}}"() + // MICROSOFT_X64-NOT: define + // Note `this` return type but no implicit "most derived" argument. + // MICROSOFT_X64: call %struct.ImplicitDefaultConstructor* @"??0ImplicitDefaultConstructor@@QEAA@XZ"(%struct.ImplicitDefaultConstructor* %{{[0-9]+}}) + return ImplicitDefaultConstructor() +} + +public func createStructWithSubobjectCopyConstructorAndValue() { + // MICROSOFT_X64-LABEL: define dllexport swiftcc void @"$s7MySwift48createStructWithSubobjectCopyConstructorAndValueyyF"() + // MICROSOFT_X64: [[MEMBER:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV + // MICROSOFT_X64: [[OBJ:%.*]] = alloca %TSo42StructWithSubobjectCopyConstructorAndValueV + // MICROSOFT_X64: [[TMP:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV + // MICROSOFT_X64: [[MEMBER_AS_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* + // MICROSOFT_X64: call %struct.StructWithCopyConstructorAndValue* @"??0StructWithCopyConstructorAndValue@@QEAA@XZ"(%struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT]]) + // MICROSOFT_X64: [[TMP_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[TMP]] to %struct.StructWithCopyConstructorAndValue* + // MICROSOFT_X64: [[MEMBER_AS_STRUCT_2:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* + // MICROSOFT_X64: call %struct.StructWithCopyConstructorAndValue* @"??0StructWithCopyConstructorAndValue@@QEAA@AEBU0@@Z"(%struct.StructWithCopyConstructorAndValue* [[TMP_STRUCT]], %struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT_2]]) + // MICROSOFT_X64: ret void + let member = StructWithCopyConstructorAndValue() + let obj = StructWithSubobjectCopyConstructorAndValue(member: member) +} + +public func createTemplatedConstructor() { + // MICROSOFT_X64-LABEL: define dllexport swiftcc void @"$s7MySwift26createTemplatedConstructoryyF"() + // MICROSOFT_X64: [[OBJ:%.*]] = alloca %TSo20TemplatedConstructorV + // MICROSOFT_X64: [[IVAL:%.*]] = load i32, i32* + // MICROSOFT_X64: [[OBJ_AS_STRUCT:%.*]] = bitcast %TSo20TemplatedConstructorV* [[OBJ]] to %struct.TemplatedConstructor* + // MICROSOFT_X64: call %struct.TemplatedConstructor* @"??$?0UArgType@@@TemplatedConstructor@@QEAA@UArgType@@@Z"(%struct.TemplatedConstructor* [[OBJ_AS_STRUCT]], i32 [[IVAL]]) + // MICROSOFT_X64: ret void + + // MICROSOFT_X64-LABEL: define {{.*}}%struct.TemplatedConstructor* @"??$?0UArgType@@@TemplatedConstructor@@QEAA@UArgType@@@Z"(%struct.TemplatedConstructor* {{.*}}, i32 {{.*}}) + let templated = TemplatedConstructor(ArgType()) +} diff --git a/test/Interop/Cxx/class/constructors-irgen.swift b/test/Interop/Cxx/class/constructors-irgen.swift deleted file mode 100644 index a0b37f73b2211..0000000000000 --- a/test/Interop/Cxx/class/constructors-irgen.swift +++ /dev/null @@ -1,122 +0,0 @@ -// Target-specific tests for C++ constructor call code generation. - -// RUN: %swift -module-name Swift -target x86_64-apple-macosx10.9 -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_X64 -// RUN: %swift -module-name Swift -target armv7-unknown-linux-androideabi -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=ITANIUM_ARM -// RUN: %swift -module-name Swift -target x86_64-unknown-windows-msvc -dump-clang-diagnostics -I %S/Inputs -enable-experimental-cxx-interop -emit-ir %s -parse-stdlib -parse-as-library -disable-legacy-type-info | %FileCheck %s -check-prefix=MICROSOFT_X64 - -// REQUIRES: CODEGENERATOR=X86 -// REQUIRES: CODEGENERATOR=ARM - -import Constructors -import TypeClassification - -typealias Void = () -struct UnsafePointer { } -struct UnsafeMutablePointer { } - -struct Int { } -struct UInt { } - -public func createHasVirtualBase() -> HasVirtualBase { - // ITANIUM_X64: define swiftcc void @"$ss20createHasVirtualBaseSo0bcD0VyF"(%TSo14HasVirtualBaseV* noalias nocapture sret({{.*}}) %0) - // ITANIUM_X64-NOT: define - // ITANIUM_X64: call void @_ZN14HasVirtualBaseC1E7ArgType(%struct.HasVirtualBase* %{{[0-9]+}}, i32 %{{[0-9]+}}) - // - // ITANIUM_ARM: define protected swiftcc void @"$ss20createHasVirtualBaseSo0bcD0VyF"(%TSo14HasVirtualBaseV* noalias nocapture sret({{.*}}) %0) - // To verify that the thunk is inlined, make sure there's no intervening - // `define`, i.e. the call to the C++ constructor happens in - // createHasVirtualBase(), not some later function. - // ITANIUM_ARM-NOT: define - // Note `this` return type. - // ITANIUM_ARM: call %struct.HasVirtualBase* @_ZN14HasVirtualBaseC1E7ArgType(%struct.HasVirtualBase* %{{[0-9]+}}, [1 x i32] %{{[0-9]+}}) - // - // MICROSOFT_X64: define dllexport swiftcc void @"$ss20createHasVirtualBaseSo0bcD0VyF"(%TSo14HasVirtualBaseV* noalias nocapture sret({{.*}}) %0) - // MICROSOFT_X64-NOT: define - // Note `this` return type and implicit "most derived" argument. - // MICROSOFT_X64: call %struct.HasVirtualBase* @"??0HasVirtualBase@@QEAA@UArgType@@@Z"(%struct.HasVirtualBase* %{{[0-9]+}}, i32 %{{[0-9]+}}, i32 1) - return HasVirtualBase(ArgType()) -} - -public func createImplicitDefaultConstructor() -> ImplicitDefaultConstructor { - // ITANIUM_X64: define swiftcc i32 @"$ss32createImplicitDefaultConstructorSo0bcD0VyF"() - // ITANIUM_X64-NOT: define - // ITANIUM_X64: call void @_ZN26ImplicitDefaultConstructorC1Ev(%struct.ImplicitDefaultConstructor* %{{[0-9]+}}) - // - // ITANIUM_ARM: define protected swiftcc i32 @"$ss32createImplicitDefaultConstructorSo0bcD0VyF"() - // ITANIUM_ARM-NOT: define - // Note `this` return type. - // ITANIUM_ARM: call %struct.ImplicitDefaultConstructor* @_ZN26ImplicitDefaultConstructorC2Ev(%struct.ImplicitDefaultConstructor* %{{[0-9]+}}) - // - // MICROSOFT_X64: define dllexport swiftcc i32 @"$ss32createImplicitDefaultConstructorSo0bcD0VyF"() - // MICROSOFT_X64-NOT: define - // Note `this` return type but no implicit "most derived" argument. - // MICROSOFT_X64: call %struct.ImplicitDefaultConstructor* @"??0ImplicitDefaultConstructor@@QEAA@XZ"(%struct.ImplicitDefaultConstructor* %{{[0-9]+}}) - return ImplicitDefaultConstructor() -} - -public func createStructWithSubobjectCopyConstructorAndValue() { - // ITANIUM_X64-LABEL: define swiftcc void @"$ss48createStructWithSubobjectCopyConstructorAndValueyyF"() - // ITANIUM_X64: [[MEMBER:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV - // ITANIUM_X64: [[OBJ:%.*]] = alloca %TSo42StructWithSubobjectCopyConstructorAndValueV - // ITANIUM_X64: [[TMP:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV - // ITANIUM_X64: [[MEMBER_AS_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* - // ITANIUM_X64: void @_ZN33StructWithCopyConstructorAndValueC1Ev(%struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT]]) - // ITANIUM_X64: [[TMP_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[TMP]] to %struct.StructWithCopyConstructorAndValue* - // ITANIUM_X64: [[MEMBER_AS_STRUCT_2:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* - // ITANIUM_X64: call void @_ZN33StructWithCopyConstructorAndValueC1ERKS_(%struct.StructWithCopyConstructorAndValue* [[TMP_STRUCT]], %struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT_2]]) - // ITANIUM_X64: ret void - - // ITANIUM_ARM-LABEL: define protected swiftcc void @"$ss48createStructWithSubobjectCopyConstructorAndValueyyF"() - // ITANIUM_ARM: [[MEMBER:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV - // ITANIUM_ARM: [[OBJ:%.*]] = alloca %TSo42StructWithSubobjectCopyConstructorAndValueV - // ITANIUM_ARM: [[TMP:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV - // ITANIUM_ARM: [[MEMBER_AS_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* - // ITANIUM_ARM: call %struct.StructWithCopyConstructorAndValue* @_ZN33StructWithCopyConstructorAndValueC2Ev(%struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT]]) - // ITANIUM_ARM: [[TMP_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[TMP]] to %struct.StructWithCopyConstructorAndValue* - // ITANIUM_ARM: [[MEMBER_AS_STRUCT_2:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* - // ITANIUM_ARM: call %struct.StructWithCopyConstructorAndValue* @_ZN33StructWithCopyConstructorAndValueC2ERKS_(%struct.StructWithCopyConstructorAndValue* [[TMP_STRUCT]], %struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT_2]]) - // ITANIUM_ARM: ret void - - // MICROSOFT_X64-LABEL: define dllexport swiftcc void @"$ss48createStructWithSubobjectCopyConstructorAndValueyyF"() - // MICROSOFT_X64: [[MEMBER:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV - // MICROSOFT_X64: [[OBJ:%.*]] = alloca %TSo42StructWithSubobjectCopyConstructorAndValueV - // MICROSOFT_X64: [[TMP:%.*]] = alloca %TSo33StructWithCopyConstructorAndValueV - // MICROSOFT_X64: [[MEMBER_AS_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* - // MICROSOFT_X64: call %struct.StructWithCopyConstructorAndValue* @"??0StructWithCopyConstructorAndValue@@QEAA@XZ"(%struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT]]) - // MICROSOFT_X64: [[TMP_STRUCT:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[TMP]] to %struct.StructWithCopyConstructorAndValue* - // MICROSOFT_X64: [[MEMBER_AS_STRUCT_2:%.*]] = bitcast %TSo33StructWithCopyConstructorAndValueV* [[MEMBER]] to %struct.StructWithCopyConstructorAndValue* - // MICROSOFT_X64: call %struct.StructWithCopyConstructorAndValue* @"??0StructWithCopyConstructorAndValue@@QEAA@AEBU0@@Z"(%struct.StructWithCopyConstructorAndValue* [[TMP_STRUCT]], %struct.StructWithCopyConstructorAndValue* [[MEMBER_AS_STRUCT_2]]) - // MICROSOFT_X64: ret void - let member = StructWithCopyConstructorAndValue() - let obj = StructWithSubobjectCopyConstructorAndValue(member: member) -} - -public func createTemplatedConstructor() { - // ITANIUM_X64-LABEL: define swiftcc void @"$ss26createTemplatedConstructoryyF"() - // ITANIUM_X64: [[OBJ:%.*]] = alloca %TSo20TemplatedConstructorV - // ITANIUM_X64: [[IVAL:%.*]] = load i32, i32* - // ITANIUM_X64: [[OBJ_AS_STRUCT:%.*]] = bitcast %TSo20TemplatedConstructorV* [[OBJ]] to %struct.TemplatedConstructor* - // ITANIUM_X64: call void @_ZN20TemplatedConstructorC1I7ArgTypeEET_(%struct.TemplatedConstructor* [[OBJ_AS_STRUCT]], i32 [[IVAL]]) - // ITANIUM_X64: ret void - - // ITANIUM_X64-LABEL: define {{.*}}void @_ZN20TemplatedConstructorC1I7ArgTypeEET_(%struct.TemplatedConstructor* {{.*}}, i32 {{.*}}) - - // ITANIUM_ARM-LABEL: define protected swiftcc void @"$ss26createTemplatedConstructoryyF"() - // ITANIUM_ARM: [[OBJ:%.*]] = alloca %TSo20TemplatedConstructorV - // ITANIUM_ARM: [[IVAL:%.*]] = load [1 x i32], [1 x i32]* - // ITANIUM_ARM: [[OBJ_AS_STRUCT:%.*]] = bitcast %TSo20TemplatedConstructorV* [[OBJ]] to %struct.TemplatedConstructor* - // ITANIUM_ARM: call %struct.TemplatedConstructor* @_ZN20TemplatedConstructorC2I7ArgTypeEET_(%struct.TemplatedConstructor* [[OBJ_AS_STRUCT]], [1 x i32] [[IVAL]]) - // ITANIUM_ARM: ret void - - // ITANIUM_ARM-LABEL: define {{.*}}%struct.TemplatedConstructor* @_ZN20TemplatedConstructorC2I7ArgTypeEET_(%struct.TemplatedConstructor* {{.*}}, [1 x i32] {{.*}}) - - // MICROSOFT_X64-LABEL: define dllexport swiftcc void @"$ss26createTemplatedConstructoryyF"() - // MICROSOFT_X64: [[OBJ:%.*]] = alloca %TSo20TemplatedConstructorV - // MICROSOFT_X64: [[IVAL:%.*]] = load i32, i32* - // MICROSOFT_X64: [[OBJ_AS_STRUCT:%.*]] = bitcast %TSo20TemplatedConstructorV* [[OBJ]] to %struct.TemplatedConstructor* - // MICROSOFT_X64: call %struct.TemplatedConstructor* @"??$?0UArgType@@@TemplatedConstructor@@QEAA@UArgType@@@Z"(%struct.TemplatedConstructor* [[OBJ_AS_STRUCT]], i32 [[IVAL]]) - // MICROSOFT_X64: ret void - - // MICROSOFT_X64-LABEL: define {{.*}}%struct.TemplatedConstructor* @"??$?0UArgType@@@TemplatedConstructor@@QEAA@UArgType@@@Z"(%struct.TemplatedConstructor* {{.*}}, i32 {{.*}}) - let templated = TemplatedConstructor(ArgType()) -} diff --git a/test/Interop/Cxx/stdlib/overlay/custom-iterator-module-interface.swift b/test/Interop/Cxx/stdlib/overlay/custom-iterator-module-interface.swift index c4dfb367fdf9c..16a9758b26f15 100644 --- a/test/Interop/Cxx/stdlib/overlay/custom-iterator-module-interface.swift +++ b/test/Interop/Cxx/stdlib/overlay/custom-iterator-module-interface.swift @@ -1,7 +1,5 @@ // RUN: %target-swift-ide-test -print-module -module-to-print=CustomSequence -source-filename=x -I %S/Inputs -enable-experimental-cxx-interop -module-cache-path %t | %FileCheck %s -// CHECK: import Cxx - // CHECK: struct ConstIterator : UnsafeCxxInputIterator { // CHECK: var pointee: Int32 { get } // CHECK: func successor() -> ConstIterator diff --git a/test/Interop/Cxx/stdlib/overlay/custom-sequence-module-interface.swift b/test/Interop/Cxx/stdlib/overlay/custom-sequence-module-interface.swift index 3cb663b63bb11..e12bb68416c4b 100644 --- a/test/Interop/Cxx/stdlib/overlay/custom-sequence-module-interface.swift +++ b/test/Interop/Cxx/stdlib/overlay/custom-sequence-module-interface.swift @@ -1,7 +1,5 @@ // RUN: %target-swift-ide-test -print-module -module-to-print=CustomSequence -source-filename=x -I %S/Inputs -enable-experimental-cxx-interop -module-cache-path %t | %FileCheck %s -// CHECK: import Cxx - // CHECK: struct SimpleSequence : CxxSequence { // CHECK: typealias Element = ConstIterator.Pointee // CHECK: typealias Iterator = CxxIterator diff --git a/test/Interop/Cxx/stdlib/overlay/custom-sequence-typechecker.swift b/test/Interop/Cxx/stdlib/overlay/custom-sequence-typechecker.swift index cfd6ef48ebc47..6cbe7ac41d58c 100644 --- a/test/Interop/Cxx/stdlib/overlay/custom-sequence-typechecker.swift +++ b/test/Interop/Cxx/stdlib/overlay/custom-sequence-typechecker.swift @@ -1,7 +1,6 @@ // RUN: %target-typecheck-verify-swift -I %S/Inputs -enable-experimental-cxx-interop import CustomSequence -import Cxx func checkIntSequence(_ seq: S) where S: Sequence, S.Element == Int32 { let contains = seq.contains(where: { $0 == 3 }) diff --git a/test/Interop/Cxx/stdlib/overlay/custom-sequence.swift b/test/Interop/Cxx/stdlib/overlay/custom-sequence.swift index 66d5700a23fb4..4a3b0f3ebb497 100644 --- a/test/Interop/Cxx/stdlib/overlay/custom-sequence.swift +++ b/test/Interop/Cxx/stdlib/overlay/custom-sequence.swift @@ -5,7 +5,6 @@ import StdlibUnittest import CustomSequence -import Cxx var CxxSequenceTestSuite = TestSuite("CxxSequence")