From f76c6b8d0a7966ab43d826dc3e19de4ccaa1f7e4 Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Thu, 20 May 2021 23:12:38 +0100 Subject: Fix LTO test on Cygwin This partially reverts commit add502c6483bde9dc6a0ba80b3c79163304465a4. In 'linkshared' test, annotate cppfunc() as imported, so an indirection through an import stub is generated, avoiding a relocation size error when building using gcc for Cygwin with LTO on. Align with the example of how to write this portably in [1]. The 'c' language part of that test already gets this right. [1] http://gcc.gnu.org/wiki/Visibility --- run_unittests.py | 2 -- test cases/common/6 linkshared/cpplib.cpp | 7 ++----- test cases/common/6 linkshared/cpplib.h | 12 ++++++++++++ test cases/common/6 linkshared/cppmain.cpp | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 test cases/common/6 linkshared/cpplib.h diff --git a/run_unittests.py b/run_unittests.py index f65eba38d..ed8de784d 100755 --- a/run_unittests.py +++ b/run_unittests.py @@ -3075,8 +3075,6 @@ class AllPlatformTests(BasePlatformTests): @skip_if_not_base_option('b_lto_threads') def test_lto_threads(self): - if is_cygwin(): - raise unittest.SkipTest('LTO is broken on Cygwin.') testdir = os.path.join(self.common_test_dir, '6 linkshared') env = get_fake_env(testdir, self.builddir, self.prefix) diff --git a/test cases/common/6 linkshared/cpplib.cpp b/test cases/common/6 linkshared/cpplib.cpp index 395859d27..247f8201a 100644 --- a/test cases/common/6 linkshared/cpplib.cpp +++ b/test cases/common/6 linkshared/cpplib.cpp @@ -1,8 +1,5 @@ -#if defined _WIN32 - #define DLL_PUBLIC __declspec(dllexport) -#else - #define DLL_PUBLIC __attribute__ ((visibility ("default"))) -#endif +#define BUILDING_DLL +#include "cpplib.h" int DLL_PUBLIC cppfunc(void) { return 42; diff --git a/test cases/common/6 linkshared/cpplib.h b/test cases/common/6 linkshared/cpplib.h new file mode 100644 index 000000000..e2b02060d --- /dev/null +++ b/test cases/common/6 linkshared/cpplib.h @@ -0,0 +1,12 @@ +/* See http://gcc.gnu.org/wiki/Visibility#How_to_use_the_new_C.2B-.2B-_visibility_support */ +#if defined(_WIN32) || defined(__CYGWIN__) + #ifdef BUILDING_DLL + #define DLL_PUBLIC __declspec(dllexport) + #else + #define DLL_PUBLIC __declspec(dllimport) + #endif +#else + #define DLL_PUBLIC __attribute__ ((visibility ("default"))) +#endif + +int DLL_PUBLIC cppfunc(void); diff --git a/test cases/common/6 linkshared/cppmain.cpp b/test cases/common/6 linkshared/cppmain.cpp index 8e1648515..29e9a4480 100644 --- a/test cases/common/6 linkshared/cppmain.cpp +++ b/test cases/common/6 linkshared/cppmain.cpp @@ -1,4 +1,4 @@ -int cppfunc(void); +#include "cpplib.h" int main(void) { return cppfunc() != 42; -- cgit v1.2.3