diff --git a/devel/gcc/Makefile b/devel/gcc/Makefile index 554ba0b87..70b547a59 100644 --- a/devel/gcc/Makefile +++ b/devel/gcc/Makefile @@ -42,8 +42,8 @@ ifeq ($(PKG_VERSION),10.3.0) PKG_HASH:=64f404c1a650f27fc33da242e1f2df54952e3963a49e06e73f6940f3223ac344 endif -ifeq ($(PKG_VERSION),11.3.0) - PKG_HASH:=b47cf2818691f5b1e21df2bb38c795fac2cfbd640ede2d0a5e1c89e338a3ac39 +ifeq ($(PKG_VERSION),11.2.0) + PKG_HASH:=d08edc536b54c372a1010ff6619dd274c0f1603aa49212ba20f7aa2cda36fa8b endif PATCH_DIR=./patches/$(GCC_VERSION) diff --git a/devel/gcc/patches/11.2.0/001-v11.3.0-ranger-Fix-up-fold_using_range-range_of_address-PR10.patch b/devel/gcc/patches/11.2.0/001-v11.3.0-ranger-Fix-up-fold_using_range-range_of_address-PR10.patch new file mode 100644 index 000000000..71bbfe5a1 --- /dev/null +++ b/devel/gcc/patches/11.2.0/001-v11.3.0-ranger-Fix-up-fold_using_range-range_of_address-PR10.patch @@ -0,0 +1,114 @@ +From a6219e8e0719b14f474b0dcaa7bde2f4e57474f9 Mon Sep 17 00:00:00 2001 +From: Jakub Jelinek +Date: Wed, 17 Nov 2021 13:45:53 +0100 +Subject: [PATCH] ranger: Fix up fold_using_range::range_of_address [PR103255] + +If on &base->member the offset isn't constant or isn't zero and +-fdelete-null-pointer-checks and not -fwrapv-pointer and base has a range +that doesn't include NULL, we return the range of the base. +Usually it isn't a big deal, because for most pointers we just use +varying, range_zero and range_nonzero ranges and nothing beyond that, +but if a pointer is initialized from a constant, we actually track the +exact range and in that case this causes miscompilation. +As discussed on IRC, I think doing something like: + offset_int off2; + if (off_cst && off.is_constant (&off2)) + { + tree cst = wide_int_to_tree (sizetype, off2 / BITS_PER_UNIT); + // adjust range r with POINTER_PLUS_EXPR cst + if (!range_includes_zero_p (&r)) + return true; + } + // Fallback + r = range_nonzero (TREE_TYPE (gimple_assign_rhs1 (stmt))); + return true; +could work, given that most of the pointer ranges are just the simple ones +perhaps it is too much for little benefit. + +2021-11-17 Jakub Jelinek + + PR tree-optimization/103255 + * gimple-range.cc (fold_using_range::range_of_address): Return + range_nonzero rather than unadjusted base's range. Formatting fixes. + + * gcc.c-torture/execute/pr103255.c: New test. + +(cherry picked from commit c39cb6bf835ca12e590eaa6f90222e51be207c50) +--- + gcc/gimple-range.cc | 16 +++++--- + .../gcc.c-torture/execute/pr103255.c | 41 +++++++++++++++++++ + 2 files changed, 52 insertions(+), 5 deletions(-) + create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr103255.c + +--- a/gcc/gimple-range.cc ++++ b/gcc/gimple-range.cc +@@ -491,14 +491,20 @@ gimple_ranger::range_of_address (irange + } + /* If &X->a is equal to X, the range of X is the result. */ + if (off_cst && known_eq (off, 0)) +- return true; ++ return true; + else if (flag_delete_null_pointer_checks + && !TYPE_OVERFLOW_WRAPS (TREE_TYPE (expr))) + { +- /* For -fdelete-null-pointer-checks -fno-wrapv-pointer we don't +- allow going from non-NULL pointer to NULL. */ +- if(!range_includes_zero_p (&r)) +- return true; ++ /* For -fdelete-null-pointer-checks -fno-wrapv-pointer we don't ++ allow going from non-NULL pointer to NULL. */ ++ if (!range_includes_zero_p (&r)) ++ { ++ /* We could here instead adjust r by off >> LOG2_BITS_PER_UNIT ++ using POINTER_PLUS_EXPR if off_cst and just fall back to ++ this. */ ++ r = range_nonzero (TREE_TYPE (gimple_assign_rhs1 (stmt))); ++ return true; ++ } + } + /* If MEM_REF has a "positive" offset, consider it non-NULL + always, for -fdelete-null-pointer-checks also "negative" +--- /dev/null ++++ b/gcc/testsuite/gcc.c-torture/execute/pr103255.c +@@ -0,0 +1,41 @@ ++/* PR tree-optimization/103255 */ ++ ++struct H ++{ ++ unsigned a; ++ unsigned b; ++ unsigned c; ++}; ++ ++#if __SIZEOF_POINTER__ >= 4 ++#define ADDR 0x400000 ++#else ++#define ADDR 0x4000 ++#endif ++#define OFF 0x20 ++ ++int ++main () ++{ ++ struct H *h = 0; ++ unsigned long o; ++ volatile int t = 1; ++ ++ for (o = OFF; o <= OFF; o += 0x1000) ++ { ++ struct H *u; ++ u = (struct H *) (ADDR + o); ++ if (t) ++ { ++ h = u; ++ break; ++ } ++ } ++ ++ if (h == 0) ++ return 0; ++ unsigned *tt = &h->b; ++ if ((__SIZE_TYPE__) tt != (ADDR + OFF + __builtin_offsetof (struct H, b))) ++ __builtin_abort (); ++ return 0; ++} diff --git a/devel/gcc/patches/11.3.0/002-case_insensitive.patch b/devel/gcc/patches/11.2.0/002-case_insensitive.patch similarity index 100% rename from devel/gcc/patches/11.3.0/002-case_insensitive.patch rename to devel/gcc/patches/11.2.0/002-case_insensitive.patch diff --git a/devel/gcc/patches/11.3.0/003-dont-choke-when-building-32bit-on-64bit.patch b/devel/gcc/patches/11.2.0/003-dont-choke-when-building-32bit-on-64bit.patch similarity index 100% rename from devel/gcc/patches/11.3.0/003-dont-choke-when-building-32bit-on-64bit.patch rename to devel/gcc/patches/11.2.0/003-dont-choke-when-building-32bit-on-64bit.patch diff --git a/devel/gcc/patches/11.3.0/010-documentation.patch b/devel/gcc/patches/11.2.0/010-documentation.patch similarity index 94% rename from devel/gcc/patches/11.3.0/010-documentation.patch rename to devel/gcc/patches/11.2.0/010-documentation.patch index 25a5e1e99..885bd0301 100644 --- a/devel/gcc/patches/11.3.0/010-documentation.patch +++ b/devel/gcc/patches/11.2.0/010-documentation.patch @@ -12,7 +12,7 @@ Date: Tue Feb 26 16:16:33 2013 +0000 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in -@@ -3348,18 +3348,10 @@ doc/gcc.info: $(TEXI_GCC_FILES) +@@ -3355,18 +3355,10 @@ doc/gcc.info: $(TEXI_GCC_FILES) doc/gccint.info: $(TEXI_GCCINT_FILES) doc/cppinternals.info: $(TEXI_CPPINT_FILES) diff --git a/devel/gcc/patches/11.3.0/011-v12-configure-define-TARGET_LIBC_GNUSTACK-on-musl.patch b/devel/gcc/patches/11.2.0/011-v12-configure-define-TARGET_LIBC_GNUSTACK-on-musl.patch similarity index 96% rename from devel/gcc/patches/11.3.0/011-v12-configure-define-TARGET_LIBC_GNUSTACK-on-musl.patch rename to devel/gcc/patches/11.2.0/011-v12-configure-define-TARGET_LIBC_GNUSTACK-on-musl.patch index 423def600..94105bdf9 100644 --- a/devel/gcc/patches/11.3.0/011-v12-configure-define-TARGET_LIBC_GNUSTACK-on-musl.patch +++ b/devel/gcc/patches/11.2.0/011-v12-configure-define-TARGET_LIBC_GNUSTACK-on-musl.patch @@ -22,7 +22,7 @@ Signed-off-by: Ilya Lipnitskiy --- a/gcc/configure +++ b/gcc/configure -@@ -31533,6 +31533,9 @@ fi +@@ -30954,6 +30954,9 @@ fi # Check if the target LIBC handles PT_GNU_STACK. gcc_cv_libc_gnustack=unknown case "$target" in @@ -34,7 +34,7 @@ Signed-off-by: Ilya Lipnitskiy if test $glibc_version_major -gt 2 \ --- a/gcc/configure.ac +++ b/gcc/configure.ac -@@ -7023,6 +7023,9 @@ fi +@@ -6788,6 +6788,9 @@ fi # Check if the target LIBC handles PT_GNU_STACK. gcc_cv_libc_gnustack=unknown case "$target" in diff --git a/devel/gcc/patches/11.3.0/110-Fix-MIPS-PR-84790.patch b/devel/gcc/patches/11.2.0/110-Fix-MIPS-PR-84790.patch similarity index 100% rename from devel/gcc/patches/11.3.0/110-Fix-MIPS-PR-84790.patch rename to devel/gcc/patches/11.2.0/110-Fix-MIPS-PR-84790.patch diff --git a/devel/gcc/patches/11.3.0/230-musl_libssp.patch b/devel/gcc/patches/11.2.0/230-musl_libssp.patch similarity index 100% rename from devel/gcc/patches/11.3.0/230-musl_libssp.patch rename to devel/gcc/patches/11.2.0/230-musl_libssp.patch diff --git a/devel/gcc/patches/11.3.0/300-mips_Os_cpu_rtx_cost_model.patch b/devel/gcc/patches/11.2.0/300-mips_Os_cpu_rtx_cost_model.patch similarity index 100% rename from devel/gcc/patches/11.3.0/300-mips_Os_cpu_rtx_cost_model.patch rename to devel/gcc/patches/11.2.0/300-mips_Os_cpu_rtx_cost_model.patch diff --git a/devel/gcc/patches/11.3.0/810-arm-softfloat-libgcc.patch b/devel/gcc/patches/11.2.0/810-arm-softfloat-libgcc.patch similarity index 100% rename from devel/gcc/patches/11.3.0/810-arm-softfloat-libgcc.patch rename to devel/gcc/patches/11.2.0/810-arm-softfloat-libgcc.patch diff --git a/devel/gcc/patches/11.3.0/820-libgcc_pic.patch b/devel/gcc/patches/11.2.0/820-libgcc_pic.patch similarity index 100% rename from devel/gcc/patches/11.3.0/820-libgcc_pic.patch rename to devel/gcc/patches/11.2.0/820-libgcc_pic.patch diff --git a/devel/gcc/patches/11.3.0/840-armv4_pass_fix-v4bx_to_ld.patch b/devel/gcc/patches/11.2.0/840-armv4_pass_fix-v4bx_to_ld.patch similarity index 100% rename from devel/gcc/patches/11.3.0/840-armv4_pass_fix-v4bx_to_ld.patch rename to devel/gcc/patches/11.2.0/840-armv4_pass_fix-v4bx_to_ld.patch diff --git a/devel/gcc/patches/11.3.0/850-use_shared_libgcc.patch b/devel/gcc/patches/11.2.0/850-use_shared_libgcc.patch similarity index 100% rename from devel/gcc/patches/11.3.0/850-use_shared_libgcc.patch rename to devel/gcc/patches/11.2.0/850-use_shared_libgcc.patch diff --git a/devel/gcc/patches/11.3.0/851-libgcc_no_compat.patch b/devel/gcc/patches/11.2.0/851-libgcc_no_compat.patch similarity index 100% rename from devel/gcc/patches/11.3.0/851-libgcc_no_compat.patch rename to devel/gcc/patches/11.2.0/851-libgcc_no_compat.patch diff --git a/devel/gcc/patches/11.3.0/870-ppc_no_crtsavres.patch b/devel/gcc/patches/11.2.0/870-ppc_no_crtsavres.patch similarity index 100% rename from devel/gcc/patches/11.3.0/870-ppc_no_crtsavres.patch rename to devel/gcc/patches/11.2.0/870-ppc_no_crtsavres.patch diff --git a/devel/gcc/patches/11.3.0/881-no_tm_section.patch b/devel/gcc/patches/11.2.0/881-no_tm_section.patch similarity index 100% rename from devel/gcc/patches/11.3.0/881-no_tm_section.patch rename to devel/gcc/patches/11.2.0/881-no_tm_section.patch diff --git a/devel/gcc/patches/11.3.0/900-bad-mips16-crt.patch b/devel/gcc/patches/11.2.0/900-bad-mips16-crt.patch similarity index 100% rename from devel/gcc/patches/11.3.0/900-bad-mips16-crt.patch rename to devel/gcc/patches/11.2.0/900-bad-mips16-crt.patch diff --git a/devel/gcc/patches/11.3.0/910-mbsd_multi.patch b/devel/gcc/patches/11.2.0/910-mbsd_multi.patch similarity index 97% rename from devel/gcc/patches/11.3.0/910-mbsd_multi.patch rename to devel/gcc/patches/11.2.0/910-mbsd_multi.patch index 21f532043..9f9d3226e 100644 --- a/devel/gcc/patches/11.3.0/910-mbsd_multi.patch +++ b/devel/gcc/patches/11.2.0/910-mbsd_multi.patch @@ -40,7 +40,7 @@ Date: Tue Jul 31 00:52:27 2007 +0000 case OPT_fconstant_string_class_: constant_string_class_name = arg; break; -@@ -1198,6 +1207,47 @@ c_common_init (void) +@@ -1196,6 +1205,47 @@ c_common_init (void) return false; } @@ -114,7 +114,7 @@ Date: Tue Jul 31 00:52:27 2007 +0000 ; On SVR4 targets, it also controls whether or not to emit a --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi -@@ -9058,6 +9058,17 @@ This option is only supported for C and +@@ -9055,6 +9055,17 @@ This option is only supported for C and @option{-Wall} and by @option{-Wpedantic}, which can be disabled with @option{-Wno-pointer-sign}. diff --git a/devel/gcc/patches/11.3.0/920-specs_nonfatal_getenv.patch b/devel/gcc/patches/11.2.0/920-specs_nonfatal_getenv.patch similarity index 90% rename from devel/gcc/patches/11.3.0/920-specs_nonfatal_getenv.patch rename to devel/gcc/patches/11.2.0/920-specs_nonfatal_getenv.patch index 83bcb25a8..dda33c020 100644 --- a/devel/gcc/patches/11.3.0/920-specs_nonfatal_getenv.patch +++ b/devel/gcc/patches/11.2.0/920-specs_nonfatal_getenv.patch @@ -7,7 +7,7 @@ Date: Sat Apr 21 03:02:39 2012 +0000 --- a/gcc/gcc.c +++ b/gcc/gcc.c -@@ -10106,8 +10106,10 @@ getenv_spec_function (int argc, const ch +@@ -10100,8 +10100,10 @@ getenv_spec_function (int argc, const ch } if (!value) diff --git a/devel/gcc/patches/11.3.0/931-libffi-fix-MIPS-softfloat-build-issue.patch b/devel/gcc/patches/11.2.0/931-libffi-fix-MIPS-softfloat-build-issue.patch similarity index 100% rename from devel/gcc/patches/11.3.0/931-libffi-fix-MIPS-softfloat-build-issue.patch rename to devel/gcc/patches/11.2.0/931-libffi-fix-MIPS-softfloat-build-issue.patch diff --git a/devel/gcc/patches/11.3.0/960-gotools-fix-compilation-when-making-cross-compiler.patch b/devel/gcc/patches/11.2.0/960-gotools-fix-compilation-when-making-cross-compiler.patch similarity index 100% rename from devel/gcc/patches/11.3.0/960-gotools-fix-compilation-when-making-cross-compiler.patch rename to devel/gcc/patches/11.2.0/960-gotools-fix-compilation-when-making-cross-compiler.patch diff --git a/devel/gcc/patches/11.3.0/970-macos_arm64-building-fix.patch b/devel/gcc/patches/11.2.0/970-macos_arm64-building-fix.patch similarity index 100% rename from devel/gcc/patches/11.3.0/970-macos_arm64-building-fix.patch rename to devel/gcc/patches/11.2.0/970-macos_arm64-building-fix.patch diff --git a/devel/gcc/patches/11.2.0/980-add-nostdinc++.patch b/devel/gcc/patches/11.2.0/980-add-nostdinc++.patch new file mode 100644 index 000000000..c1fe3e5f7 --- /dev/null +++ b/devel/gcc/patches/11.2.0/980-add-nostdinc++.patch @@ -0,0 +1,73 @@ +From: Jonathan Wakely +Date: Fri, 7 Jan 2022 15:21:03 +0000 (+0000) +Subject: libstdc++: Add -nostdinc++ for c++17 sources [PR100017] +X-Git-Tag: releases/gcc-11.3.0~445 +X-Git-Url: https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff_plain;h=01a70ccd723eb9a479186fe37c972b0d0f8676cf + +libstdc++: Add -nostdinc++ for c++17 sources [PR100017] + +When building a build!=host compiler, the just-built gcc can't be used +to build the target libstdc++ (because it is built for the host triplet, +not the build triplet). The top-level configure.ac sets up the build +flags for libstdc++ (and other "raw_cxx" libs) like this: + +GCC_TARGET_TOOL(c++ for libstdc++, RAW_CXX_FOR_TARGET, CXX, + [gcc/xgcc -shared-libgcc -B$$r/$(HOST_SUBDIR)/gcc -nostdinc++ -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/src/.libs -L$$r/$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs], + c++) + +The -nostdinc++ flag is only used for the IN-TREE-TOOL, i.e. when using +the just-built gcc/xgcc compiler. This means that the cross-compiler +used to build libstdc++ will add its own libstdc++ headers to the +include path. That results in the #include in +src/c++17/floating_to_chars.cc and src/c++17/floating_from_chars.cc +doing #include_next and finding the libstdc++ fenv.h wrapper +from the host compiler. Because that has the same include guard as the + in the libstdc++ we're trying to build, we never reach the +underlying from libc. That results in several errors of the +form: + +error: 'fenv_t' has not been declared in '::' + +The most correct fix would be to add -nostdinc++ to the +RAW_CXX_FOR_TARGET variable in configure.ac, or the +RAW_CXX_TARGET_EXPORTS variable in Makefile.tpl. + +Another solution would be to make the libstdc++ wrapper use +_GLIBCXX_INCLUDE_NEXT_C_HEADERS like our and other C header +wrappers. + +For now though, the simplest and safest solution is to just add +-nostdinc++ to the CXXFLAGS used for src/c++17/*.cc, which is what this +does. + +libstdc++-v3/ChangeLog: + + PR libstdc++/100017 + * src/c++17/Makefile.am (AM_CXXFLAGS): Add -nostdinc++. + * src/c++17/Makefile.in: Regenerate. + +(cherry picked from commit 4fde88e5dd152fe866a97b12e0f8229970d15cb3) +--- + +--- a/libstdc++-v3/src/c++17/Makefile.am ++++ b/libstdc++-v3/src/c++17/Makefile.am +@@ -79,7 +79,7 @@ endif + # OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden + # as the occasion calls for it. + AM_CXXFLAGS = \ +- -std=gnu++17 \ ++ -std=gnu++17 -nostdinc++ \ + $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ + $(XTEMPLATE_FLAGS) $(VTV_CXXFLAGS) \ + $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) \ +--- a/libstdc++-v3/src/c++17/Makefile.in ++++ b/libstdc++-v3/src/c++17/Makefile.in +@@ -455,7 +455,7 @@ libc__17convenience_la_SOURCES = $(sourc + # OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden + # as the occasion calls for it. + AM_CXXFLAGS = \ +- -std=gnu++17 \ ++ -std=gnu++17 -nostdinc++ \ + $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ + $(XTEMPLATE_FLAGS) $(VTV_CXXFLAGS) \ + $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) \