5.0.0-0.18
This commit is contained in:
parent
addcbcb750
commit
0bc6460875
21
gcc.spec
21
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 <jakub@redhat.com> 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 <jakub@redhat.com> 5.0.0-0.17
|
||||
- update from the trunk
|
||||
- PRs c++/65202, c++/65209, debug/46102, debug/58315, ipa/65008,
|
||||
|
17
gcc5-pr64367.patch
Normal file
17
gcc5-pr64367.patch
Normal file
@ -0,0 +1,17 @@
|
||||
2015-02-26 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
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;
|
203
gcc5-pr65032.patch
Normal file
203
gcc5-pr65032.patch
Normal file
@ -0,0 +1,203 @@
|
||||
2015-02-27 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
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 <typename _Key> class C
|
||||
+{
|
||||
+ public:
|
||||
+ typedef int size_type;
|
||||
+ size_type erase (_Key &);
|
||||
+};
|
||||
+
|
||||
+template <typename _Key> class D
|
||||
+{
|
||||
+ public:
|
||||
+ typedef _Key key_type;
|
||||
+ typedef C<key_type> _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<int *> 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);
|
||||
+ }
|
||||
+}
|
43
gcc5-pr65040.patch
Normal file
43
gcc5-pr65040.patch
Normal file
@ -0,0 +1,43 @@
|
||||
2015-02-27 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
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;
|
24
gcc5-pr65048-test.patch
Normal file
24
gcc5-pr65048-test.patch
Normal file
@ -0,0 +1,24 @@
|
||||
2015-02-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
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)
|
||||
{
|
64
gcc5-pr65220.patch
Normal file
64
gcc5-pr65220.patch
Normal file
@ -0,0 +1,64 @@
|
||||
2015-02-26 Jakub Jelinek <jakub@redhat.com>
|
||||
Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
PR rtl-optimization/65220
|
||||
* config/i386/i386.md (*udivmod<mode>4_pow2): New.
|
||||
|
||||
--- gcc/config/i386/i386.md (revision 221063)
|
||||
+++ gcc/config/i386/i386.md (revision 221064)
|
||||
@@ -7331,6 +7331,32 @@ (define_insn_and_split "*udivmod<mode>4"
|
||||
[(set_attr "type" "multi")
|
||||
(set_attr "mode" "<MODE>")])
|
||||
|
||||
+;; Optimize division or modulo by constant power of 2, if the constant
|
||||
+;; materializes only after expansion.
|
||||
+(define_insn_and_split "*udivmod<mode>4_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 < <MODE_SIZE> * 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:<MODE> (match_dup 2) (match_dup 4)))
|
||||
+ (clobber (reg:CC FLAGS_REG))])
|
||||
+ (parallel [(set (match_dup 1) (and:<MODE> (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" "<MODE>")])
|
||||
+
|
||||
(define_insn "*udivmod<mode>4_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]*%" } } */
|
35
gcc5-pr65228.patch
Normal file
35
gcc5-pr65228.patch
Normal file
@ -0,0 +1,35 @@
|
||||
2015-02-27 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
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" } */
|
||||
+}
|
Loading…
Reference in New Issue
Block a user