Skip to content

Commit

Permalink
ansible: temporarily patch libstdc++ header on s390x
Browse files Browse the repository at this point in the history
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
  • Loading branch information
richardlau committed Apr 17, 2024
1 parent 1aa3121 commit 9c149d0
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 1 deletion.
57 changes: 57 additions & 0 deletions 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<typename _Iter>
- concept __is_byte_iter = contiguous_iterator<_Iter>
- && __is_memcmp_ordered<iter_value_t<_Iter>>::__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<typename _Iter1, typename _Iter2>
+ concept __memcmp_ordered_with
+ = (__is_memcmp_ordered_with<iter_value_t<_Iter1>,
+ 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)
{
10 changes: 9 additions & 1 deletion ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml
Expand Up @@ -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

Expand All @@ -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

0 comments on commit 9c149d0

Please sign in to comment.