From a9e2757d9e4eff2d2b96c4a167bd5e87a0173338 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Tue, 16 Apr 2024 20:21:26 +0100 Subject: [PATCH] ansible: temporarily patch libstdc++ header on s390x As a stop-gap until gcc-toolset-12 in RHEL 8 is updated, manually patch the affected libstdc++ header file. Refs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113960 --- .../build-test-v8/files/gcc-bug-113960.patch | 57 +++++++++++++++++++ .../tasks/partials/rhel8-s390x.yml | 10 +++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 ansible/roles/build-test-v8/files/gcc-bug-113960.patch diff --git a/ansible/roles/build-test-v8/files/gcc-bug-113960.patch b/ansible/roles/build-test-v8/files/gcc-bug-113960.patch new file mode 100644 index 000000000..f833dba45 --- /dev/null +++ b/ansible/roles/build-test-v8/files/gcc-bug-113960.patch @@ -0,0 +1,57 @@ +--- a/usr/include/c++/12/bits/stl_algobase.h ++++ b/usr/include/c++/12/bits/stl_algobase.h +@@ -1778,11 +1778,14 @@ + } + + #if __cpp_lib_three_way_comparison +- // Iter points to a contiguous range of unsigned narrow character type +- // or std::byte, suitable for comparison by memcmp. +- template +- concept __is_byte_iter = contiguous_iterator<_Iter> +- && __is_memcmp_ordered>::__value; ++ // Both iterators refer to contiguous ranges of unsigned narrow characters, ++ // or std::byte, or big-endian unsigned integers, suitable for comparison ++ // using memcmp. ++ template ++ concept __memcmp_ordered_with ++ = (__is_memcmp_ordered_with, ++ iter_value_t<_Iter2>>::__value) ++ && contiguous_iterator<_Iter1> && contiguous_iterator<_Iter2>; + + // Return a struct with two members, initialized to the smaller of x and y + // (or x if they compare equal) and the result of the comparison x <=> y. +@@ -1832,20 +1835,20 @@ + if (!std::__is_constant_evaluated()) + if constexpr (same_as<_Comp, __detail::_Synth3way> + || same_as<_Comp, compare_three_way>) +- if constexpr (__is_byte_iter<_InputIter1>) +- if constexpr (__is_byte_iter<_InputIter2>) +- { +- const auto [__len, __lencmp] = _GLIBCXX_STD_A:: +- __min_cmp(__last1 - __first1, __last2 - __first2); +- if (__len) +- { +- const auto __c +- = __builtin_memcmp(&*__first1, &*__first2, __len) <=> 0; +- if (__c != 0) +- return __c; +- } +- return __lencmp; +- } ++ if constexpr (__memcmp_ordered_with<_InputIter1, _InputIter2>) ++ { ++ const auto [__len, __lencmp] = _GLIBCXX_STD_A:: ++ __min_cmp(__last1 - __first1, __last2 - __first2); ++ if (__len) ++ { ++ const auto __blen = __len * sizeof(*__first1); ++ const auto __c ++ = __builtin_memcmp(&*__first1, &*__first2, __blen) <=> 0; ++ if (__c != 0) ++ return __c; ++ } ++ return __lencmp; ++ } + + while (__first1 != __last1) + { diff --git a/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml b/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml index e1740b267..60937ae47 100644 --- a/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml +++ b/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml @@ -8,7 +8,7 @@ # Newer V8 builds require Python 3.8, or later. - name: install packages required to build V8 ansible.builtin.dnf: - name: ['GConf2-devel', 'python2', 'python2-pip', 'python39'] + name: ['GConf2-devel', 'python2', 'python2-pip', 'python39', 'patch'] state: present notify: package updated @@ -35,3 +35,11 @@ executable: pip-3 name: ['httplib2', 'six'] state: present + +- name: temporary patch for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113960 + ansible.posix.patch: + basedir: /opt/rh/gcc-toolset-12/root/ + ignore_whitespace: true + src: gcc-bug-113960.patch + strip: 1 + become: true