diff --git a/gcc-epel.spec b/gcc-epel.spec index a49b11e..148ef51 100644 --- a/gcc-epel.spec +++ b/gcc-epel.spec @@ -1,10 +1,10 @@ -%global DATE 20230605 -%global gitrev 2c7f17ca0b642790d74cca6c798196e9053a4bcf -%global gcc_version 11.4.1 +%global DATE 20240719 +%global gitrev a985e3068a6f8045f8a6f2d2d5ae75f5eb0a8767 +%global gcc_version 11.5.0 %global gcc_major 11 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. -%global gcc_release 4 +%global gcc_release 2 %global nvptx_tools_gitrev 5f6f343a302d620b0868edab376c00b15741e39e %global newlib_cygwin_gitrev 50e2a63b04bdd018484605fbb954fd1bd5147fa0 %global _unpackaged_files_terminate_build 0 @@ -128,7 +128,7 @@ # TODO: Add ppc64le-redhat-linux s390x-redhat-linux later. %global cross_targets aarch64-redhat-linux # Override RHEL/derivative build options for gcc-epel -%global epel_bootstrap 0 +%global epel_bootstrap 1 %global epel_glibc32 0 %global build_ada 1 %global build_objc 1 @@ -344,11 +344,13 @@ Patch27: gcc11-s390x-regarg-1.patch Patch28: gcc11-s390x-regarg-2.patch Patch29: gcc11-s390x-regarg-3.patch Patch30: gcc11-testsuite-fixes.patch -Patch31: gcc11-pr96024.patch Patch32: gcc11-testsuite-fixes-2.patch -Patch33: gcc11-pr111039.patch -Patch34: gcc11-pr111070.patch -Patch35: gcc11-pr106310.patch +Patch33: gcc11-testsuite-fixes-3.patch +Patch34: gcc11-pr116034.patch +Patch35: gcc11-testsuite-aarch64-add-fno-stack-protector.patch +Patch36: gcc11-libgfortran-flush.patch +Patch37: gcc11-pr113960.patch +Patch38: gcc11-pr105157.patch Patch100: gcc11-fortran-fdec-duplicates.patch Patch101: gcc11-fortran-flogical-as-integer.patch @@ -968,11 +970,13 @@ mark them as cross compiled. %patch28 -p1 -b .s390x-regarg-2~ %patch29 -p1 -b .s390x-regarg-3~ %patch30 -p1 -b .testsuite~ -%patch31 -p1 -b .pr96024~ %patch32 -p1 -b .testsuite2~ -%patch33 -p1 -b .pr111039~ -%patch34 -p1 -b .pr111070~ -%patch35 -p1 -b .pr106310~ +%patch33 -p1 -b .testsuite3~ +%patch34 -p1 -b .pr116034~ +%patch35 -p1 -b .testsuite4~ +%patch36 -p1 -b .libgfortran-flush~ +%patch37 -p1 -b .pr113960~ +%patch38 -p1 -b .pr105157~ %if 0%{?rhel} >= 9 %patch100 -p1 -b .fortran-fdec-duplicates~ @@ -3789,6 +3793,18 @@ end %endif %changelog +* Thu Nov 28 2024 Robert Scheck 11.5.0-2 +- backport from 11.5.0-2: fix TARGET_CPU_DEFAULT (PR target/105157, RHEL-50037) +- backport from 11.5.0-2: libstdc++: Workaround kernel-headers on s390x-linux (RHEL-50054) +- backport from 11.5.0-2: fix wrong code with memcpy from _Complex (PR tree-optimization/116034) +- backport from 11.5.0-1: update from releases/gcc-11 branch (RHEL-35635) + - GCC 11.5 release +- backport from 11.5.0-1: fix FLUSH IOSTAT value (PR libfortran/101255, RHEL-32536) +- backport from 11.5.0-1: fix conditions for using memcmp in + std::lexicographical_compare_three_way (PR libstdc++/113960) +- backport from 11.4.1-3: update from releases/gcc-11-branch (RHEL-17638) +- backport from 11.4.1-3: use -fno-stack-protector in some aarch64 tests + * Wed Nov 29 2023 Robert Scheck 11.4.1-4 - disable bootstrap mode and rebuild using gcc-epel-11.4.1-3.el9 diff --git a/gcc11-libgfortran-flush.patch b/gcc11-libgfortran-flush.patch new file mode 100644 index 0000000..8e3016a --- /dev/null +++ b/gcc11-libgfortran-flush.patch @@ -0,0 +1,51 @@ +commit c14f38d4292ec22462a4080841d526f87428130a +Author: Francois-Xavier Coudert +Date: Thu Dec 16 15:33:17 2021 +0100 + + Fix FLUSH IOSTAT value + + PR libfortran/101255 + + libgfortran/ChangeLog: + + * io/file_pos.c: Fix error code. + + gcc/testsuite/ChangeLog: + + * gfortran.dg/iostat_5.f90: New file. + +diff --git a/gcc/testsuite/gfortran.dg/iostat_5.f90 b/gcc/testsuite/gfortran.dg/iostat_5.f90 +new file mode 100644 +index 00000000000..1e72dfdf7e1 +--- /dev/null ++++ b/gcc/testsuite/gfortran.dg/iostat_5.f90 +@@ -0,0 +1,16 @@ ++! PR libfortran/101255 ++! { dg-do run } ++ ++program test ++ use ISO_FORTRAN_ENV, only: IOSTAT_EOR, IOSTAT_END ++ implicit none ++ character(len=50) :: err ++ integer :: i ++ ++ err = "" ++ flush(99, iostat=i, iomsg=err) ++ ++ if (err == "") stop 1 ++ if (i >= 0) stop 2 ++ if (i == IOSTAT_EOR .or. i == IOSTAT_END) stop 3 ++end +diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c +index 7e71ca577e0..4ed1698f17a 100644 +--- a/libgfortran/io/file_pos.c ++++ b/libgfortran/io/file_pos.c +@@ -527,7 +527,7 @@ st_flush (st_parameter_filepos *fpp) + } + else + /* FLUSH on unconnected unit is illegal: F95 std., 9.3.5. */ +- generate_error (&fpp->common, LIBERROR_BAD_OPTION, ++ generate_error (&fpp->common, -LIBERROR_BAD_UNIT, + "Specified UNIT in FLUSH is not connected"); + + if (needs_unlock) diff --git a/gcc11-libstdc++-docs.patch b/gcc11-libstdc++-docs.patch index 353ab27..b0f7deb 100644 --- a/gcc11-libstdc++-docs.patch +++ b/gcc11-libstdc++-docs.patch @@ -4,7 +4,7 @@ FSF

-+ Release 11.4.1 ++ Release 11.5.0 +

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation @@ -17,7 +17,7 @@

- The API documentation, rendered into HTML, can be viewed online + The API documentation, rendered into HTML, can be viewed locally -+ for the 11.4.1 release, ++ for the 11.5.0 release, + online for each GCC release and diff --git a/gcc11-pr105157.patch b/gcc11-pr105157.patch new file mode 100644 index 0000000..79cac28 --- /dev/null +++ b/gcc11-pr105157.patch @@ -0,0 +1,105 @@ +The original patch had +#define TARGET_CPU_NBITS 8 +but I've changed it to +#define TARGET_CPU_NBITS 7 + +commit 5522dec054cb940fe83661b96249aa12c54c1d77 +Author: Andre Vieira +Date: Fri Apr 8 15:12:23 2022 +0100 + + aarch64: PR target/105157 Increase number of cores TARGET_CPU_DEFAULT can encode + + This addresses the compile-time increase seen in the PR target/105157. This was + being caused by selecting the wrong core tuning, as when we added the latest + AArch64 the TARGET_CPU_generic tuning was pushed beyond the 0x3f mask we used + to encode both target cpu and attributes into TARGET_CPU_DEFAULT. + + gcc/ChangeLog: + + PR target/105157 + * config.gcc: Shift ext_mask by TARGET_CPU_NBITS. + * config/aarch64/aarch64.h (TARGET_CPU_NBITS): New macro. + (TARGET_CPU_MASK): Likewise. + (TARGET_CPU_DEFAULT): Use TARGET_CPU_NBITS. + * config/aarch64/aarch64.cc (aarch64_get_tune_cpu): Use TARGET_CPU_MASK. + (aarch64_get_arch): Likewise. + (aarch64_override_options): Use TARGET_CPU_NBITS. + +--- a/gcc/config.gcc ++++ b/gcc/config.gcc +@@ -4261,7 +4261,7 @@ case "${target}" in + ext_val=`echo $ext_val | sed -e 's/[a-z0-9]\+//'` + done + +- ext_mask="(("$ext_mask") << 6)" ++ ext_mask="(("$ext_mask") << TARGET_CPU_NBITS)" + if [ x"$base_id" != x ]; then + target_cpu_cname="TARGET_CPU_$base_id | $ext_mask" + fi +--- a/gcc/config/aarch64/aarch64.c ++++ b/gcc/config/aarch64/aarch64.c +@@ -18053,6 +18053,9 @@ aarch64_validate_mtune (const char *str, const struct processor **res) + return false; + } + ++static_assert (TARGET_CPU_generic < TARGET_CPU_MASK, ++ "TARGET_CPU_NBITS is big enough"); ++ + /* Return the CPU corresponding to the enum CPU. + If it doesn't specify a cpu, return the default. */ + +@@ -18062,12 +18065,12 @@ aarch64_get_tune_cpu (enum aarch64_processor cpu) + if (cpu != aarch64_none) + return &all_cores[cpu]; + +- /* The & 0x3f is to extract the bottom 6 bits that encode the +- default cpu as selected by the --with-cpu GCC configure option ++ /* The & TARGET_CPU_MASK is to extract the bottom TARGET_CPU_NBITS bits that ++ encode the default cpu as selected by the --with-cpu GCC configure option + in config.gcc. + ???: The whole TARGET_CPU_DEFAULT and AARCH64_CPU_DEFAULT_FLAGS + flags mechanism should be reworked to make it more sane. */ +- return &all_cores[TARGET_CPU_DEFAULT & 0x3f]; ++ return &all_cores[TARGET_CPU_DEFAULT & TARGET_CPU_MASK]; + } + + /* Return the architecture corresponding to the enum ARCH. +@@ -18079,7 +18082,8 @@ aarch64_get_arch (enum aarch64_arch arch) + if (arch != aarch64_no_arch) + return &all_architectures[arch]; + +- const struct processor *cpu = &all_cores[TARGET_CPU_DEFAULT & 0x3f]; ++ const struct processor *cpu ++ = &all_cores[TARGET_CPU_DEFAULT & TARGET_CPU_MASK]; + + return &all_architectures[cpu->arch]; + } +@@ -18166,7 +18170,7 @@ aarch64_override_options (void) + { + /* Get default configure-time CPU. */ + selected_cpu = aarch64_get_tune_cpu (aarch64_none); +- aarch64_isa_flags = TARGET_CPU_DEFAULT >> 6; ++ aarch64_isa_flags = TARGET_CPU_DEFAULT >> TARGET_CPU_NBITS; + } + + if (selected_tune) +--- a/gcc/config/aarch64/aarch64.h ++++ b/gcc/config/aarch64/aarch64.h +@@ -813,10 +813,16 @@ enum target_cpus + TARGET_CPU_generic + }; + ++/* Define how many bits are used to represent the CPU in TARGET_CPU_DEFAULT. ++ This needs to be big enough to fit the value of TARGET_CPU_generic. ++ All bits after this are used to represent the AARCH64_CPU_DEFAULT_FLAGS. */ ++#define TARGET_CPU_NBITS 7 ++#define TARGET_CPU_MASK ((1 << TARGET_CPU_NBITS) - 1) ++ + /* If there is no CPU defined at configure, use generic as default. */ + #ifndef TARGET_CPU_DEFAULT + #define TARGET_CPU_DEFAULT \ +- (TARGET_CPU_generic | (AARCH64_CPU_DEFAULT_FLAGS << 6)) ++ (TARGET_CPU_generic | (AARCH64_CPU_DEFAULT_FLAGS << TARGET_CPU_NBITS)) + #endif + + /* If inserting NOP before a mult-accumulate insn remember to adjust the diff --git a/gcc11-pr106310.patch b/gcc11-pr106310.patch deleted file mode 100644 index 98ee967..0000000 --- a/gcc11-pr106310.patch +++ /dev/null @@ -1,108 +0,0 @@ -commit 506d5f399bef7f2d8c48fd83d853c6ff7811a226 -Author: Jason Merrill -Date: Wed Jul 26 10:39:34 2023 -0400 - - c++: member vs global template [PR106310] - - For backward compatibility we still want to allow patterns like - this->A::foo, but the template keyword in a qualified name is - specifically to specify that a dependent name is a template, so don't look - in the enclosing scope at all. - - Also fix handling of dependent bases: if member lookup in the current - instantiation fails and we have dependent bases, the lookup is dependent. - We were already handling that for the case where lookup in the enclosing - scope also fails, but we also want it to affect that lookup itself. - - PR c++/106310 - - gcc/cp/ChangeLog: - - * parser.c (cp_parser_template_name): Skip non-member - lookup after the template keyword. - (cp_parser_lookup_name): Pass down template_keyword_p. - - gcc/testsuite/ChangeLog: - - * g++.dg/template/template-keyword4.C: New test. - -diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c -index 8287934a679..8df715596eb 100644 ---- a/gcc/cp/parser.c -+++ b/gcc/cp/parser.c -@@ -2610,7 +2610,7 @@ static tree cp_parser_objc_struct_declaration - /* Utility Routines */ - - static cp_expr cp_parser_lookup_name -- (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *, location_t); -+ (cp_parser *, tree, enum tag_types, int, bool, bool, tree *, location_t); - static tree cp_parser_lookup_name_simple - (cp_parser *, tree, location_t); - static tree cp_parser_maybe_treat_template_as_class -@@ -17748,7 +17748,7 @@ cp_parser_template_name (cp_parser* parser, - /* Look up the name. */ - decl = cp_parser_lookup_name (parser, identifier, - tag_type, -- /*is_template=*/true, -+ /*is_template=*/1 + template_keyword_p, - /*is_namespace=*/false, - check_dependency_p, - /*ambiguous_decls=*/NULL, -@@ -29254,7 +29254,7 @@ prefer_type_arg (tag_types tag_type) - refer to types are ignored. - - If IS_TEMPLATE is TRUE, bindings that do not refer to templates are -- ignored. -+ ignored. If IS_TEMPLATE IS 2, the 'template' keyword was specified. - - If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces - are ignored. -@@ -29269,7 +29269,7 @@ prefer_type_arg (tag_types tag_type) - static cp_expr - cp_parser_lookup_name (cp_parser *parser, tree name, - enum tag_types tag_type, -- bool is_template, -+ int is_template, - bool is_namespace, - bool check_dependency, - tree *ambiguous_decls, -@@ -29454,7 +29454,14 @@ cp_parser_lookup_name (cp_parser *parser, tree name, - else - decl = NULL_TREE; - -- if (!decl) -+ /* If we didn't find a member and have dependent bases, the member lookup -+ is now dependent. */ -+ if (!dep && !decl && any_dependent_bases_p (object_type)) -+ dep = true; -+ -+ if (dep && is_template == 2) -+ /* The template keyword specifies a dependent template. */; -+ else if (!decl) - /* Look it up in the enclosing context. DR 141: When looking for a - template-name after -> or ., only consider class templates. */ - decl = lookup_name (name, is_namespace ? LOOK_want::NAMESPACE -diff --git a/gcc/testsuite/g++.dg/template/template-keyword4.C b/gcc/testsuite/g++.dg/template/template-keyword4.C -new file mode 100644 -index 00000000000..a7ab9bb8ca6 ---- /dev/null -+++ b/gcc/testsuite/g++.dg/template/template-keyword4.C -@@ -0,0 +1,18 @@ -+// PR c++/106310 -+ -+template -+struct set{}; -+ -+template< typename T > -+struct Base -+{ -+ template< int > int set(T const &); -+}; -+ -+template< typename T > -+struct Derived : Base< T > -+{ -+ void f(T const &arg) { -+ this->template set< 0 >(arg); -+ } -+}; diff --git a/gcc11-pr111039.patch b/gcc11-pr111039.patch deleted file mode 100644 index 3fab07e..0000000 --- a/gcc11-pr111039.patch +++ /dev/null @@ -1,59 +0,0 @@ -commit 482551a79a3d3f107f6239679ee74655cfe8707e -Author: Richard Biener -Date: Thu Aug 17 13:10:14 2023 +0200 - - tree-optimization/111039 - abnormals and bit test merging - - The following guards the bit test merging code in if-combine against - the appearance of SSA names used in abnormal PHIs. - - PR tree-optimization/111039 - * tree-ssa-ifcombine.cc (ifcombine_ifandif): Check for - SSA_NAME_OCCURS_IN_ABNORMAL_PHI. - - * gcc.dg/pr111039.c: New testcase. - -diff --git a/gcc/testsuite/gcc.dg/pr111039.c b/gcc/testsuite/gcc.dg/pr111039.c -new file mode 100644 -index 00000000000..bec9983b35f ---- /dev/null -+++ b/gcc/testsuite/gcc.dg/pr111039.c -@@ -0,0 +1,15 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O" } */ -+ -+int _setjmp (); -+void abcd (); -+void abcde (); -+void compiler_corruption_function(int flags) -+{ -+ int nowait = flags & 1048576, isexpand = flags & 8388608; -+ abcd(); -+ _setjmp(flags); -+ if (nowait && isexpand) -+ flags &= 0; -+ abcde(); -+} ---- a/gcc/tree-ssa-ifcombine.c -+++ b/gcc/tree-ssa-ifcombine.c -@@ -430,6 +430,9 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, - { - tree t, t2; - -+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) -+ return false; -+ - /* Do it. */ - gsi = gsi_for_stmt (inner_cond); - t = fold_build2 (LSHIFT_EXPR, TREE_TYPE (name1), -@@ -486,6 +489,10 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, - gimple_stmt_iterator gsi; - tree t; - -+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1) -+ || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2)) -+ return false; -+ - /* Find the common name which is bit-tested. */ - if (name1 == name2) - ; diff --git a/gcc11-pr111070.patch b/gcc11-pr111070.patch deleted file mode 100644 index b5a0241..0000000 --- a/gcc11-pr111070.patch +++ /dev/null @@ -1,66 +0,0 @@ -commit 966b0a96523fb7adbf498ac71df5e033c70dc546 -Author: Richard Biener -Date: Mon Aug 21 09:01:00 2023 +0200 - - tree-optimization/111070 - fix ICE with recent ifcombine fix - - We now got test coverage for non-SSA name bits so the following amends - the SSA_NAME_OCCURS_IN_ABNORMAL_PHI checks. - - PR tree-optimization/111070 - * tree-ssa-ifcombine.cc (ifcombine_ifandif): Check we have - an SSA name before checking SSA_NAME_OCCURS_IN_ABNORMAL_PHI. - - * gcc.dg/pr111070.c: New testcase. - -diff --git a/gcc/testsuite/gcc.dg/pr111070.c b/gcc/testsuite/gcc.dg/pr111070.c -new file mode 100644 -index 00000000000..1ebc7adf782 ---- /dev/null -+++ b/gcc/testsuite/gcc.dg/pr111070.c -@@ -0,0 +1,20 @@ -+/* { dg-do compile } */ -+/* { dg-options "-O" } */ -+ -+/* common */ -+char c; -+/* arrays must be 8 byte aligned, regardless of size */ -+char c_ary[1]; -+ -+/* data */ -+char d = 1; -+char d_ary[1] = {1}; -+ -+int main () -+{ -+ if (((unsigned long)&c_ary[0] & 7) != 0) -+ return 1; -+ if (((unsigned long)&d_ary[0] & 7) != 0) -+ return 1; -+ return 0; -+} ---- a/gcc/tree-ssa-ifcombine.c -+++ b/gcc/tree-ssa-ifcombine.c -@@ -430,7 +430,8 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, - { - tree t, t2; - -- if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) -+ if (TREE_CODE (name1) == SSA_NAME -+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) - return false; - - /* Do it. */ -@@ -489,8 +490,10 @@ ifcombine_ifandif (basic_block inner_cond_bb, bool inner_inv, - gimple_stmt_iterator gsi; - tree t; - -- if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1) -- || SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2)) -+ if ((TREE_CODE (name1) == SSA_NAME -+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name1)) -+ || (TREE_CODE (name2) == SSA_NAME -+ && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name2))) - return false; - - /* Find the common name which is bit-tested. */ diff --git a/gcc11-pr113960.patch b/gcc11-pr113960.patch new file mode 100644 index 0000000..b9ca081 --- /dev/null +++ b/gcc11-pr113960.patch @@ -0,0 +1,107 @@ +commit 6f5dcea85a31845ec6f4b6886734b0f02e013718 +Author: Jonathan Wakely +Date: Tue Feb 27 17:50:34 2024 +0000 + + libstdc++: Fix conditions for using memcmp in std::lexicographical_compare_three_way [PR113960] + + The change in r11-2981-g2f983fa69005b6 meant that + std::lexicographical_compare_three_way started to use memcmp for + unsigned integers on big endian targets, but for that to be valid we + need the two value types to have the same size and we need to use that + size to compute the length passed to memcmp. + + I already defined a __is_memcmp_ordered_with trait that does the right + checks, std::lexicographical_compare_three_way just needs to use it. + + libstdc++-v3/ChangeLog: + + PR libstdc++/113960 + * include/bits/stl_algobase.h (__is_byte_iter): Replace with ... + (__memcmp_ordered_with): New concept. + (lexicographical_compare_three_way): Use __memcmp_ordered_with + instead of __is_byte_iter. Use correct length for memcmp. + * testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc: + New test. + + (cherry picked from commit f5cdda8acb06c20335855ed353ab9a441c12128a) + +diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h +index 7664301a208..6e648e48ad0 100644 +--- a/libstdc++-v3/include/bits/stl_algobase.h ++++ b/libstdc++-v3/include/bits/stl_algobase.h +@@ -1780,11 +1780,14 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO + } + + #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. +@@ -1834,20 +1837,20 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO + 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; ++ } + #endif // is_constant_evaluated + while (__first1 != __last1) + { +diff --git a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc +new file mode 100644 +index 00000000000..d51ae1a3d50 +--- /dev/null ++++ b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/113960.cc +@@ -0,0 +1,15 @@ ++// { dg-do run { target c++20 } } ++ ++// PR libstdc++/113960 ++// std::map with std::vector as input overwrites itself with c++20, on s390x ++ ++#include ++#include ++ ++int main() ++{ ++ unsigned short a1[] { 1, 2, 3 }; ++ unsigned short a2[] { 1, 2, 4 }; ++ // Incorrect memcmp comparison for big endian targets. ++ VERIFY( std::lexicographical_compare_three_way(a1, a1+3, a2, a2+3) < 0 ); ++} diff --git a/gcc11-pr116034.patch b/gcc11-pr116034.patch new file mode 100644 index 0000000..1f194de --- /dev/null +++ b/gcc11-pr116034.patch @@ -0,0 +1,65 @@ +commit 084768c865cd50a6f7ff177db2dbdbb7aadaeee0 +Author: Jakub Jelinek +Date: Tue Jul 23 10:50:29 2024 +0200 + + ssa: Fix up maybe_rewrite_mem_ref_base complex type handling [PR116034] + + The folding into REALPART_EXPR is correct, used only when the mem_offset + is zero, but for IMAGPART_EXPR it didn't check the exact offset value (just + that it is not 0). + The following patch fixes that by using IMAGPART_EXPR only if the offset + is right and using BITFIELD_REF or whatever else otherwise. + + 2024-07-23 Jakub Jelinek + Andrew Pinski + + PR tree-optimization/116034 + * tree-ssa.c (maybe_rewrite_mem_ref_base): Only use IMAGPART_EXPR + if MEM_REF offset is equal to element type size. + + * gcc.dg/pr116034.c: New test. + + (cherry picked from commit b9cefd67a2a464a3c9413e6b3f28e7dc7a9ef162) + +diff --git a/gcc/testsuite/gcc.dg/pr116034.c b/gcc/testsuite/gcc.dg/pr116034.c +new file mode 100644 +index 00000000000..9a31de03424 +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/pr116034.c +@@ -0,0 +1,22 @@ ++/* PR tree-optimization/116034 */ ++/* { dg-do run } */ ++/* { dg-options "-O1 -fno-strict-aliasing" } */ ++ ++int g; ++ ++static inline int ++foo (_Complex unsigned short c) ++{ ++ __builtin_memmove (&g, 1 + (char *) &c, 2); ++ return g; ++} ++ ++int ++main () ++{ ++ if (__SIZEOF_SHORT__ == 2 ++ && __CHAR_BIT__ == 8 ++ && (foo (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 0x100 : 1) ++ != (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ ? 1 : 0x100))) ++ __builtin_abort (); ++} +--- a/gcc/tree-ssa.c ++++ b/gcc/tree-ssa.c +@@ -1506,7 +1506,10 @@ maybe_rewrite_mem_ref_base (tree *tp, bitmap suitable_for_renaming) + } + else if (TREE_CODE (TREE_TYPE (sym)) == COMPLEX_TYPE + && useless_type_conversion_p (TREE_TYPE (*tp), +- TREE_TYPE (TREE_TYPE (sym)))) ++ TREE_TYPE (TREE_TYPE (sym))) ++ && (integer_zerop (TREE_OPERAND (*tp, 1)) ++ || tree_int_cst_equal (TREE_OPERAND (*tp, 1), ++ TYPE_SIZE_UNIT (TREE_TYPE (*tp))))) + { + *tp = build1 (integer_zerop (TREE_OPERAND (*tp, 1)) + ? REALPART_EXPR : IMAGPART_EXPR, diff --git a/gcc11-pr96024.patch b/gcc11-pr96024.patch deleted file mode 100644 index fd883f1..0000000 --- a/gcc11-pr96024.patch +++ /dev/null @@ -1,40 +0,0 @@ -commit 7f875e435b23dfb439bc7784cade4aebbd5d4a69 -Author: Jakub Jelinek -Date: Fri Jun 9 09:10:29 2023 +0200 - - fortran: Fix ICE on pr96024.f90 on big-endian hosts [PR96024] - - The pr96024.f90 testcase ICEs on big-endian hosts. The problem is - that length->val.integer is accessed after checking - length->expr_type == EXPR_CONSTANT, but it is a CHARACTER constant - which uses length->val.character union member instead and on big-endian - we end up reading constant 0x100000000 rather than some small number - on little-endian and if target doesn't have enough memory for 4 times - that (i.e. 16GB allocation), it ICEs. - - 2023-06-09 Jakub Jelinek - - PR fortran/96024 - * primary.c (gfc_convert_to_structure_constructor): Only do - constant string ctor length verification and truncation/padding - if constant length has INTEGER type. - - (cherry picked from commit 4cf6e322adc19f927859e0a5edfa93cec4b8c844) - -diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c -index 1b93f96367f..5cad2d2682b 100644 ---- a/gcc/fortran/primary.c -+++ b/gcc/fortran/primary.c -@@ -3188,10 +3188,11 @@ gfc_convert_to_structure_constructor (gfc_expr *e, gfc_symbol *sym, gfc_expr **c - goto cleanup; - - /* For a constant string constructor, make sure the length is -- correct; truncate of fill with blanks if needed. */ -+ correct; truncate or fill with blanks if needed. */ - if (this_comp->ts.type == BT_CHARACTER && !this_comp->attr.allocatable - && this_comp->ts.u.cl && this_comp->ts.u.cl->length - && this_comp->ts.u.cl->length->expr_type == EXPR_CONSTANT -+ && this_comp->ts.u.cl->length->ts.type == BT_INTEGER - && actual->expr->ts.type == BT_CHARACTER - && actual->expr->expr_type == EXPR_CONSTANT) - { diff --git a/gcc11-testsuite-aarch64-add-fno-stack-protector.patch b/gcc11-testsuite-aarch64-add-fno-stack-protector.patch new file mode 100644 index 0000000..0ab9be8 --- /dev/null +++ b/gcc11-testsuite-aarch64-add-fno-stack-protector.patch @@ -0,0 +1,348 @@ +From 3439b79cb7f97464d65316a94d40d49505fb2150 Mon Sep 17 00:00:00 2001 +From: Marek Polacek +Date: Wed, 6 Dec 2023 15:34:24 -0500 +Subject: [PATCH] aarch64: add -fno-stack-protector to tests + +These tests fail when the testsuite is executed with -fstack-protector-strong. +To avoid this, this patch adds -fno-stack-protector to dg-options. + +--- + gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-12.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c | 4 ++-- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c | 4 ++-- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c | 2 +- + gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c | 2 +- + gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_1.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_10.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_11.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_13.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_15.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_2.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_4.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_6.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_7.c | 2 +- + gcc/testsuite/gcc.target/aarch64/test_frame_8.c | 2 +- + 30 files changed, 32 insertions(+), 32 deletions(-) + +diff --git a/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c b/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c +index 1e46755a39a..50d7d7a2d5d 100644 +--- a/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c ++++ b/gcc/testsuite/gcc.target/aarch64/ldp_stp_unaligned_2.c +@@ -1,4 +1,4 @@ +-/* { dg-options "-O2 -fomit-frame-pointer" } */ ++/* { dg-options "-O2 -fomit-frame-pointer -fno-stack-protector" } */ + + /* Check that we split unaligned LDP/STP into base and aligned offset. */ + +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-12.c b/gcc/testsuite/gcc.target/aarch64/stack-check-12.c +index be5a57a9ec6..e1a4c67b041 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-12.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-12.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-asynchronous-unwind-tables -fno-unwind-tables" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-asynchronous-unwind-tables -fno-unwind-tables -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + typedef unsigned __attribute__((mode(DI))) uint64_t; +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c +index 741f2f5fadc..d57aece05bb 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-11.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + #define SIZE (6 * 64 * 1024) + (1 * 32 * 1024) +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c +index ece68003ade..895d130e4fa 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-12.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + void +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c +index 0fc900c6943..1f1a6c497be 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-13.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + void h (void) __attribute__ ((noreturn)); +@@ -17,4 +17,4 @@ f (void) + + /* SIZE is more than 1 guard-size, but only one 64KB page is used, expect only 1 + probe. Leaf function and omitting leaf pointers, tail call to noreturn which +- may only omit an epilogue and not a prologue. Checking for LR saving. */ +\ No newline at end of file ++ may only omit an epilogue and not a prologue. Checking for LR saving. */ +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c +index ea733f861e7..facb3cb72a7 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-14.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + void h (void) __attribute__ ((noreturn)); +@@ -21,4 +21,4 @@ f (void) + probe at 1024 and one implicit probe due to LR being saved. Leaf function + and omitting leaf pointers, tail call to noreturn which may only omit an + epilogue and not a prologue and control flow in between. Checking for +- LR saving. */ +\ No newline at end of file ++ LR saving. */ +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c +index 63df4a5609a..f2ac60a6214 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-15.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fomit-frame-pointer -momit-leaf-frame-pointer -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + void g (volatile int *x) ; +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c +index f0ec1389771..1cf6fbbb085 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-17.c +@@ -1,4 +1,4 @@ +-/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */ ++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fno-stack-protector" } */ + /* { dg-final { check-function-bodies "**" "" } } */ + + void f(int, ...); +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c +index 6383bec5ebc..2e06346c158 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-18.c +@@ -1,4 +1,4 @@ +-/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12" } */ ++/* { dg-options "-O2 -fstack-clash-protection -fomit-frame-pointer --param stack-clash-protection-guard-size=12 -fno-stack-protector" } */ + /* { dg-final { check-function-bodies "**" "" } } */ + + void f(int, ...); +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c +index 61c52a251a7..b37f62cad27 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-2.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + #define SIZE 2 * 1024 +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c +index 2ee16350127..34a438671d0 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-5.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + #define SIZE 64 * 1024 +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c +index 3c9b606cbe0..a4e34e2fe6a 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-6.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + #define SIZE 65 * 1024 +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c +index 333f5fcc360..277dce4c71e 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-8.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + #define SIZE 128 * 1024 +diff --git a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c +index a3ff89b5581..a21305541c1 100644 +--- a/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c ++++ b/gcc/testsuite/gcc.target/aarch64/stack-check-prologue-9.c +@@ -1,5 +1,5 @@ + /* { dg-do compile } */ +-/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O2 -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ + + #define SIZE 6 * 64 * 1024 +diff --git a/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c b/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c +index 68a9d5e3d2e..19be6de0c2e 100644 +--- a/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c ++++ b/gcc/testsuite/gcc.target/aarch64/sve/struct_vect_24.c +@@ -1,6 +1,6 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target supports_stack_clash_protection } */ +-/* { dg-options "-O3 -fopenmp-simd -fstack-clash-protection --param stack-clash-protection-guard-size=16" } */ ++/* { dg-options "-O3 -fopenmp-simd -fstack-clash-protection --param stack-clash-protection-guard-size=16 -fno-stack-protector" } */ + + #include + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_1.c b/gcc/testsuite/gcc.target/aarch64/test_frame_1.c +index f906b073545..c9b8822b4b1 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_1.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_1.c +@@ -6,7 +6,7 @@ + * optimized code should use "str !" for stack adjustment. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_10.c b/gcc/testsuite/gcc.target/aarch64/test_frame_10.c +index c54ab2d0ccb..fe5cbd9ed05 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_10.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_10.c +@@ -7,7 +7,7 @@ + * Use a single stack adjustment, no writeback. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_11.c b/gcc/testsuite/gcc.target/aarch64/test_frame_11.c +index f162cc091e0..11cf471168d 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_11.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_11.c +@@ -5,7 +5,7 @@ + * optimized code should use "stp !" for stack adjustment. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 --save-temps" } */ ++/* { dg-options "-O2 --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_13.c b/gcc/testsuite/gcc.target/aarch64/test_frame_13.c +index 74b3370fa46..ec56963c038 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_13.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_13.c +@@ -5,7 +5,7 @@ + * Use a single stack adjustment, no writeback. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 --save-temps" } */ ++/* { dg-options "-O2 --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_15.c b/gcc/testsuite/gcc.target/aarch64/test_frame_15.c +index bed6714b4fe..4247008de8e 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_15.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_15.c +@@ -6,7 +6,7 @@ + * Use a single stack adjustment, no writeback. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 --save-temps" } */ ++/* { dg-options "-O2 --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_2.c b/gcc/testsuite/gcc.target/aarch64/test_frame_2.c +index 0d715314cb8..9c4243b6480 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_2.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_2.c +@@ -6,7 +6,7 @@ + * optimized code should use "stp !" for stack adjustment. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_4.c b/gcc/testsuite/gcc.target/aarch64/test_frame_4.c +index b41229c42f4..8d0bed93e44 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_4.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_4.c +@@ -6,7 +6,7 @@ + * we can use "stp !" to optimize stack adjustment. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_6.c b/gcc/testsuite/gcc.target/aarch64/test_frame_6.c +index 56259c945d2..2944a8bbe16 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_6.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_6.c +@@ -6,7 +6,7 @@ + * use a single stack adjustment, no writeback. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_7.c b/gcc/testsuite/gcc.target/aarch64/test_frame_7.c +index 5702656a5da..ca371632d81 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_7.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_7.c +@@ -6,7 +6,7 @@ + * use a single stack adjustment, no writeback. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + +diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_8.c b/gcc/testsuite/gcc.target/aarch64/test_frame_8.c +index 75a68b41e08..084e8fac373 100644 +--- a/gcc/testsuite/gcc.target/aarch64/test_frame_8.c ++++ b/gcc/testsuite/gcc.target/aarch64/test_frame_8.c +@@ -5,7 +5,7 @@ + * number of callee-saved reg == 1. */ + + /* { dg-do run } */ +-/* { dg-options "-O2 -fomit-frame-pointer --save-temps" } */ ++/* { dg-options "-O2 -fomit-frame-pointer --save-temps -fno-stack-protector" } */ + + #include "test_frame_common.h" + + +base-commit: 1bd15d87031e8bf8fe9585fbc166b315303f676c +-- +2.43.0 + diff --git a/gcc11-testsuite-fixes-3.patch b/gcc11-testsuite-fixes-3.patch new file mode 100644 index 0000000..25ea3a9 --- /dev/null +++ b/gcc11-testsuite-fixes-3.patch @@ -0,0 +1,150 @@ +commit f1b1d515aa5836844cdb45e8bb2b941784f78fd2 +Author: Jakub Jelinek +Date: Mon Apr 22 18:00:06 2024 +0200 + + libstdc++: Workaround kernel-headers on s390x-linux + + We see + FAIL: 17_intro/headers/c++1998/all_attributes.cc (test for excess errors) + FAIL: 17_intro/headers/c++2011/all_attributes.cc (test for excess errors) + FAIL: 17_intro/headers/c++2014/all_attributes.cc (test for excess errors) + FAIL: 17_intro/headers/c++2017/all_attributes.cc (test for excess errors) + FAIL: 17_intro/headers/c++2020/all_attributes.cc (test for excess errors) + FAIL: 17_intro/names.cc -std=gnu++17 (test for excess errors) + on s390x-linux. + The first 5 are due to kernel-headers not using uglified attribute names, + where contains + __attribute__((packed, aligned(4))) + I've filed a downstream bugreport for this in + https://bugzilla.redhat.com/show_bug.cgi?id=2276084 + (not really sure where to report kernel-headers issues upstream), while the + last one is due to from glibc containing: + #ifdef __USE_MISC + # define __ctx(fld) fld + #else + # define __ctx(fld) __ ## fld + #endif + ... + typedef union + { + double __ctx(d); + float __ctx(f); + } fpreg_t; + and g++ predefining -D_GNU_SOURCE which implies define __USE_MISC. + + The following patch adds a workaround for this on the libstdc++ testsuite + side. + + 2024-04-22 Jakub Jelinek + + * testsuite/17_intro/names.cc (d, f): Undefine on s390*-linux*. + * testsuite/17_intro/headers/c++1998/all_attributes.cc (packed): Don't + define on s390. + * testsuite/17_intro/headers/c++2011/all_attributes.cc (packed): + Likewise. + * testsuite/17_intro/headers/c++2014/all_attributes.cc (packed): + Likewise. + * testsuite/17_intro/headers/c++2017/all_attributes.cc (packed): + Likewise. + * testsuite/17_intro/headers/c++2020/all_attributes.cc (packed): + Likewise. + + (cherry picked from commit cf5f7791056b3ed993bc8024be767a86157514a9) + +diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc +index 74268b6a482..658063bd0a4 100644 +--- a/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc ++++ b/libstdc++-v3/testsuite/17_intro/headers/c++1998/all_attributes.cc +@@ -29,7 +29,11 @@ + # define noreturn 1 + # define visibility 1 + #endif ++#ifndef __s390__ ++// kernel-headers uses __attribute__((packed,aligned(4))) on ++// S390. + #define packed 1 ++#endif + #define pure 1 + // glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. + #ifndef __arm__ +diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc +index 5d0c5fe8177..f1bcc1fbbc8 100644 +--- a/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc ++++ b/libstdc++-v3/testsuite/17_intro/headers/c++2011/all_attributes.cc +@@ -29,7 +29,11 @@ + # define visibility 1 + #endif + #define no_unique_address 1 ++#ifndef __s390__ ++// kernel-headers uses __attribute__((packed,aligned(4))) on ++// S390. + #define packed 1 ++#endif + #define pure 1 + // glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. + #ifndef __arm__ +diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc +index 3cac2190ec7..48e7ef64afb 100644 +--- a/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc ++++ b/libstdc++-v3/testsuite/17_intro/headers/c++2014/all_attributes.cc +@@ -29,7 +29,11 @@ + # define visibility 1 + #endif + #define no_unique_address 1 ++#ifndef __s390__ ++// kernel-headers uses __attribute__((packed,aligned(4))) on ++// S390. + #define packed 1 ++#endif + #define pure 1 + // glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. + #ifndef __arm__ +diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc +index f607532aa90..03e4e23c686 100644 +--- a/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc ++++ b/libstdc++-v3/testsuite/17_intro/headers/c++2017/all_attributes.cc +@@ -28,7 +28,11 @@ + # define visibility 1 + #endif + #define no_unique_address 1 ++#ifndef __s390__ ++// kernel-headers uses __attribute__((packed,aligned(4))) on ++// S390. + #define packed 1 ++#endif + #define pure 1 + // glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. + #ifndef __arm__ +diff --git a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc +index 5732633c7e4..7375dc88bb1 100644 +--- a/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc ++++ b/libstdc++-v3/testsuite/17_intro/headers/c++2020/all_attributes.cc +@@ -27,7 +27,11 @@ + # define cold 1 + # define visibility 1 + #endif ++#ifndef __s390__ ++// kernel-headers uses __attribute__((packed,aligned(4))) on ++// S390. + #define packed 1 ++#endif + #define pure 1 + // glibc's sysdeps/unix/sysv/linux/arm/sys/ucontext.h uses this on ARM. + #ifndef __arm__ +diff --git a/libstdc++-v3/testsuite/17_intro/names.cc b/libstdc++-v3/testsuite/17_intro/names.cc +index eb4d064177c..864bc20f146 100644 +--- a/libstdc++-v3/testsuite/17_intro/names.cc ++++ b/libstdc++-v3/testsuite/17_intro/names.cc +@@ -267,6 +267,12 @@ + #undef u + #endif + ++#if defined (__linux__) && defined (__s390__) ++// defines fpreg_t::d and fpreg_t::f ++#undef d ++#undef f ++#endif ++ + #if defined (__linux__) && defined (__sparc__) + #undef y + #endif diff --git a/sources b/sources index 66ef21c..d0cbc35 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (gcc-11.4.1-20230605.tar.xz) = 524e57dc5e4d0622597de820a2126621607222492acdfb8c11865b8eff8fe3efc41270856e7ee4b054007f35e8fd4dc7f336274c7a34009ec67d2e9a491d2724 +SHA512 (gcc-11.5.0-20240719.tar.xz) = 8996ff2aaad765521303f0bde46e4c53992de266062ceabaef0b311ef68be6068e9b0002a57c036d898a6d58735f4d1884e6a7a152c567f941adb200d076fcd4 SHA512 (isl-0.18.tar.bz2) = 85d0b40f4dbf14cb99d17aa07048cdcab2dc3eb527d2fbb1e84c41b2de5f351025370e57448b63b2b8a8cf8a0843a089c3263f9baee1542d5c2e1cb37ed39d94 SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 002a48a7b689a81abbf16161bcaec001a842e67dfbe372e9e109092703bfc666675f16198f60ca429370e8850d564547dc505df81bc3aaca4ce6defbc014ad6c SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7