From bdc8620d555af1318e39581f6ba8a29fe99adaee Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Tue, 21 Nov 2023 08:16:30 -0800 Subject: [PATCH] [upstream_utils] Fix fmt compilation errors on Windows (#5948) Using `this->` in decltype doesn't work in the latest MSVC. --- .../0001-Don-t-throw-on-write-failure.patch | 2 +- .../0002-Suppress-warnings-we-can-t-fix.patch | 4 +- .../0003-Remove-this-from-decltype.patch | 39 +++++++++++++++++++ upstream_utils/update_fmt.py | 1 + .../thirdparty/fmtlib/include/fmt/core.h | 6 +-- 5 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 upstream_utils/fmt_patches/0003-Remove-this-from-decltype.patch diff --git a/upstream_utils/fmt_patches/0001-Don-t-throw-on-write-failure.patch b/upstream_utils/fmt_patches/0001-Don-t-throw-on-write-failure.patch index 5b05dbf66fc..5670adbd237 100644 --- a/upstream_utils/fmt_patches/0001-Don-t-throw-on-write-failure.patch +++ b/upstream_utils/fmt_patches/0001-Don-t-throw-on-write-failure.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Wed, 18 May 2022 10:21:49 -0700 -Subject: [PATCH 1/2] Don't throw on write failure +Subject: [PATCH 1/3] Don't throw on write failure --- include/fmt/format-inl.h | 4 +--- diff --git a/upstream_utils/fmt_patches/0002-Suppress-warnings-we-can-t-fix.patch b/upstream_utils/fmt_patches/0002-Suppress-warnings-we-can-t-fix.patch index a3866e22990..abc08e6dfe8 100644 --- a/upstream_utils/fmt_patches/0002-Suppress-warnings-we-can-t-fix.patch +++ b/upstream_utils/fmt_patches/0002-Suppress-warnings-we-can-t-fix.patch @@ -1,14 +1,14 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tyler Veness Date: Tue, 16 May 2023 13:49:18 -0700 -Subject: [PATCH 2/2] Suppress warnings we can't fix +Subject: [PATCH 2/3] Suppress warnings we can't fix --- include/fmt/format.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/fmt/format.h b/include/fmt/format.h -index e5bd8b110efe49e12a12b004ea246a4dba671a6f..f11be0d6d58f3d992d7d06adb3d9576f81ecfe11 100644 +index 87a34b972ce6af4e2209e4d6cf78e8401e8f0037..ac0f52def2f3e2bc88d11903f5532efd89af454d 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1324,7 +1324,14 @@ inline auto equal2(const char* lhs, const char* rhs) -> bool { diff --git a/upstream_utils/fmt_patches/0003-Remove-this-from-decltype.patch b/upstream_utils/fmt_patches/0003-Remove-this-from-decltype.patch new file mode 100644 index 00000000000..b1ed6bebd7e --- /dev/null +++ b/upstream_utils/fmt_patches/0003-Remove-this-from-decltype.patch @@ -0,0 +1,39 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Peter Johnson +Date: Mon, 20 Nov 2023 23:29:02 -0800 +Subject: [PATCH 3/3] Remove this from decltype + +This doesn't work on the most recent version of MSVC. +--- + include/fmt/core.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/include/fmt/core.h b/include/fmt/core.h +index 1fe13888a00263a085032272482475e5dafbef26..915d8952d5f6d5255f5a1aab956ef56245b80dc4 100644 +--- a/include/fmt/core.h ++++ b/include/fmt/core.h +@@ -1435,7 +1435,7 @@ template struct arg_mapper { + // Only map owning types because mapping views can be unsafe. + template , + FMT_ENABLE_IF(std::is_arithmetic::value)> +- FMT_CONSTEXPR FMT_INLINE auto map(const T& val) -> decltype(this->map(U())) { ++ FMT_CONSTEXPR FMT_INLINE auto map(const T& val) -> decltype(map(U())) { + return map(format_as(val)); + } + +@@ -1459,13 +1459,13 @@ template struct arg_mapper { + !is_string::value && !is_char::value && + !is_named_arg::value && + !std::is_arithmetic>::value)> +- FMT_CONSTEXPR FMT_INLINE auto map(T& val) -> decltype(this->do_map(val)) { ++ FMT_CONSTEXPR FMT_INLINE auto map(T& val) -> decltype(do_map(val)) { + return do_map(val); + } + + template ::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg) +- -> decltype(this->map(named_arg.value)) { ++ -> decltype(map(named_arg.value)) { + return map(named_arg.value); + } + diff --git a/upstream_utils/update_fmt.py b/upstream_utils/update_fmt.py index 746e879ad24..3af48a27f20 100755 --- a/upstream_utils/update_fmt.py +++ b/upstream_utils/update_fmt.py @@ -22,6 +22,7 @@ def main(): for f in [ "0001-Don-t-throw-on-write-failure.patch", "0002-Suppress-warnings-we-can-t-fix.patch", + "0003-Remove-this-from-decltype.patch", ]: git_am(os.path.join(wpilib_root, "upstream_utils/fmt_patches", f)) diff --git a/wpiutil/src/main/native/thirdparty/fmtlib/include/fmt/core.h b/wpiutil/src/main/native/thirdparty/fmtlib/include/fmt/core.h index 1fe13888a00..915d8952d5f 100644 --- a/wpiutil/src/main/native/thirdparty/fmtlib/include/fmt/core.h +++ b/wpiutil/src/main/native/thirdparty/fmtlib/include/fmt/core.h @@ -1435,7 +1435,7 @@ template struct arg_mapper { // Only map owning types because mapping views can be unsafe. template , FMT_ENABLE_IF(std::is_arithmetic::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) -> decltype(this->map(U())) { + FMT_CONSTEXPR FMT_INLINE auto map(const T& val) -> decltype(map(U())) { return map(format_as(val)); } @@ -1459,13 +1459,13 @@ template struct arg_mapper { !is_string::value && !is_char::value && !is_named_arg::value && !std::is_arithmetic>::value)> - FMT_CONSTEXPR FMT_INLINE auto map(T& val) -> decltype(this->do_map(val)) { + FMT_CONSTEXPR FMT_INLINE auto map(T& val) -> decltype(do_map(val)) { return do_map(val); } template ::value)> FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg) - -> decltype(this->map(named_arg.value)) { + -> decltype(map(named_arg.value)) { return map(named_arg.value); }