From e4de14612f028ee3f34b0fe72a38b38668b8668f Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Sat, 20 Apr 2024 12:29:32 +0200 Subject: [PATCH] CI updates --- .clang-tidy | 2 +- .github/workflows/ci.yml | 4 +-- misc/analyze/clang-tidy/clang-tidy-bzip2.yml | 2 +- misc/analyze/clang-tidy/clang-tidy-ucl.yml | 2 +- misc/analyze/clang-tidy/clang-tidy-zlib.yml | 2 +- misc/analyze/clang-tidy/clang-tidy-zstd.yml | 2 +- src/check/dt_check.cpp | 30 +++++--------------- src/check/dt_cxxlib.cpp | 10 +++++-- src/check/dt_impl.cpp | 2 +- 9 files changed, 22 insertions(+), 34 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 693af74e..a622fae5 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -22,7 +22,7 @@ Checks: > -clang-analyzer-optin.performance.Padding, -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling, -clang-analyzer-security.insecureAPI.strcpy, - clang-diagnostics-*, + clang-diagnostic-*, performance-*, -performance-avoid-endl, -performance-unnecessary-value-param, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2bbe2cf..7f9adc34 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,8 +17,8 @@ env: UPX_CMAKE_CONFIG_FLAGS: -Wdev --warn-uninitialized UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO: 1 UPX_DEBUG_TEST_LIBC_QSORT: 1 - # 2024-04-14 - ZIG_DIST_VERSION: 0.12.0-dev.3653+e45bdc6bd + # 2024-04-20 + ZIG_DIST_VERSION: 0.12.0 jobs: job-rebuild-and-verify-stubs: diff --git a/misc/analyze/clang-tidy/clang-tidy-bzip2.yml b/misc/analyze/clang-tidy/clang-tidy-bzip2.yml index 4bd30f37..f62e4740 100644 --- a/misc/analyze/clang-tidy/clang-tidy-bzip2.yml +++ b/misc/analyze/clang-tidy/clang-tidy-bzip2.yml @@ -16,7 +16,7 @@ Checks: > -clang-analyzer-core.UndefinedBinaryOperatorResult, -clang-analyzer-core.uninitialized.Assign, -clang-analyzer-security.insecureAPI.strcpy, - clang-diagnostics-*, + clang-diagnostic-*, performance-*, FormatStyle: file HeaderFilterRegex: '.*' diff --git a/misc/analyze/clang-tidy/clang-tidy-ucl.yml b/misc/analyze/clang-tidy/clang-tidy-ucl.yml index 9a920b89..19de2e0b 100644 --- a/misc/analyze/clang-tidy/clang-tidy-ucl.yml +++ b/misc/analyze/clang-tidy/clang-tidy-ucl.yml @@ -14,7 +14,7 @@ Checks: > -bugprone-suspicious-include, clang-analyzer-*, -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling, - clang-diagnostics-*, + clang-diagnostic-*, performance-*, FormatStyle: file HeaderFilterRegex: '.*' diff --git a/misc/analyze/clang-tidy/clang-tidy-zlib.yml b/misc/analyze/clang-tidy/clang-tidy-zlib.yml index 0f9e318f..53773540 100644 --- a/misc/analyze/clang-tidy/clang-tidy-zlib.yml +++ b/misc/analyze/clang-tidy/clang-tidy-zlib.yml @@ -15,7 +15,7 @@ Checks: > clang-analyzer-*, -clang-analyzer-optin.performance.Padding, -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling, - clang-diagnostics-*, + clang-diagnostic-*, performance-*, FormatStyle: file HeaderFilterRegex: '.*' diff --git a/misc/analyze/clang-tidy/clang-tidy-zstd.yml b/misc/analyze/clang-tidy/clang-tidy-zstd.yml index 2364c8ec..91348b75 100644 --- a/misc/analyze/clang-tidy/clang-tidy-zstd.yml +++ b/misc/analyze/clang-tidy/clang-tidy-zstd.yml @@ -18,7 +18,7 @@ Checks: > -clang-analyzer-core.UndefinedBinaryOperatorResult, -clang-analyzer-deadcode.DeadStores, -clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling, - clang-diagnostics-*, + clang-diagnostic-*, performance-*, -performance-no-int-to-ptr, FormatStyle: file diff --git a/src/check/dt_check.cpp b/src/check/dt_check.cpp index fa363246..a9cc7add 100644 --- a/src/check/dt_check.cpp +++ b/src/check/dt_check.cpp @@ -370,28 +370,6 @@ static noinline double u64_f64_sub_div(upx_uint64_t a, upx_uint64_t b) { return (a - b) / 1000000.0; } -// extra debugging; floating point edge cases cause portability problems in practice -static noinline bool shall_test_float_division_by_zero(void) { - static bool result = false; // default is false - static upx_std_once_flag init_done; - upx_std_call_once(init_done, []() noexcept { - static const char envvar[] = "UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO"; - const char *e = upx_getenv(envvar); - bool force = (e && e[0] && strcmp(e, "2") == 0); - if (force) - result = true; - else if (is_envvar_true(envvar)) { -#if defined(__clang__) && defined(__FAST_MATH__) && defined(__INTEL_LLVM_COMPILER) - // warning: comparison with NaN always evaluates to false in fast floating point modes - fprintf(stderr, "upx: WARNING: ignoring %s: __FAST_MATH__\n", envvar); -#else - result = true; -#endif - } - }); - return result; -} - template struct TestFloat { static constexpr Int X = 1000000; @@ -407,10 +385,16 @@ struct TestFloat { assert_noexcept(sub_div(3 * X, X, Float(X)) == Float(2)); assert_noexcept(sub_div_x(3 * X, X) == Float(2)); // extra debugging; floating point edge cases cause portability problems in practice - if (shall_test_float_division_by_zero()) { + static const char envvar[] = "UPX_DEBUG_TEST_FLOAT_DIVISION_BY_ZERO"; + if (is_envvar_true(envvar)) { +#if defined(__FAST_MATH__) + // warning: comparison with NaN always evaluates to false in fast floating point modes + fprintf(stderr, "upx: WARNING: ignoring %s: __FAST_MATH__\n", envvar); +#else assert_noexcept(std::isnan(div(0, Float(0)))); assert_noexcept(std::isinf(div(1, Float(0)))); assert_noexcept(std::isinf(div(Int(-1), Float(0)))); +#endif } } }; diff --git a/src/check/dt_cxxlib.cpp b/src/check/dt_cxxlib.cpp index c56b552d..9c46defb 100644 --- a/src/check/dt_cxxlib.cpp +++ b/src/check/dt_cxxlib.cpp @@ -364,11 +364,15 @@ struct TestTriBool { static_assert(std::is_trivially_copyable::value); static_assert(sizeof(typename T::value_type) == sizeof(typename T::underlying_type)); static_assert(alignof(typename T::value_type) == alignof(typename T::underlying_type)); -#if (ACC_ARCH_M68K && ACC_OS_TOS && ACC_CC_GNUC) && defined(__MINT__) +#if defined(__m68k__) && defined(__atarist__) && defined(__GNUC__) // broken compiler or broken ABI -#elif __GNUC__ == 7 && defined(__i386__) && !defined(__clang__) +#elif defined(__i386__) && defined(__clang__) && (__clang_major__ < 9) static_assert(sizeof(T) == sizeof(typename T::underlying_type)); - // gcc-7 "long long" enum align bug/ABI problem on i386 + // i386: "long long" enum align bug/ABI problem on older compilers + static_assert(alignof(T) <= alignof(typename T::underlying_type)); +#elif defined(__i386__) && defined(__GNUC__) && (__GNUC__ == 7) && !defined(__clang__) + static_assert(sizeof(T) == sizeof(typename T::underlying_type)); + // i386: "long long" enum align bug/ABI problem on older compilers static_assert(alignof(T) <= alignof(typename T::underlying_type)); #else static_assert(sizeof(T) == sizeof(typename T::underlying_type)); diff --git a/src/check/dt_impl.cpp b/src/check/dt_impl.cpp index 93392fb2..ae757b18 100644 --- a/src/check/dt_impl.cpp +++ b/src/check/dt_impl.cpp @@ -55,7 +55,7 @@ #endif #endif -#if defined(__clang__) && defined(__FAST_MATH__) && defined(__INTEL_LLVM_COMPILER) +#if defined(__clang__) && defined(__FAST_MATH__) // warning: comparison with NaN always evaluates to false in fast floating point modes #pragma clang diagnostic ignored "-Wtautological-constant-compare" #endif