From ab9e628b72e77a13d0a81c70051427f940740dc5 Mon Sep 17 00:00:00 2001 From: Alastair Houghton Date: Wed, 15 Jun 2022 08:22:53 +0100 Subject: [PATCH] [Threading][Runtime] Separate threading error function to fix link on Linux. On Linux it seems that the linker objects, probably because of link order, to the definition of `swift::threading::fatal()` being in both static libraries. Fix by moving `swift::threading::fatal()` to its own file in the main runtime as well as the Concurrency runtime. Fixes #59444. --- stdlib/public/runtime/CMakeLists.txt | 1 + stdlib/public/runtime/Errors.cpp | 10 ---------- stdlib/public/runtime/ThreadingError.cpp | 25 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 stdlib/public/runtime/ThreadingError.cpp diff --git a/stdlib/public/runtime/CMakeLists.txt b/stdlib/public/runtime/CMakeLists.txt index 1664fb14d1cab..2eb4deb979f9a 100644 --- a/stdlib/public/runtime/CMakeLists.txt +++ b/stdlib/public/runtime/CMakeLists.txt @@ -67,6 +67,7 @@ set(swift_runtime_sources RuntimeInvocationsTracking.cpp SwiftDtoa.cpp SwiftTLSContext.cpp + ThreadingError.cpp AccessibleFunction.cpp) # Acknowledge that the following sources are known. diff --git a/stdlib/public/runtime/Errors.cpp b/stdlib/public/runtime/Errors.cpp index ba386a5fc8020..c3d5b0ff5f81c 100644 --- a/stdlib/public/runtime/Errors.cpp +++ b/stdlib/public/runtime/Errors.cpp @@ -465,13 +465,3 @@ void swift::swift_abortDisabledUnicodeSupport() { "Unicode normalization data is disabled on this platform"); } - -/// Halt because of a problem in the threading library -SWIFT_ATTRIBUTE_NORETURN -SWIFT_FORMAT(1, 2) -void swift::threading::fatal(const char *msg, ...) { - va_list val; - va_start(val, msg); - - swift::fatalErrorv(0, msg, val); -} diff --git a/stdlib/public/runtime/ThreadingError.cpp b/stdlib/public/runtime/ThreadingError.cpp new file mode 100644 index 0000000000000..4ff44279bbdf1 --- /dev/null +++ b/stdlib/public/runtime/ThreadingError.cpp @@ -0,0 +1,25 @@ +//===--- ThreadingError.cpp - Error handling support code -----------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +#include "swift/Runtime/Debug.h" +#include "swift/Threading/Errors.h" +#include + +// Handle fatal errors from the threading library +SWIFT_ATTRIBUTE_NORETURN +SWIFT_FORMAT(1, 2) +void swift::threading::fatal(const char *format, ...) { + va_list val; + + va_start(val, format); + swift::fatalErrorv(0, format, val); +}