diff --git a/.drone.jsonnet b/.drone.jsonnet index 1a532b540..d1bd4d0ed 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -433,4 +433,10 @@ local windows_pipeline(name, image, environment, arch = "amd64") = "cppalliance/dronevs2022:1", { TOOLSET: 'msvc-14.3', CXXSTD: '14,17,20,latest' }, ), + + windows_pipeline( + "Windows VS2026 msvc-14.5", + "cppalliance/dronevs2026:1", + { TOOLSET: 'msvc-14.5', CXXSTD: '14,17,20,latest', ADDRMD: '32,64' }, + ), ] diff --git a/include/boost/decimal/decimal_fast128_t.hpp b/include/boost/decimal/decimal_fast128_t.hpp index 06ce03b00..8a20f4fb3 100644 --- a/include/boost/decimal/decimal_fast128_t.hpp +++ b/include/boost/decimal/decimal_fast128_t.hpp @@ -87,7 +87,12 @@ constexpr auto write_payload(typename TargetDecimalType::significand_type payloa # pragma warning(disable : 4324) // Structure was padded due to alignment specifier #endif +// 32-bit MSVC mis-codegens reads of bool members in over-aligned structs; use natural alignment there. +#if defined(_MSC_VER) && !defined(_M_X64) && !defined(_M_ARM64) +BOOST_DECIMAL_EXPORT class decimal_fast128_t final +#else BOOST_DECIMAL_EXPORT class alignas(16) decimal_fast128_t final +#endif { public: using significand_type = int128::uint128_t; diff --git a/include/boost/decimal/decimal_fast64_t.hpp b/include/boost/decimal/decimal_fast64_t.hpp index 8db0b601a..9c17aa18f 100644 --- a/include/boost/decimal/decimal_fast64_t.hpp +++ b/include/boost/decimal/decimal_fast64_t.hpp @@ -87,7 +87,12 @@ constexpr auto write_payload(typename TargetDecimalType::significand_type payloa # pragma warning(disable : 4324) // Structure was padded due to alignment specifier #endif +// 32-bit MSVC mis-codegens reads of bool members in over-aligned structs; use natural alignment there. +#if defined(_MSC_VER) && !defined(_M_X64) && !defined(_M_ARM64) +BOOST_DECIMAL_EXPORT class decimal_fast64_t final +#else BOOST_DECIMAL_EXPORT class alignas(8) decimal_fast64_t final +#endif { public: using significand_type = std::uint64_t;