From f58fc62400f4681345eeafc53d0149eeff774e54 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Feb 12 2022 18:36:08 +0000 Subject: 12.0.1-0.7 --- diff --git a/.gitignore b/.gitignore index c53c35a..b81e2a3 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ /gcc-12.0.1-20220129.tar.xz /gcc-12.0.1-20220202.tar.xz /gcc-12.0.1-20220205.tar.xz +/gcc-12.0.1-20220212.tar.xz diff --git a/gcc.spec b/gcc.spec index 3695272..c4a52ba 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,5 +1,5 @@ -%global DATE 20220205 -%global gitrev 76de92944e8628662e44eab3065caad0a3c0e032 +%global DATE 20220212 +%global gitrev dfda32cd0cba98db0f084f7d4ded68140e925e41 %global gcc_version 12.0.1 %global gcc_major 12 # Note, gcc_release must be integer, if you want to add suffixes to @@ -120,7 +120,7 @@ Summary: Various compilers (C, C++, Objective-C, ...) Name: gcc Version: %{gcc_version} -Release: %{gcc_release}.6%{?dist} +Release: %{gcc_release}.7%{?dist} # libgcc, libgfortran, libgomp, libstdc++ and crtstuff have # GCC Runtime Exception. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD @@ -304,7 +304,7 @@ Patch109: gcc12-fortran-fdec-add-missing-indexes.patch %if %{build_go} # Avoid stripping these libraries and binaries. %global __os_install_post \ -chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.20.* \ +chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.21.* \ chmod 644 %{buildroot}%{_prefix}/bin/go.gcc \ chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc \ chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \ @@ -312,7 +312,7 @@ chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major} chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/test2json \ chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/vet \ %__os_install_post \ -chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.20.* \ +chmod 755 %{buildroot}%{_prefix}/%{_lib}/libgo.so.21.* \ chmod 755 %{buildroot}%{_prefix}/bin/go.gcc \ chmod 755 %{buildroot}%{_prefix}/bin/gofmt.gcc \ chmod 755 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo \ @@ -1464,7 +1464,7 @@ ln -sf ../../../libstdc++.so.6.*[0-9] libstdc++.so ln -sf ../../../libgfortran.so.5.* libgfortran.so ln -sf ../../../libgomp.so.1.* libgomp.so %if %{build_go} -ln -sf ../../../libgo.so.20.* libgo.so +ln -sf ../../../libgo.so.21.* libgo.so %endif %if %{build_libquadmath} ln -sf ../../../libquadmath.so.0.* libquadmath.so @@ -1494,7 +1494,7 @@ ln -sf ../../../../%{_lib}/libstdc++.so.6.*[0-9] libstdc++.so ln -sf ../../../../%{_lib}/libgfortran.so.5.* libgfortran.so ln -sf ../../../../%{_lib}/libgomp.so.1.* libgomp.so %if %{build_go} -ln -sf ../../../../%{_lib}/libgo.so.20.* libgo.so +ln -sf ../../../../%{_lib}/libgo.so.21.* libgo.so %endif %if %{build_libquadmath} ln -sf ../../../../%{_lib}/libquadmath.so.0.* libquadmath.so @@ -1615,8 +1615,8 @@ ln -sf ../`echo ../../../../lib/libgfortran.so.5.* | sed s~/lib/~/lib64/~` 64/li ln -sf ../`echo ../../../../lib/libgomp.so.1.* | sed s~/lib/~/lib64/~` 64/libgomp.so %if %{build_go} rm -f libgo.so -echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.20.* | sed 's,^.*libg,libg,'`' )' > libgo.so -echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.20.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so +echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > libgo.so +echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > 64/libgo.so %endif %if %{build_libquadmath} rm -f libquadmath.so @@ -1716,8 +1716,8 @@ ln -sf ../`echo ../../../../lib64/libgfortran.so.5.* | sed s~/../lib64/~/~` 32/l ln -sf ../`echo ../../../../lib64/libgomp.so.1.* | sed s~/../lib64/~/~` 32/libgomp.so %if %{build_go} rm -f libgo.so -echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.20.* | sed 's,^.*libg,libg,'`' )' > libgo.so -echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.20.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so +echo 'INPUT ( %{_prefix}/lib64/'`echo ../../../../lib64/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > libgo.so +echo 'INPUT ( %{_prefix}/lib/'`echo ../../../../lib64/libgo.so.21.* | sed 's,^.*libg,libg,'`' )' > 32/libgo.so %endif %if %{build_libquadmath} rm -f libquadmath.so @@ -1907,7 +1907,7 @@ chmod 755 %{buildroot}%{_prefix}/%{_lib}/liblsan.so.0.* %endif %if %{build_go} # Avoid stripping these libraries and binaries. -chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.20.* +chmod 644 %{buildroot}%{_prefix}/%{_lib}/libgo.so.21.* chmod 644 %{buildroot}%{_prefix}/bin/go.gcc chmod 644 %{buildroot}%{_prefix}/bin/gofmt.gcc chmod 644 %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/cgo @@ -3059,7 +3059,7 @@ end %doc rpm.doc/go/* %files -n libgo -%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.20* +%attr(755,root,root) %{_prefix}/%{_lib}/libgo.so.21* %doc rpm.doc/libgo/* %files -n libgo-devel @@ -3167,6 +3167,31 @@ end %endif %changelog +* Sat Feb 12 2022 Jakub Jelinek 12.0.1-0.7 +- update from trunk + - PRs analyzer/98797, analyzer/101081, analyzer/102052, analyzer/103872, + analyzer/104274, analyzer/104417, analyzer/104452, c++/80951, + c++/96242, c++/96876, c++/102204, c++/103706, c++/103752, c++/104033, + c++/104379, c++/104403, c++/104410, c++/104425, c++/104432, + c++/104472, c/104427, debug/104407, fortran/66193, fortran/104329, + libgomp/104385, libstdc++/104442, middle-end/100775, + middle-end/104402, middle-end/104446, middle-end/104450, + middle-end/104464, middle-end/104467, middle-end/104496, + rtl-optimization/104059, rtl-optimization/104153, + rtl-optimization/104198, rtl-optimization/104400, + rtl-optimization/104459, sanitizer/104449, target/35513, target/79754, + target/97005, target/97040, target/100593, target/102140, + target/103627, target/104117, target/104283, target/104327, + target/104345, target/104364, target/104441, target/104451, + target/104453, target/104456, target/104458, target/104462, + target/104469, target/104474, target/104502, testsuite/104481, + tree-optimization/102832, tree-optimization/104288, + tree-optimization/104373, tree-optimization/104420, + tree-optimization/104445, tree-optimization/104466, + tree-optimization/104479, tree-optimization/104499 +- fix handling of return in arm constexpr ctors and on all arches return in + constexpr dtors (PR c++/104513) + * Sat Feb 5 2022 Jakub Jelinek 12.0.1-0.6 - update from trunk - PRs analyzer/104369, c++/92385, c++/104079, c++/104300, c++/104302, diff --git a/gcc12-ifcvt-revert.patch b/gcc12-ifcvt-revert.patch index 2261669..dd13271 100644 --- a/gcc12-ifcvt-revert.patch +++ b/gcc12-ifcvt-revert.patch @@ -1,6 +1,93 @@ -Revert r12-674{3,4,5,6,7,8,9}, as there are several PRs reported against -those changes: PR104153, PR104154 and PR104198 at least. +Revert r12-674{3,4,5,6,7,8,9} and r12-7114, as there are several PRs reported +against those changes still unresolved. +--- gcc/ifcvt.cc ++++ gcc/ifcvt.cc +@@ -3391,11 +3391,7 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, + rtx cond = noce_get_condition (jump, &cond_earliest, false); + + rtx cc_cmp = cond_exec_get_condition (jump); +- if (cc_cmp) +- cc_cmp = copy_rtx (cc_cmp); + rtx rev_cc_cmp = cond_exec_get_condition (jump, /* get_reversed */ true); +- if (rev_cc_cmp) +- rev_cc_cmp = copy_rtx (rev_cc_cmp); + + rtx_insn *insn; + int count = 0; +@@ -3519,7 +3515,6 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, + unsigned cost1 = 0, cost2 = 0; + rtx_insn *seq, *seq1, *seq2; + rtx temp_dest = NULL_RTX, temp_dest1 = NULL_RTX, temp_dest2 = NULL_RTX; +- bool read_comparison = false; + + seq1 = try_emit_cmove_seq (if_info, temp, cond, + new_val, old_val, need_cmov, +@@ -3529,41 +3524,10 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, + as well. This allows the backend to emit a cmov directly without + creating an additional compare for each. If successful, costing + is easier and this sequence is usually preferred. */ +- seq2 = try_emit_cmove_seq (if_info, temp, cond, ++ seq2 = try_emit_cmove_seq (if_info, target, cond, + new_val, old_val, need_cmov, + &cost2, &temp_dest2, cc_cmp, rev_cc_cmp); + +- /* The backend might have created a sequence that uses the +- condition. Check this. */ +- rtx_insn *walk = seq2; +- while (walk) +- { +- rtx set = single_set (walk); +- +- if (!set || !SET_SRC (set)) +- { +- walk = NEXT_INSN (walk); +- continue; +- } +- +- rtx src = SET_SRC (set); +- +- if (XEXP (set, 1) && GET_CODE (XEXP (set, 1)) == IF_THEN_ELSE) +- ; /* We assume that this is the cmove created by the backend that +- naturally uses the condition. Therefore we ignore it. */ +- else +- { +- if (reg_mentioned_p (XEXP (cond, 0), src) +- || reg_mentioned_p (XEXP (cond, 1), src)) +- { +- read_comparison = true; +- break; +- } +- } +- +- walk = NEXT_INSN (walk); +- } +- + /* Check which version is less expensive. */ + if (seq1 != NULL_RTX && (cost1 <= cost2 || seq2 == NULL_RTX)) + { +@@ -3576,8 +3540,6 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, + { + seq = seq2; + temp_dest = temp_dest2; +- if (!second_try && read_comparison) +- *last_needs_comparison = count; + } + else + { +@@ -3596,12 +3558,6 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info, + unmodified_insns->safe_push (insn); + } + +- /* Even if we did not actually need the comparison, we want to make sure +- to try a second time in order to get rid of the temporaries. */ +- if (*last_needs_comparison == -1) +- *last_needs_comparison = 0; +- +- + return true; + } + --- gcc/config/rs6000/rs6000.cc +++ gcc/config/rs6000/rs6000.cc @@ -16373,10 +16373,10 @@ rs6000_emit_minmax (rtx dest, enum rtx_code code, rtx op0, rtx op1) diff --git a/gcc12-pr104513.patch b/gcc12-pr104513.patch new file mode 100644 index 0000000..cc6bb08 --- /dev/null +++ b/gcc12-pr104513.patch @@ -0,0 +1,49 @@ +2022-02-12 Jakub Jelinek + + PR c++/104513 + * constexpr.cc (potential_constant_expression_1) : + Don't punt if returns (target). + + * g++.dg/cpp1y/constexpr-104513.C: New test. + * g++.dg/cpp2a/constexpr-dtor12.C: New test. + +--- gcc/cp/constexpr.cc.jj 2022-02-11 13:52:32.697425776 +0100 ++++ gcc/cp/constexpr.cc 2022-02-12 13:51:21.000274390 +0100 +@@ -9364,7 +9364,7 @@ potential_constant_expression_1 (tree t, + { + tree *target = &TREE_OPERAND (t, 0); + /* Gotos representing break and continue are OK. */ +- if (breaks (target) || continues (target)) ++ if (breaks (target) || continues (target) || returns (target)) + { + *jump_target = *target; + return true; +--- gcc/testsuite/g++.dg/cpp1y/constexpr-104513.C.jj 2022-02-12 19:05:14.374101202 +0100 ++++ gcc/testsuite/g++.dg/cpp1y/constexpr-104513.C 2022-02-12 19:06:09.745332658 +0100 +@@ -0,0 +1,10 @@ ++// PR c++/104513 ++// { dg-do compile { target c++14 } } ++ ++struct A { ++ int a1; ++ short a2, a3; ++ long a4; ++ constexpr A() : a1(42), a2(42), a3(42), a4(42) { return; } ++}; ++constexpr A a; +--- gcc/testsuite/g++.dg/cpp2a/constexpr-dtor12.C.jj 2022-02-12 19:04:41.610555957 +0100 ++++ gcc/testsuite/g++.dg/cpp2a/constexpr-dtor12.C 2022-02-12 19:04:18.473877087 +0100 +@@ -0,0 +1,13 @@ ++// PR c++/104513 ++// { dg-do compile { target c++20 } } ++ ++struct S { ++ constexpr S () : s (nullptr) {} ++ constexpr ~S () { delete s; } ++ int *s; ++}; ++struct T : S { ++ constexpr T () : S () {} ++ constexpr ~T () { s = new int (42); return; } ++}; ++constexpr T t; diff --git a/sources b/sources index 09baf06..c25ccb6 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (gcc-12.0.1-20220205.tar.xz) = fdfcf57df5df9ec765c2017a76bfad1d1f02124f5e51078232c841cdb02848db3a55c3adf6f303e7545617b3df5a0ed84d9eee89f6e9b3fd1db27297736e44be +SHA512 (gcc-12.0.1-20220212.tar.xz) = c2d95f912ad841ca93a811dda9598ab535dee0001b58de369c4220a2da2b2f648b75b6b0783382db05c7ea7df71e4f7909e28d7b0dda7c0547ca6d02050e6a5a SHA512 (isl-0.18.tar.bz2) = 85d0b40f4dbf14cb99d17aa07048cdcab2dc3eb527d2fbb1e84c41b2de5f351025370e57448b63b2b8a8cf8a0843a089c3263f9baee1542d5c2e1cb37ed39d94 SHA512 (newlib-cygwin-50e2a63b04bdd018484605fbb954fd1bd5147fa0.tar.xz) = 002a48a7b689a81abbf16161bcaec001a842e67dfbe372e9e109092703bfc666675f16198f60ca429370e8850d564547dc505df81bc3aaca4ce6defbc014ad6c SHA512 (nvptx-tools-5f6f343a302d620b0868edab376c00b15741e39e.tar.xz) = f6d10db94fa1570ae0f94df073fa3c73c8e5ee16d59070b53d94f7db0de8a031bc44d7f3f1852533da04b625ce758e022263855ed43cfc6867e0708d001e53c7