Skip to content

Commit ec70054

Browse files
committed
IRGen: further generalise runtime function generation
This adjusts the runtime function declaration handling to track the owning module for the well known functions. This allows us to ensure that we are able to properly identify if the symbol should be imported or not when building the shared libraries. This will require a subsequent tweak to allow for checking for static library linkage to ensure that we do not mark the symbol as DLLImport when doing static linking.
1 parent 73b184d commit ec70054

File tree

9 files changed

+340
-334
lines changed

9 files changed

+340
-334
lines changed

include/swift/Runtime/RuntimeFnWrappersGen.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ enum class RuntimeAvailability {
3939
/// given name, return types, argument types, attributes and
4040
/// a calling convention.
4141
llvm::Constant *getRuntimeFn(llvm::Module &Module, llvm::Constant *&cache,
42-
char const *name, llvm::CallingConv::ID cc,
42+
const char *ModuleName, char const *FunctionName,
43+
llvm::CallingConv::ID cc,
4344
RuntimeAvailability availability,
4445
llvm::ArrayRef<llvm::Type *> retTypes,
4546
llvm::ArrayRef<llvm::Type *> argTypes,

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 281 additions & 281 deletions
Large diffs are not rendered by default.

lib/IRGen/IRGenModule.cpp

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,17 +1072,17 @@ llvm::FunctionType *swift::getRuntimeFnType(llvm::Module &Module,
10721072
}
10731073

10741074
llvm::Constant *swift::getRuntimeFn(
1075-
llvm::Module &Module, llvm::Constant *&cache, const char *name,
1076-
llvm::CallingConv::ID cc, RuntimeAvailability availability,
1077-
llvm::ArrayRef<llvm::Type *> retTypes,
1075+
llvm::Module &Module, llvm::Constant *&cache, const char *ModuleName,
1076+
const char *FunctionName, llvm::CallingConv::ID cc,
1077+
RuntimeAvailability availability, llvm::ArrayRef<llvm::Type *> retTypes,
10781078
llvm::ArrayRef<llvm::Type *> argTypes, ArrayRef<Attribute::AttrKind> attrs,
10791079
ArrayRef<llvm::MemoryEffects> memEffects, IRGenModule *IGM) {
10801080

10811081
if (cache)
10821082
return cache;
10831083

10841084
bool isWeakLinked = false;
1085-
std::string functionName(name);
1085+
std::string name(FunctionName);
10861086

10871087
switch (availability) {
10881088
case RuntimeAvailability::AlwaysAvailable:
@@ -1093,7 +1093,7 @@ llvm::Constant *swift::getRuntimeFn(
10931093
break;
10941094
}
10951095
case RuntimeAvailability::AvailableByCompatibilityLibrary: {
1096-
functionName.append("50");
1096+
name.append("50");
10971097
break;
10981098
}
10991099
}
@@ -1109,7 +1109,7 @@ llvm::Constant *swift::getRuntimeFn(
11091109
{argTypes.begin(), argTypes.end()},
11101110
/*isVararg*/ false);
11111111

1112-
auto addr = Module.getOrInsertFunction(functionName.c_str(), fnTy).getCallee();
1112+
auto addr = Module.getOrInsertFunction(name.c_str(), fnTy).getCallee();
11131113
auto fnptr = addr;
11141114
// Strip off any bitcast we might have due to this function being declared of
11151115
// a different type previously.
@@ -1126,12 +1126,20 @@ llvm::Constant *swift::getRuntimeFn(
11261126
(fn->getLinkage() == llvm::GlobalValue::ExternalLinkage &&
11271127
fn->isDeclaration());
11281128

1129-
if (!isStandardLibrary(Module) && IsExternal &&
1130-
::useDllStorage(llvm::Triple(Module.getTargetTriple())))
1131-
fn->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
1129+
if (IGM && useDllStorage(IGM->Triple) && IsExternal) {
1130+
bool bIsImported = true;
1131+
if (IGM->getSwiftModule()->getPublicModuleName(true).str() == ModuleName)
1132+
bIsImported = false;
1133+
else if (ModuleDecl *MD = IGM->Context.getModuleByName(ModuleName))
1134+
bIsImported = !MD->isStaticLibrary();
11321135

1133-
if (IsExternal && isWeakLinked
1134-
&& !::useDllStorage(llvm::Triple(Module.getTargetTriple())))
1136+
if (bIsImported)
1137+
fn->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
1138+
}
1139+
1140+
// Windows does not allow multiple definitions of weak symbols.
1141+
if (IsExternal && isWeakLinked &&
1142+
!llvm::Triple(Module.getTargetTriple()).isOSWindows())
11351143
fn->setLinkage(llvm::GlobalValue::ExternalWeakLinkage);
11361144

11371145
llvm::AttrBuilder buildFnAttr(Module.getContext());
@@ -1165,7 +1173,7 @@ llvm::Constant *swift::getRuntimeFn(
11651173
// This mismatch of attributes would be issue when lowering to WebAssembly.
11661174
// While lowering, LLVM counts how many dummy params are necessary to match
11671175
// callee and caller signature. So we need to add them correctly.
1168-
if (functionName == "swift_willThrow") {
1176+
if (name == "swift_willThrow") {
11691177
assert(IGM && "IGM is required for swift_willThrow.");
11701178
fn->addParamAttr(0, Attribute::AttrKind::SwiftSelf);
11711179
if (IGM->ShouldUseSwiftError) {
@@ -1201,10 +1209,10 @@ void IRGenModule::registerRuntimeEffect(ArrayRef<RuntimeEffect> effect,
12011209
#define QUOTE(...) __VA_ARGS__
12021210
#define STR(X) #X
12031211

1204-
#define FUNCTION(ID, NAME, CC, AVAILABILITY, RETURNS, ARGS, ATTRS, EFFECT, \
1205-
MEMEFFECTS) \
1206-
FUNCTION_IMPL(ID, NAME, CC, AVAILABILITY, QUOTE(RETURNS), QUOTE(ARGS), \
1207-
QUOTE(ATTRS), QUOTE(EFFECT), QUOTE(MEMEFFECTS))
1212+
#define FUNCTION(ID, MODULE, NAME, CC, AVAILABILITY, RETURNS, ARGS, ATTRS, \
1213+
EFFECT, MEMEFFECTS) \
1214+
FUNCTION_IMPL(ID, MODULE, NAME, CC, AVAILABILITY, QUOTE(RETURNS), \
1215+
QUOTE(ARGS), QUOTE(ATTRS), QUOTE(EFFECT), QUOTE(MEMEFFECTS))
12081216

12091217
#define RETURNS(...) { __VA_ARGS__ }
12101218
#define ARGS(...) { __VA_ARGS__ }
@@ -1217,12 +1225,12 @@ void IRGenModule::registerRuntimeEffect(ArrayRef<RuntimeEffect> effect,
12171225
#define MEMEFFECTS(...) \
12181226
{ __VA_ARGS__ }
12191227

1220-
#define FUNCTION_IMPL(ID, NAME, CC, AVAILABILITY, RETURNS, ARGS, ATTRS, \
1228+
#define FUNCTION_IMPL(ID, MODULE, NAME, CC, AVAILABILITY, RETURNS, ARGS, ATTRS,\
12211229
EFFECT, MEMEFFECTS) \
12221230
llvm::Constant *IRGenModule::get##ID##Fn() { \
12231231
using namespace RuntimeConstants; \
12241232
registerRuntimeEffect(EFFECT, #NAME); \
1225-
return getRuntimeFn(Module, ID##Fn, #NAME, CC, \
1233+
return getRuntimeFn(Module, ID##Fn, #MODULE, #NAME, CC, \
12261234
AVAILABILITY(this->Context), RETURNS, ARGS, ATTRS, \
12271235
MEMEFFECTS, this); \
12281236
} \
@@ -1289,7 +1297,8 @@ IRGenModule::createStringConstant(StringRef Str, bool willBeRelativelyAddressed,
12891297
if (NAME) \
12901298
return NAME; \
12911299
NAME = Module.getOrInsertGlobal(SYM, FullExistentialTypeMetadataStructTy); \
1292-
if (!getSwiftModule()->isStdlibModule()) \
1300+
if (!getSwiftModule()->isStdlibModule() || \
1301+
!getSwiftModule()->isStaticLibrary()) \
12931302
ApplyIRLinkage(IRLinkage::ExternalImport) \
12941303
.to(cast<llvm::GlobalVariable>(NAME)); \
12951304
return NAME; \

lib/LLVMPasses/ARCEntryPointBuilder.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ class ARCEntryPointBuilder {
221221

222222
llvm::Constant *cache = nullptr;
223223
Retain = getRuntimeFn(
224-
getModule(), cache,
224+
getModule(), cache, "Swift",
225225
isNonAtomic(OrigI) ? "swift_nonatomic_retain" : "swift_retain",
226226
DefaultCC, RuntimeAvailability::AlwaysAvailable, {ObjectPtrTy},
227227
{ObjectPtrTy}, {NoUnwind, FirstParamReturned}, {});
@@ -237,7 +237,7 @@ class ARCEntryPointBuilder {
237237
auto *VoidTy = Type::getVoidTy(getModule().getContext());
238238

239239
llvm::Constant *cache = nullptr;
240-
Release = getRuntimeFn(getModule(), cache,
240+
Release = getRuntimeFn(getModule(), cache, "Swift",
241241
isNonAtomic(OrigI) ? "swift_nonatomic_release"
242242
: "swift_release",
243243
DefaultCC, RuntimeAvailability::AlwaysAvailable,
@@ -274,7 +274,7 @@ class ARCEntryPointBuilder {
274274

275275
llvm::Constant *cache = nullptr;
276276
RetainN = getRuntimeFn(
277-
getModule(), cache,
277+
getModule(), cache, "Swift",
278278
isNonAtomic(OrigI) ? "swift_nonatomic_retain_n" : "swift_retain_n",
279279
DefaultCC, RuntimeAvailability::AlwaysAvailable, {ObjectPtrTy},
280280
{ObjectPtrTy, Int32Ty}, {NoUnwind, FirstParamReturned}, {});
@@ -291,7 +291,7 @@ class ARCEntryPointBuilder {
291291
auto *VoidTy = Type::getVoidTy(getModule().getContext());
292292

293293
llvm::Constant *cache = nullptr;
294-
ReleaseN = getRuntimeFn(getModule(), cache,
294+
ReleaseN = getRuntimeFn(getModule(), cache, "Swift",
295295
isNonAtomic(OrigI) ? "swift_nonatomic_release_n"
296296
: "swift_release_n",
297297
DefaultCC, RuntimeAvailability::AlwaysAvailable,
@@ -310,7 +310,7 @@ class ARCEntryPointBuilder {
310310

311311
llvm::Constant *cache = nullptr;
312312
UnknownObjectRetainN = getRuntimeFn(
313-
getModule(), cache,
313+
getModule(), cache, "Swift",
314314
isNonAtomic(OrigI) ? "swift_nonatomic_unknownObjectRetain_n"
315315
: "swift_unknownObjectRetain_n",
316316
DefaultCC, RuntimeAvailability::AlwaysAvailable, {ObjectPtrTy},
@@ -329,7 +329,7 @@ class ARCEntryPointBuilder {
329329

330330
llvm::Constant *cache = nullptr;
331331
UnknownObjectReleaseN = getRuntimeFn(
332-
getModule(), cache,
332+
getModule(), cache, "Swift",
333333
isNonAtomic(OrigI) ? "swift_nonatomic_unknownObjectRelease_n"
334334
: "swift_unknownObjectRelease_n",
335335
DefaultCC, RuntimeAvailability::AlwaysAvailable, {VoidTy},
@@ -347,7 +347,7 @@ class ARCEntryPointBuilder {
347347

348348
llvm::Constant *cache = nullptr;
349349
BridgeRetainN = getRuntimeFn(
350-
getModule(), cache,
350+
getModule(), cache, "Swift",
351351
isNonAtomic(OrigI) ? "swift_nonatomic_bridgeObjectRetain_n"
352352
: "swift_bridgeObjectRetain_n",
353353
DefaultCC, RuntimeAvailability::AlwaysAvailable, {BridgeObjectPtrTy},
@@ -366,7 +366,7 @@ class ARCEntryPointBuilder {
366366

367367
llvm::Constant *cache = nullptr;
368368
BridgeReleaseN = getRuntimeFn(
369-
getModule(), cache,
369+
getModule(), cache, "Swift",
370370
isNonAtomic(OrigI) ? "swift_nonatomic_bridgeObjectRelease_n"
371371
: "swift_bridgeObjectRelease_n",
372372
DefaultCC, RuntimeAvailability::AlwaysAvailable, {VoidTy},

lib/SILOptimizer/UtilityPasses/Link.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ class SILLinker : public SILModuleTransform {
4949

5050
void linkEmbeddedRuntimeFromStdlib() {
5151
using namespace RuntimeConstants;
52-
#define FUNCTION(ID, NAME, CC, AVAILABILITY, RETURNS, ARGS, ATTRS, EFFECT, \
53-
MEMORY_EFFECTS) \
52+
#define FUNCTION(ID, MODULE, NAME, CC, AVAILABILITY, RETURNS, ARGS, ATTRS, \
53+
EFFECT, MEMORY_EFFECTS) \
5454
linkEmbeddedRuntimeFunctionByName(#NAME, EFFECT); \
55-
if (getModule()->getASTContext().hadError()) \
55+
if (getModule()->getASTContext().hadError()) \
5656
return;
5757

5858
#define RETURNS(...)

lib/Sema/TypeCheckAttr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2443,7 +2443,7 @@ static bool canDeclareSymbolName(StringRef symbol, ModuleDecl *fromModule) {
24432443
// promote this to an error after a while.
24442444

24452445
return llvm::StringSwitch<bool>(symbol)
2446-
#define FUNCTION(_, Name, ...) \
2446+
#define FUNCTION(_, Module, Name, ...) \
24472447
.Case(#Name, false) \
24482448
.Case("_" #Name, false) \
24492449
.Case(#Name "_", false) \

test/IRGen/dllexport.swift

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
// RUN: %swift -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT
2-
// RUN: %swift -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT
1+
// RUN: %swift -target %host_triple -emit-ir -parse-as-library -disable-legacy-type-info -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT
2+
// RUN: %swift -target %host_triple -O -emit-ir -parse-as-library -disable-legacy-type-info -module-name dllexport %s -o - | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT
33

4+
// REQUIRES: OS=windows-msvc
45

5-
// REQUIRES: CODEGENERATOR=ARM
6-
7-
enum Never {}
8-
9-
@_silgen_name("_swift_fatalError")
10-
func fatalError() -> Never
6+
import Swift
117

128
public protocol p {
139
func f()
@@ -25,24 +21,24 @@ open class d {
2521
}
2622
}
2723

28-
// CHECK-DAG: @"$s9dllexport2ciAA1cCvp" = dllexport global ptr null, align 4
24+
// CHECK-DAG: @"$s9dllexport2ciAA1cCvp" = dllexport global ptr null
2925
// CHECK-DAG: @"$s9dllexport1pMp" = dllexport constant
3026
// CHECK-DAG: @"$s9dllexport1cCMn" = dllexport constant
3127
// CHECK-DAG: @"$s9dllexport1cCN" = dllexport alias %swift.type
3228
// CHECK-DAG: @"$s9dllexport1dCN" = dllexport alias %swift.type
33-
// CHECK-DAG-OPT: @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLyyF" = dllexport alias void (), ptr @_swift_dead_method_stub
29+
// CHECK-DAG-OPT: @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLs5NeverOyf" = dllexport alias void (), ptr @_swift_dead_method_stub
3430
// CHECK-DAG-OPT: @"$s9dllexport1dCACycfc" = dllexport alias void (), ptr @_swift_dead_method_stub
3531
// CHECK-DAG-OPT: @"$s9dllexport1cCACycfc" = dllexport alias void (), ptr @_swift_dead_method_stub
3632
// CHECK-DAG-OPT: @"$s9dllexport1cCACycfC" = dllexport alias void (), ptr @_swift_dead_method_stub
3733
// CHECK-DAG: define dllexport swiftcc ptr @"$s9dllexport1cCfd"(ptr{{.*}})
3834
// CHECK-DAG-NO-OPT: define dllexport swiftcc ptr @"$s9dllexport1cCACycfc"(ptr %0)
3935
// CHECK-DAG-NO-OPT: define dllexport swiftcc ptr @"$s9dllexport1cCACycfC"(ptr %0)
4036
// CHECK-DAG: define dllexport swiftcc {{(noundef )?(nonnull )?}}ptr @"$s9dllexport2ciAA1cCvau"()
41-
// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLyyF"(ptr %0)
37+
// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dC1m33_C57BA610BA35E21738CC992438E660E9LLs5NeverOyF"(ptr %0)
4238
// CHECK-DAG-NO-OPT: define dllexport swiftcc void @"$s9dllexport1dCfD"(ptr %0)
4339
// CHECK-DAG: define dllexport swiftcc ptr @"$s9dllexport1dCfd"(ptr{{.*}})
44-
// CHECK-DAG: define dllexport swiftcc %swift.metadata_response @"$s9dllexport1cCMa"(i32 %0)
45-
// CHECK-DAG: define dllexport swiftcc %swift.metadata_response @"$s9dllexport1dCMa"(i32 %0)
40+
// CHECK-DAG: define dllexport swiftcc %swift.metadata_response @"$s9dllexport1cCMa"(i64 %0)
41+
// CHECK-DAG: define dllexport swiftcc %swift.metadata_response @"$s9dllexport1dCMa"(i64 %0)
4642
// CHECK-DAG-NO-OPT: define dllexport swiftcc ptr @"$s9dllexport1dCACycfc"(ptr %0)
4743
// CHECK-DAG-OPT: define dllexport swiftcc void @"$s9dllexport1dCfD"(ptr %0)
4844

test/IRGen/dllimport.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT
2-
// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target thumbv7--windows-itanium -O -emit-ir -parse-as-library -disable-legacy-type-info -parse-stdlib -module-name dllimport -primary-file %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT
1+
// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target %host_triple -emit-ir -parse-as-library -disable-legacy-type-info -module-name dllimport %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-NO-OPT
2+
// RUN: %swift -Xllvm -sil-disable-pass=GenericSpecializer -target %host_triple -O -emit-ir -parse-as-library -disable-legacy-type-info -module-name dllimport -primary-file %s -o - -enable-source-import -I %S | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-OPT
33

4-
// REQUIRES: CODEGENERATOR=ARM
4+
// REQUIRES: OS=windows-msvc
55

66
import dllexport
77

@@ -36,16 +36,16 @@ public func g() {
3636
blackhole({ () -> () in })
3737
}
3838

39-
// CHECK-NO-OPT-DAG: declare dllimport ptr @swift_allocObject(ptr, i32, i32)
39+
// CHECK-NO-OPT-DAG: declare dllimport ptr @swift_allocObject(ptr, i64, i64)
4040
// CHECK-NO-OPT-DAG: declare dllimport void @swift_release(ptr)
4141
// CHECK-NO-OPT-DAG: declare dllimport ptr @swift_retain(ptr returned)
4242
// CHECK-NO-OPT-DAG: @"$s9dllexport1pMp" = external dllimport global %swift.protocol
4343
// CHECK-NO-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport2ciAA1cCvau"()
4444
// CHECK-NO-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport1cCfd"(ptr swiftself)
45-
// CHECK-NO-OPT-DAG: declare dllimport void @swift_deallocClassInstance(ptr, i32, i32)
45+
// CHECK-NO-OPT-DAG: declare dllimport void @swift_deallocClassInstance(ptr, i64, i64)
4646

4747
// CHECK-OPT-DAG: declare dllimport ptr @swift_retain(ptr returned) local_unnamed_addr
4848
// CHECK-OPT-DAG: @"\01__imp_{{_?}}$s9dllexport1pMp" = external externally_initialized constant ptr
4949
// CHECK-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport2ciAA1cCvau"()
50-
// CHECK-OPT-DAG: declare dllimport void @swift_deallocClassInstance(ptr, i32, i32)
50+
// CHECK-OPT-DAG: declare dllimport void @swift_deallocClassInstance(ptr, i64, i64)
5151
// CHECK-OPT-DAG: declare dllimport swiftcc ptr @"$s9dllexport1cCfd"(ptr swiftself)

test/IRGen/enum_value_semantics.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
// RUN: %target-swift-frontend %s -disable-type-layout -disable-generic-metadata-prespecialization -gnone -emit-ir -enable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-objc --check-prefix=CHECK-objc-simulator-%target-is-simulator --check-prefix=CHECK-objc-%target-ptrsize --check-prefix=CHECK-%target-os --check-prefix=CHECK-objc-%target-os
2-
// RUN: %target-swift-frontend %s -disable-type-layout -disable-generic-metadata-prespecialization -gnone -emit-ir -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-native --check-prefix=CHECK-native-%target-ptrsize --check-prefix=CHECK-%target-os --check-prefix=CHECK-native-%target-os
1+
// RUN: %target-swift-frontend %s -Xllvm -type-lowering-disable-verification -disable-type-layout -disable-generic-metadata-prespecialization -gnone -emit-ir -enable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-objc --check-prefix=CHECK-objc-simulator-%target-is-simulator --check-prefix=CHECK-objc-%target-ptrsize --check-prefix=CHECK-%target-os --check-prefix=CHECK-objc-%target-os
2+
// RUN: %target-swift-frontend %s -Xllvm -type-lowering-disable-verification -disable-type-layout -disable-generic-metadata-prespecialization -gnone -emit-ir -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-native --check-prefix=CHECK-native-%target-ptrsize --check-prefix=CHECK-%target-os --check-prefix=CHECK-native-%target-os
33

44
// REQUIRES: CPU=x86_64
55

0 commit comments

Comments
 (0)