diff --git a/.gitignore b/.gitignore index 2730767..159ca68 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ /gcc-9.0.1-20190221.tar.xz /gcc-9.0.1-20190227.tar.xz /gcc-9.0.1-20190309.tar.xz +/gcc-9.0.1-20190312.tar.xz diff --git a/gcc.spec b/gcc.spec index d4d59e2..874faad 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,10 +1,10 @@ -%global DATE 20190309 -%global SVNREV 269524 +%global DATE 20190312 +%global SVNREV 269606 %global gcc_version 9.0.1 %global gcc_major 9 # 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 0.9 +%global gcc_release 0.10 %global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f %global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24 %global _unpackaged_files_terminate_build 0 @@ -255,7 +255,8 @@ Patch9: gcc9-Wno-format-security.patch Patch10: gcc9-rh1574936.patch Patch11: gcc9-d-shared-libphobos.patch Patch12: gcc9-pr89093.patch -Patch13: gcc9-pr89629.patch +Patch13: gcc9-pr89652.patch +Patch14: gcc9-pr89660.patch Patch1000: nvptx-tools-no-ptxas.patch Patch1001: nvptx-tools-build.patch @@ -767,7 +768,8 @@ to NVidia PTX capable devices if available. %endif %patch11 -p0 -b .d-shared-libphobos~ %patch12 -p0 -b .pr89093~ -%patch13 -p0 -b .pr89629~ +%patch13 -p0 -b .pr89652~ +%patch14 -p0 -b .pr89660~ cd nvptx-tools-%{nvptx_tools_gitrev} %patch1000 -p1 -b .nvptx-tools-no-ptxas~ @@ -2956,6 +2958,20 @@ end %endif %changelog +* Tue Mar 12 2019 Jakub Jelinek 9.0.1-0.10 +- update from trunk + - PRs bootstrap/89656, c++/70349, c++/86521, c++/87571, c++/87750, + c++/89648, c/88568, contrib/82704, d/89041, fortran/66089, + fortran/71544, fortran/84504, fortran/87734, fortran/89639, + fortran/89651, inline-asm/87010, libbacktrace/89669, libstdc++/89460, + libstdc++/89641, middle-end/68733, middle-end/89655, middle-end/89663, + rtl-optimization/89588, testsuite/89472, tree-optimization/85459, + tree-optimization/85762, tree-optimization/87008, + tree-optimization/89649, tree-optimization/89664 +- fix ICE in constexpr loop handling of SAVE_EXPRs (PR c++/89652) +- temporarily revert -Wredundant-move warning false positive + improvement (PR c++/89660) + * Sat Mar 9 2019 Jakub Jelinek 9.0.1-0.9 - update from trunk - PRs bootstrap/89539, bootstrap/89560, c++/22149, c++/63540, c++/71446, diff --git a/gcc9-pr89629.patch b/gcc9-pr89629.patch deleted file mode 100644 index ab20267..0000000 --- a/gcc9-pr89629.patch +++ /dev/null @@ -1,17 +0,0 @@ -2019-03-08 Jonathan Wakely - - PR libstdc++/89629 - * libsupc++/hash_bytes.cc (std::_Hash_bytes): Change len_aligned type - from int to size_t. - ---- libstdc++-v3/libsupc++/hash_bytes.cc -+++ libstdc++-v3/libsupc++/hash_bytes.cc -@@ -139,7 +139,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION - - // Remove the bytes not divisible by the sizeof(size_t). This - // allows the main loop to process the data as 64-bit integers. -- const int len_aligned = len & ~0x7; -+ const size_t len_aligned = len & ~0x7; - const char* const end = buf + len_aligned; - size_t hash = seed ^ (len * mul); - for (const char* p = buf; p != end; p += 8) diff --git a/gcc9-pr89652.patch b/gcc9-pr89652.patch new file mode 100644 index 0000000..8fde67d --- /dev/null +++ b/gcc9-pr89652.patch @@ -0,0 +1,69 @@ +2019-03-12 Jakub Jelinek + + PR c++/89652 + * constexpr.c (cxx_eval_loop_expr): Only remove SAVE_EXPRs that are + still in new_ctx.values hash_map. + + * g++.dg/cpp1y/constexpr-89652.C: New test. + +--- gcc/cp/constexpr.c.jj 2019-03-08 08:43:23.529496048 +0100 ++++ gcc/cp/constexpr.c 2019-03-11 15:11:32.081334270 +0100 +@@ -4236,7 +4236,8 @@ cxx_eval_loop_expr (const constexpr_ctx + /* Forget saved values of SAVE_EXPRs. */ + for (hash_set::iterator iter = save_exprs.begin(); + iter != save_exprs.end(); ++iter) +- new_ctx.values->remove (*iter); ++ if (new_ctx.values->get (*iter)) ++ new_ctx.values->remove (*iter); + + if (++count >= constexpr_loop_limit) + { +@@ -4258,7 +4259,8 @@ cxx_eval_loop_expr (const constexpr_ctx + /* Forget saved values of SAVE_EXPRs. */ + for (hash_set::iterator iter = save_exprs.begin(); + iter != save_exprs.end(); ++iter) +- new_ctx.values->remove (*iter); ++ if (new_ctx.values->get (*iter)) ++ new_ctx.values->remove (*iter); + + return NULL_TREE; + } +--- gcc/testsuite/g++.dg/cpp1y/constexpr-89652.C.jj 2019-03-11 15:14:21.877561575 +0100 ++++ gcc/testsuite/g++.dg/cpp1y/constexpr-89652.C 2019-03-11 15:16:11.962763933 +0100 +@@ -0,0 +1,36 @@ ++// PR c++/89652 ++// { dg-do compile { target c++14 } } ++// { dg-options "" } ++ ++template constexpr auto foo (T &e) { return e.foo (); } ++template constexpr auto bar (T &e) { return foo (e); } ++template struct A { typedef T a[N]; }; ++template struct B { ++ typedef T *b; ++ typename A::a d; ++ constexpr b foo () { return d; } ++}; ++template struct C { long m; }; ++struct D { long n; }; ++template struct E { ++ B, 1>::b p; ++ constexpr D operator* () { return {p->m}; } ++ constexpr E operator++ (int) { auto a{*this}; ++p; return a; } ++}; ++template ++constexpr bool operator!= (E a, E) { return a.p; } ++template ++constexpr auto baz (B s, B) ++{ ++ B t{}; ++ auto q{foo (t)}; ++ using u = E; ++ auto v = u{bar (s)}; ++ auto w = u{}; ++ while (v != w) ++ *q++ = *v++; ++ return t; ++} ++constexpr auto a = B, 5>{}; ++auto b = B{}; ++auto c = baz (a, b); diff --git a/gcc9-pr89660.patch b/gcc9-pr89660.patch new file mode 100644 index 0000000..49234ab --- /dev/null +++ b/gcc9-pr89660.patch @@ -0,0 +1,55 @@ +2019-03-12 Jakub Jelinek + + PR c++/89660 + Revert: + 2019-03-06 Marek Polacek + + PR c++/87378 - bogus -Wredundant-move warning. + * typeck.c (maybe_warn_pessimizing_move): See if the maybe-rvalue + overload resolution would actually succeed. + + * g++.dg/cpp0x/Wredundant-move1.C (fn4): Drop dg-warning. + +--- gcc/cp/typeck.c (revision 269427) ++++ gcc/cp/typeck.c (revision 269426) +@@ -9429,24 +9429,10 @@ maybe_warn_pessimizing_move (tree retval + do maybe-rvalue overload resolution even without std::move. */ + else if (treat_lvalue_as_rvalue_p (arg, /*parm_ok*/true)) + { +- /* Make sure that the overload resolution would actually succeed +- if we removed the std::move call. */ +- tree t = convert_for_initialization (NULL_TREE, functype, +- move (arg), +- (LOOKUP_NORMAL +- | LOOKUP_ONLYCONVERTING +- | LOOKUP_PREFER_RVALUE), +- ICR_RETURN, NULL_TREE, 0, +- tf_none); +- /* If this worked, implicit rvalue would work, so the call to +- std::move is redundant. */ +- if (t != error_mark_node) +- { +- auto_diagnostic_group d; +- if (warning_at (loc, OPT_Wredundant_move, +- "redundant move in return statement")) +- inform (loc, "remove % call"); +- } ++ auto_diagnostic_group d; ++ if (warning_at (loc, OPT_Wredundant_move, ++ "redundant move in return statement")) ++ inform (loc, "remove % call"); + } + } + } +--- gcc/testsuite/g++.dg/cpp0x/Wredundant-move1.C (revision 269427) ++++ gcc/testsuite/g++.dg/cpp0x/Wredundant-move1.C (revision 269426) +@@ -59,8 +59,7 @@ T + fn4 (const T t) + { + // t is const: will decay into copy despite std::move, so it's redundant. +- // We used to warn about this, but no longer since c++/87378. +- return std::move (t); ++ return std::move (t); // { dg-warning "redundant move in return statement" } + } + + int diff --git a/sources b/sources index d06cfdb..57b494e 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (gcc-9.0.1-20190309.tar.xz) = 84aadddc04c9f655c7ecaf90bb111da9aa82e0b4e937588f7e2c4089cb8d8e55c4ae9479fc0e46c0e2c9cd4738f8afcb178f3920528c0badb1c15c5aba54f0a1 +SHA512 (gcc-9.0.1-20190312.tar.xz) = 23ef500528212ea4542398d6909548e6dc5e12a7e58c750895ce85ff5a24e6ed637fcb361a8c248b79e0c93ecbfb72606d07c004a02b891f2078c12e973f51f1 SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz) = 94f7089365296f7dfa485107b4143bebc850a81586f3460fd896bbbb6ba099a00217d4042133424fd2183b352132f4fd367e6a60599bdae2a26dfd48a77d0e04 SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz) = a688cb12cf805950a5abbb13b52f45c81dbee98e310b7ed57ae20e76dbfa5964a16270148374a6426d177db71909d28360490f091c86a5d19d4faa5127beeee1