From add98add6acbb186c0515effe092981661cca4fa Mon Sep 17 00:00:00 2001 From: Arnold Schwaighofer Date: Thu, 21 Mar 2019 10:05:04 -0700 Subject: [PATCH 1/2] IRGen: The call to the dynamic implementation is a tail call --- lib/IRGen/GenDecl.cpp | 1 + test/IRGen/dynamic_replaceable.sil | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/IRGen/GenDecl.cpp b/lib/IRGen/GenDecl.cpp index 0a6b6f59397..08f14284159 100644 --- a/lib/IRGen/GenDecl.cpp +++ b/lib/IRGen/GenDecl.cpp @@ -2057,6 +2057,7 @@ static void emitDynamicallyReplaceableThunk(IRGenModule &IGM, forwardedArgs.push_back(&arg); auto *Res = B.CreateCall(FunctionPointer(typeFnPtr, signature), forwardedArgs); + Res->setTailCall(); if (implFn->getReturnType()->isVoidTy()) B.CreateRetVoid(); else diff --git a/test/IRGen/dynamic_replaceable.sil b/test/IRGen/dynamic_replaceable.sil index 4aefa52e312..16b74056304 100644 --- a/test/IRGen/dynamic_replaceable.sil +++ b/test/IRGen/dynamic_replaceable.sil @@ -25,7 +25,7 @@ // CHECK-NEXT: entry: // CHECK-NEXT: [[FUN_PTR:%.*]] = load i8*, i8** getelementptr inbounds (%swift.dyn_repl_link_entry, %swift.dyn_repl_link_entry* @test_dynamically_replaceableTX, i32 0, i32 0) // CHECK-NEXT: [[TYPED_PTR:%.*]] = bitcast i8* [[FUN_PTR]] to void ()* -// CHECK-NEXT: call swiftcc void [[TYPED_PTR]]() +// CHECK-NEXT: tail call swiftcc void [[TYPED_PTR]]() // CHECK-NEXT: ret void // CHECK-NEXT: } From b60d54ac620c07109ac8aced2833ad48a3bb3dc7 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 22 Mar 2019 15:13:30 -0700 Subject: [PATCH 2/2] test: repair Serialization.autolinking-inlineable-inferred on Windows Windows now force links against legacy_stdio_definitions due to the UCRT refactoring requiring it. This broke this test, adjust it for that. --- .../autolinking-inlinable-inferred.swift | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/test/Serialization/autolinking-inlinable-inferred.swift b/test/Serialization/autolinking-inlinable-inferred.swift index 0e64b63c6f7..40fe651b5c4 100644 --- a/test/Serialization/autolinking-inlinable-inferred.swift +++ b/test/Serialization/autolinking-inlinable-inferred.swift @@ -7,7 +7,7 @@ // RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_indirect.swift -emit-module-path %t/autolinking_indirect.swiftmodule -module-link-name autolinking_indirect -I %t -swift-version 4 // RUN: %target-swift-frontend -emit-module %S/Inputs/autolinking_module_inferred.swift -emit-module-path %t/autolinking_module_inferred.swiftmodule -module-link-name autolinking_module_inferred -I %t -swift-version 4 -// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop | %FileCheck %s +// RUN: %target-swift-frontend -emit-ir %s -I %t -swift-version 4 -enable-objc-interop | %FileCheck %s -check-prefix CHECK -check-prefix CHECK-%target-os // Linux uses a different autolinking mechanism, based on // swift-autolink-extract. This file tests the Darwin mechanism. @@ -20,12 +20,24 @@ import autolinking_module_inferred bfunc() -// CHECK: !llvm.linker.options = !{[[MODULE:![0-9]+]], [[PUBLIC:![0-9]+]], [[SWIFTONONESUPPORT:![0-9]+]], [[SWIFTCORE:![0-9]+]], [[PRIVATE:![0-9]+]], [[OTHER:![0-9]+]], [[INDIRECT:![0-9]+]], [[OTHER2:![0-9]+]], [[OBJC:![0-9]+]]} +// CHECK: !llvm.linker.options = !{ +// CHECK-SAME: [[MODULE:![0-9]+]], +// CHECK-SAME: [[PUBLIC:![0-9]+]], +// CHECK-SAME: [[SWIFTONONESUPPORT:![0-9]+]], +// CHECK-SAME: [[SWIFTCORE:![0-9]+]], +// CHECK-windows-msvc-SAME: [[STDIO:![0-9]+]], +// CHECK-SAME: [[PRIVATE:![0-9]+]], +// CHECK-SAME: [[OTHER:![0-9]+]], +// CHECK-SAME: [[INDIRECT:![0-9]+]], +// CHECK-SAME: [[OTHER2:![0-9]+]], +// CHECK-SAME: [[OBJC:![0-9]+]] +// CHECK-SAME: } -// CHECK-DAG: [[SWIFTCORE]] = !{!{{"-lswiftCore"|"/DEFAULTLIB:swiftCore.lib"}}} -// CHECK-DAG: [[SWIFTONONESUPPORT]] = !{!{{"-lswiftSwiftOnoneSupport"|"/DEFAULTLIB:swiftSwiftOnoneSupport.lib"}}} // CHECK-DAG: [[MODULE]] = !{!{{"-lautolinking_module_inferred"|"/DEFAULTLIB:autolinking_module_inferred.lib"}}} // CHECK-DAG: [[PUBLIC]] = !{!{{"-lautolinking_public"|"/DEFAULTLIB:autolinking_public.lib"}}} +// CHECK-DAG: [[SWIFTONONESUPPORT]] = !{!{{"-lswiftSwiftOnoneSupport"|"/DEFAULTLIB:swiftSwiftOnoneSupport.lib"}}} +// CHECK-DAG: [[SWIFTCORE]] = !{!{{"-lswiftCore"|"/DEFAULTLIB:swiftCore.lib"}}} +// CHECK-windows-msvc-DAG: [[STDIO]] = !{!"/DEFAULTLIB:legacy_stdio_definitions.lib"} // CHECK-DAG: [[OTHER]] = !{!{{"-lautolinking_other"|"/DEFAULTLIB:autolinking_other.lib"}}} // CHECK-DAG: [[OTHER2]] = !{!{{"-lautolinking_other2"|"/DEFAULTLIB:autolinking_other2.lib"}}} // CHECK-DAG: [[OBJC]] = !{!{{"-lobjc"|"/DEFAULTLIB:objc.lib"}}}