From 0bc6460875865f1a7888b152b07a35cf36a9f563 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 27 Feb 2015 17:07:43 +0100 Subject: [PATCH] 5.0.0-0.18 --- gcc.spec | 21 ++++- gcc5-pr64367.patch | 17 ++++ gcc5-pr65032.patch | 203 ++++++++++++++++++++++++++++++++++++++++ gcc5-pr65040.patch | 43 +++++++++ gcc5-pr65048-test.patch | 24 +++++ gcc5-pr65220.patch | 64 +++++++++++++ gcc5-pr65228.patch | 35 +++++++ 7 files changed, 406 insertions(+), 1 deletion(-) create mode 100644 gcc5-pr64367.patch create mode 100644 gcc5-pr65032.patch create mode 100644 gcc5-pr65040.patch create mode 100644 gcc5-pr65048-test.patch create mode 100644 gcc5-pr65220.patch create mode 100644 gcc5-pr65228.patch diff --git a/gcc.spec b/gcc.spec index 13c4689..9c14996 100644 --- a/gcc.spec +++ b/gcc.spec @@ -3,7 +3,7 @@ %global gcc_version 5.0.0 # 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.17 +%global gcc_release 0.18 %global _unpackaged_files_terminate_build 0 %global _performance_build 1 %global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64 @@ -201,6 +201,12 @@ Patch14: gcc5-libsanitize-aarch64-va42.patch Patch15: gcc5-arm-fnsect.patch Patch16: gcc5-pr65215.patch Patch17: gcc5-pr65216.patch +Patch18: gcc5-pr64367.patch +Patch19: gcc5-pr65032.patch +Patch20: gcc5-pr65040.patch +Patch21: gcc5-pr65048-test.patch +Patch22: gcc5-pr65220.patch +Patch23: gcc5-pr65228.patch # On ARM EABI systems, we do want -gnueabi to be part of the # target triple. @@ -753,6 +759,12 @@ rm -f libgo/go/crypto/elliptic/p224{,_test}.go %patch15 -p0 -b .arm-fnsect~ %patch16 -p0 -b .pr65215~ %patch17 -p0 -b .pr65216~ +%patch18 -p0 -b .pr64367~ +%patch19 -p0 -b .pr65032~ +%patch20 -p0 -b .pr65040~ +%patch21 -p0 -b .pr65048-test~ +%patch22 -p0 -b .pr65220~ +%patch23 -p0 -b .pr65228~ %if 0%{?_enable_debug_packages} mkdir dwz-wrapper @@ -2938,6 +2950,13 @@ fi %doc rpm.doc/changelogs/libcc1/ChangeLog* %changelog +* Fri Feb 27 2015 Jakub Jelinek 5.0.0-0.18 +- fix compilation of stdexcept with clang (PR libstdc++-v3/64367) +- fix scratch handling in LRA rematerialization (PR target/65032) +- remove -Wformat-signedness from -Wformat=2 (PR c/65040) +- improve VLA allocation on i?86/x86_64 (PR rtl-optimization/65220) +- fix C FE ICE (PR c/65228) + * Thu Feb 26 2015 Jakub Jelinek 5.0.0-0.17 - update from the trunk - PRs c++/65202, c++/65209, debug/46102, debug/58315, ipa/65008, diff --git a/gcc5-pr64367.patch b/gcc5-pr64367.patch new file mode 100644 index 0000000..0372978 --- /dev/null +++ b/gcc5-pr64367.patch @@ -0,0 +1,17 @@ +2015-02-26 Jonathan Wakely + + PR libstdc++-v3/64367 + * include/std/stdexcept (std::__sso_string::_M_bytes): Use + sizeof(__str) instead of sizeof(_M_s). + +--- libstdc++-v3/include/std/stdexcept ++++ libstdc++-v3/include/std/stdexcept +@@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + + union { + __str _M_s; +- char _M_bytes[sizeof(_M_s)]; ++ char _M_bytes[sizeof(__str)]; + }; + + __sso_string() _GLIBCXX_USE_NOEXCEPT; diff --git a/gcc5-pr65032.patch b/gcc5-pr65032.patch new file mode 100644 index 0000000..18fa544 --- /dev/null +++ b/gcc5-pr65032.patch @@ -0,0 +1,203 @@ +2015-02-27 Vladimir Makarov + + PR target/65032 + * lra-remat.c (update_scratch_ops): New. + (do_remat): Call it. + * lra.c (lra_register_new_scratch_op): New. Take code from ... + (remove_scratches): ... here. + * lra-int.h (lra_register_new_scratch_op): New prototype. + + * g++.dg/pr65032.C: New. + +--- gcc/lra-int.h (revision 221061) ++++ gcc/lra-int.h (revision 221062) +@@ -321,6 +321,7 @@ extern void lra_create_copy (int, int, i + extern lra_copy_t lra_get_copy (int); + extern bool lra_former_scratch_p (int); + extern bool lra_former_scratch_operand_p (rtx_insn *, int); ++extern void lra_register_new_scratch_op (rtx_insn *, int); + + extern int lra_new_regno_start; + extern int lra_constraint_new_regno_start; +--- gcc/lra.c (revision 221061) ++++ gcc/lra.c (revision 221062) +@@ -1907,6 +1907,24 @@ lra_former_scratch_operand_p (rtx_insn * + INSN_UID (insn) * MAX_RECOG_OPERANDS + nop) != 0; + } + ++/* Register operand NOP in INSN as a former scratch. It will be ++ changed to scratch back, if it is necessary, at the LRA end. */ ++void ++lra_register_new_scratch_op (rtx_insn *insn, int nop) ++{ ++ lra_insn_recog_data_t id = lra_get_insn_recog_data (insn); ++ rtx op = *id->operand_loc[nop]; ++ sloc_t loc = XNEW (struct sloc); ++ lra_assert (REG_P (op)); ++ loc->insn = insn; ++ loc->nop = nop; ++ scratches.safe_push (loc); ++ bitmap_set_bit (&scratch_bitmap, REGNO (op)); ++ bitmap_set_bit (&scratch_operand_bitmap, ++ INSN_UID (insn) * MAX_RECOG_OPERANDS + nop); ++ add_reg_note (insn, REG_UNUSED, op); ++} ++ + /* Change scratches onto pseudos and save their location. */ + static void + remove_scratches (void) +@@ -1916,7 +1934,6 @@ remove_scratches (void) + basic_block bb; + rtx_insn *insn; + rtx reg; +- sloc_t loc; + lra_insn_recog_data_t id; + struct lra_static_insn_data *static_id; + +@@ -1938,15 +1955,7 @@ remove_scratches (void) + *id->operand_loc[i] = reg + = lra_create_new_reg (static_id->operand[i].mode, + *id->operand_loc[i], ALL_REGS, NULL); +- add_reg_note (insn, REG_UNUSED, reg); +- lra_update_dup (id, i); +- loc = XNEW (struct sloc); +- loc->insn = insn; +- loc->nop = i; +- scratches.safe_push (loc); +- bitmap_set_bit (&scratch_bitmap, REGNO (*id->operand_loc[i])); +- bitmap_set_bit (&scratch_operand_bitmap, +- INSN_UID (insn) * MAX_RECOG_OPERANDS + i); ++ lra_register_new_scratch_op (insn, i); + if (lra_dump_file != NULL) + fprintf (lra_dump_file, + "Removing SCRATCH in insn #%u (nop %d)\n", +--- gcc/lra-remat.c (revision 221061) ++++ gcc/lra-remat.c (revision 221062) +@@ -1044,6 +1044,29 @@ get_hard_regs (struct lra_insn_reg *reg, + return hard_regno; + } + ++/* Make copy of and register scratch pseudos in rematerialized insn ++ REMAT_INSN. */ ++static void ++update_scratch_ops (rtx_insn *remat_insn) ++{ ++ lra_insn_recog_data_t id = lra_get_insn_recog_data (remat_insn); ++ struct lra_static_insn_data *static_id = id->insn_static_data; ++ for (int i = 0; i < static_id->n_operands; i++) ++ { ++ rtx *loc = id->operand_loc[i]; ++ if (! REG_P (*loc)) ++ continue; ++ int regno = REGNO (*loc); ++ if (! lra_former_scratch_p (regno)) ++ continue; ++ *loc = lra_create_new_reg (GET_MODE (*loc), *loc, ++ lra_get_allocno_class (regno), ++ "scratch pseudo copy"); ++ lra_register_new_scratch_op (remat_insn, i); ++ } ++ ++} ++ + /* Insert rematerialization insns using the data-flow data calculated + earlier. */ + static bool +@@ -1193,6 +1216,7 @@ do_remat (void) + HOST_WIDE_INT sp_offset_change = cand_sp_offset - id->sp_offset; + if (sp_offset_change != 0) + change_sp_offset (remat_insn, sp_offset_change); ++ update_scratch_ops (remat_insn); + lra_process_new_insns (insn, remat_insn, NULL, + "Inserting rematerialization insn"); + lra_set_insn_deleted (insn); +--- gcc/testsuite/g++.dg/pr65032.C (revision 0) ++++ gcc/testsuite/g++.dg/pr65032.C (revision 221062) +@@ -0,0 +1,87 @@ ++// { dg-do compile { target i?86-*-* x86_64-*-* } } ++// { dg-options "-Os -std=c++11 -fPIC -fstack-protector-strong -fomit-frame-pointer" } ++ ++#pragma GCC visibility push(hidden) ++#pragma GCC visibility push(default) ++extern "C" { ++ typedef int int64_t __attribute__ ((__mode__ (__DI__))); ++} ++enum class nsresult; ++#pragma GCC visibility pop ++class A ++{ ++ float mRawPtr; ++ ++ public: ++ A (float *); ++}; ++class B ++{ ++ public: ++ B (int64_t, int, int); ++}; ++typedef struct ++{ ++ int channels; ++} vorbis_info; ++template class C ++{ ++ public: ++ typedef int size_type; ++ size_type erase (_Key &); ++}; ++ ++template class D ++{ ++ public: ++ typedef _Key key_type; ++ typedef C _Rep_type; ++ _Rep_type _M_t; ++ typename _Rep_type::size_type ++ erase (key_type p1) ++ { ++ return _M_t.erase (p1); ++ } ++}; ++ ++class F ++{ ++ public: ++ vorbis_info mInfo; ++ D mVorbisPacketSamples; ++ void ValidateVorbisPacketSamples (int *); ++ int64_t Time (int64_t); ++}; ++class G ++{ ++ nsresult DecodeVorbis (int *); ++ F *mVorbisState; ++ int64_t mDecodedAudioFrames; ++}; ++int fn1 (float ***); ++void fn2 (int); ++void ++F::ValidateVorbisPacketSamples (int *p1) ++{ ++ mVorbisPacketSamples.erase (p1); ++} ++ ++nsresult ++G::DecodeVorbis (int *p1) ++{ ++ float **a; ++ int b; ++ long long c; ++ while ((b = fn1 (&a))) ++ { ++ mVorbisState->ValidateVorbisPacketSamples (p1); ++ A (new float); ++ for (; mVorbisState->mInfo.channels;) ++ { ++ } ++ int64_t d = mVorbisState->Time (c - b); ++ (B (d, b, mVorbisState->mInfo.channels)); ++ mDecodedAudioFrames -= b; ++ fn2 (b); ++ } ++} diff --git a/gcc5-pr65040.patch b/gcc5-pr65040.patch new file mode 100644 index 0000000..0139688 --- /dev/null +++ b/gcc5-pr65040.patch @@ -0,0 +1,43 @@ +2015-02-27 Marek Polacek + + PR c/65040 + * doc/invoke.texi: Update to reflect that -Wformat=2 doesn't enable + -Wformat-signedness anymore. +c-family/ + * c.opt (Wformat-signedness): Don't enable by -Wformat=2. +testsuite/ + * gcc.dg/pr65066.c: Use -Wformat -Wformat-signedness and not + -Wformat=2. + +--- gcc/doc/invoke.texi (revision 221060) ++++ gcc/doc/invoke.texi (revision 221061) +@@ -3631,7 +3631,7 @@ The C standard specifies that zero-lengt + @opindex Wformat=2 + Enable @option{-Wformat} plus additional format checks. Currently + equivalent to @option{-Wformat -Wformat-nonliteral -Wformat-security +--Wformat-signedness -Wformat-y2k}. ++-Wformat-y2k}. + + @item -Wformat-nonliteral + @opindex Wformat-nonliteral +--- gcc/c-family/c.opt (revision 221060) ++++ gcc/c-family/c.opt (revision 221061) +@@ -456,7 +456,7 @@ C ObjC C++ ObjC++ Var(warn_format_securi + Warn about possible security problems with format functions + + Wformat-signedness +-C ObjC C++ ObjC++ Var(warn_format_signedness) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0) ++C ObjC C++ ObjC++ Var(warn_format_signedness) Warning + Warn about sign differences with format functions + + Wformat-y2k +--- gcc/testsuite/gcc.dg/pr65066.c (revision 221060) ++++ gcc/testsuite/gcc.dg/pr65066.c (revision 221061) +@@ -1,6 +1,6 @@ + /* PR c/65066 */ + /* { dg-do compile } */ +-/* { dg-options "-Wformat=2" } */ ++/* { dg-options "-Wformat -Wformat-signedness" } */ + + extern int sscanf (const char *restrict, const char *restrict, ...); + int *a; diff --git a/gcc5-pr65048-test.patch b/gcc5-pr65048-test.patch new file mode 100644 index 0000000..137e21f --- /dev/null +++ b/gcc5-pr65048-test.patch @@ -0,0 +1,24 @@ +2015-02-27 Jakub Jelinek + + PR tree-optimization/65048 + * gcc.dg/tree-ssa/ssa-dom-thread-9.c: Add -std=gnu89 to dg-options. + (foo): Use K&R style definition. + +--- gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-9.c (revision 221062) ++++ gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-9.c (revision 221063) +@@ -1,12 +1,13 @@ + /* PR 65048 */ + /* { dg-do compile } */ +-/* { dg-options "-O3" } */ ++/* { dg-options "-O3 -std=gnu89" } */ + + int a, b, c, d; + void fn (void); + + int +-foo (int x) ++foo (x) ++ int x; + { + switch (x) + { diff --git a/gcc5-pr65220.patch b/gcc5-pr65220.patch new file mode 100644 index 0000000..2d1aff8 --- /dev/null +++ b/gcc5-pr65220.patch @@ -0,0 +1,64 @@ +2015-02-26 Jakub Jelinek + Aldy Hernandez + + PR rtl-optimization/65220 + * config/i386/i386.md (*udivmod4_pow2): New. + +--- gcc/config/i386/i386.md (revision 221063) ++++ gcc/config/i386/i386.md (revision 221064) +@@ -7331,6 +7331,32 @@ (define_insn_and_split "*udivmod4" + [(set_attr "type" "multi") + (set_attr "mode" "")]) + ++;; Optimize division or modulo by constant power of 2, if the constant ++;; materializes only after expansion. ++(define_insn_and_split "*udivmod4_pow2" ++ [(set (match_operand:SWI48 0 "register_operand" "=r") ++ (udiv:SWI48 (match_operand:SWI48 2 "register_operand" "0") ++ (match_operand:SWI48 3 "const_int_operand" "n"))) ++ (set (match_operand:SWI48 1 "register_operand" "=r") ++ (umod:SWI48 (match_dup 2) (match_dup 3))) ++ (clobber (reg:CC FLAGS_REG))] ++ "UINTVAL (operands[3]) - 2 < * BITS_PER_UNIT ++ && (UINTVAL (operands[3]) & (UINTVAL (operands[3]) - 1)) == 0" ++ "#" ++ "&& reload_completed" ++ [(set (match_dup 1) (match_dup 2)) ++ (parallel [(set (match_dup 0) (lshiftrt: (match_dup 2) (match_dup 4))) ++ (clobber (reg:CC FLAGS_REG))]) ++ (parallel [(set (match_dup 1) (and: (match_dup 1) (match_dup 5))) ++ (clobber (reg:CC FLAGS_REG))])] ++{ ++ int v = exact_log2 (UINTVAL (operands[3])); ++ operands[4] = GEN_INT (v); ++ operands[5] = GEN_INT ((HOST_WIDE_INT_1U << v) - 1); ++} ++ [(set_attr "type" "multi") ++ (set_attr "mode" "")]) ++ + (define_insn "*udivmod4_noext" + [(set (match_operand:SWIM248 0 "register_operand" "=a") + (udiv:SWIM248 (match_operand:SWIM248 2 "register_operand" "0") +--- gcc/testsuite/gcc.target/i386/pr65520.c (revision 0) ++++ gcc/testsuite/gcc.target/i386/pr65520.c (revision 221064) +@@ -0,0 +1,20 @@ ++/* PR target/65520 */ ++/* { dg-do compile } */ ++/* { dg-options "-O2" } */ ++ ++int foo (void *); ++ ++void ++bar (void) ++{ ++ unsigned s = 128; ++ while (1) ++ { ++ unsigned b[s]; ++ if (foo (b)) ++ break; ++ s *= 2; ++ } ++} ++ ++/* { dg-final { scan-assembler-not "div\[^\n\r]*%" } } */ diff --git a/gcc5-pr65228.patch b/gcc5-pr65228.patch new file mode 100644 index 0000000..e1efc95 --- /dev/null +++ b/gcc5-pr65228.patch @@ -0,0 +1,35 @@ +2015-02-27 Marek Polacek + + PR c/65228 +c/ + * c-decl.c (start_decl): Return NULL_TREE if decl is an error node. +testsuite/ + * gcc.dg/pr65228.c: New test. + +--- gcc/c/c-decl.c (revision 221055) ++++ gcc/c/c-decl.c (revision 221056) +@@ -4460,8 +4460,8 @@ start_decl (struct c_declarator *declara + decl = grokdeclarator (declarator, declspecs, + NORMAL, initialized, NULL, &attributes, &expr, NULL, + deprecated_state); +- if (!decl) +- return 0; ++ if (!decl || decl == error_mark_node) ++ return NULL_TREE; + + if (expr) + add_stmt (fold_convert (void_type_node, expr)); +--- gcc/testsuite/gcc.dg/pr65228.c (revision 0) ++++ gcc/testsuite/gcc.dg/pr65228.c (revision 221056) +@@ -0,0 +1,11 @@ ++/* PR c/65228 */ ++/* { dg-do compile } */ ++/* { dg-options "" } */ ++ ++__auto_type a = b; /* { dg-error "undeclared" } */ ++ ++void ++f (void) ++{ ++ __auto_type c = d; /* { dg-error "undeclared" } */ ++}