summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-05-14 17:14:46 +0000
committerdoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-05-14 17:14:46 +0000
commit3a1bc5ce89a470a55c24febbe05534fab7f74229 (patch)
tree22a728ff63d3103798fe7b3867f7cfdd61272c33
parentf5179fce33403e5a700d1ab7c247d8dcdb4a8974 (diff)
downloadgcc-48-3a1bc5ce89a470a55c24febbe05534fab7f74229.tar.gz
* Update to SVN 20140514 (r210436) from the gcc-4_8-branch.
* Remove patches applied upstream. git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.8@7372 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
-rw-r--r--debian/changelog10
-rw-r--r--debian/patches/gcc-rs6000-update.diff70
-rw-r--r--debian/patches/pr60609.diff289
-rw-r--r--debian/patches/svn-updates.diff1203
-rw-r--r--debian/rules.patch2
5 files changed, 1140 insertions, 434 deletions
diff --git a/debian/changelog b/debian/changelog
index 0ce2733..5571efb 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,10 @@
-gcc-4.8 (4.8.2-22) UNRELEASED; urgency=medium
+gcc-4.8 (4.8.2-23) UNRELEASED; urgency=medium
+
+ * Update to SVN 20140514 (r210436) from the gcc-4_8-branch.
+
+ -- Matthias Klose <doko@debian.org> Wed, 14 May 2014 14:21:37 +0200
+
+gcc-4.8 (4.8.2-22) unstable; urgency=medium
* Update to SVN 20140508 (r210209) from the gcc-4_8-branch.
* Install only versioned gcc-ar gcc-nm gcc-ranlib binaries for the hppa64
@@ -15,7 +21,7 @@ gcc-4.8 (4.8.2-22) UNRELEASED; urgency=medium
(Helmit Grohne). Closes: #744782.
* Apply the proposed patch for PR driver/61106. Closes: #747345.
- -- Matthias Klose <doko@debian.org> Mon, 05 May 2014 20:29:25 +0200
+ -- Matthias Klose <doko@debian.org> Thu, 08 May 2014 14:09:04 +0200
gcc-4.8 (4.8.2-21) unstable; urgency=medium
diff --git a/debian/patches/gcc-rs6000-update.diff b/debian/patches/gcc-rs6000-update.diff
deleted file mode 100644
index 1069b50..0000000
--- a/debian/patches/gcc-rs6000-update.diff
+++ /dev/null
@@ -1,70 +0,0 @@
-when trying to build Ada for powerpc64le-linux, I ran into an ICE
-in fixup_args_size_notes.
-
-It turns out that the p8 fusion peephole acts on these two insns
-from the epilog sequence:
-
-(insn 1693 1078 1079 91 (set (reg:DI 7 7)
- (plus:DI (reg/f:DI 31 31)
- (const_int 65536 [0x10000]))) 82 {*adddi3_internal1}
- (nil))
-(insn 1079 1693 1511 91 (set (reg/f:DI 1 1)
- (mem/c:DI (plus:DI (reg:DI 7 7)
- (const_int -16096 [0xffffffffffffc120])) [233 %sfp+49440 S8 A64])) 519 {*movdi_internal64}
- (expr_list:REG_DEAD (reg:DI 7 7)
- (expr_list:REG_ARGS_SIZE (const_int 0 [0])
- (nil))))
-
-and replaces them by:
-
-(insn 1776 1078 1777 91 (set (reg/f:DI 1 1)
- (plus:DI (reg/f:DI 31 31)
- (const_int 65536 [0x10000]))) -1
- (nil))
-
-(insn 1777 1776 1511 91 (set (reg/f:DI 1 1)
- (mem/c:DI (plus:DI (reg/f:DI 1 1)
- (const_int -16096 [0xffffffffffffc120])) [233 S8 A8])) -1
- (expr_list:REG_ARGS_SIZE (const_int 0 [0])
- (nil)))
-
-Then peephole common code thinks it needs to re-create the REG_ARGS_SIZE
-note and fails since the code is too complex for it to understand. (Which
-is reasonable since it doesn't know what value is being restored from the
-stack here.)
-
-However, the more fundamental problem seems to be that this transformation
-should be invalid anyway, since it creates an intermediate state where
-the stack pointer points to a location without proper backchain, which
-violates the ABI.
-
-The following patch fixes this by disabling the fusion peephole in those
-cases where it would introduce a new use of the stack pointer as temporary
-register.
-
-Tested on powerpc64le-linux. OK for mainline (and 4.8 after the big patch
-series is committed)?
-
-Bye,
-Ulrich
-
-ChangeLog:
-
- * config/rs6000/rs6000.c (fusion_gpr_load_p): Refuse optimization
- if it would clobber the stack pointer, even temporarily.
-
---- a/src/gcc/config/rs6000/rs6000.c
-+++ b/src/gcc/config/rs6000/rs6000.c
-@@ -32519,6 +32519,11 @@
-
- if (!peep2_reg_dead_p (2, addis_reg))
- return false;
-+
-+ /* If the target register being loaded is the stack pointer, we must
-+ avoid loading any other value into it, even temporarily. */
-+ if (REG_P (target) && REGNO (target) == STACK_POINTER_REGNUM)
-+ return false;
- }
-
- base_reg = XEXP (addr, 0);
-
diff --git a/debian/patches/pr60609.diff b/debian/patches/pr60609.diff
deleted file mode 100644
index a0b204b..0000000
--- a/debian/patches/pr60609.diff
+++ /dev/null
@@ -1,289 +0,0 @@
-# DP: Fix PR target/60609, proposed patch
-
-2014-04-02 Charles Baylis <charles.baylis@linaro.org>
-
- PR target/60609
- * config/arm/arm.h (ASM_OUTPUT_CASE_END) Remove.
- (LABEL_ALIGN_AFTER_BARRIER) Align barriers which occur after
- ADDR_DIFF_VEC.
-
-2014-04-02 Charles Baylis <charles.baylis@linaro.org>
-
- PR target/60609
- * g++.dg/torture/pr60609.C: New test.
-
---- a/src/gcc/config/arm/arm.h
-+++ b/src/gcc/config/arm/arm.h
-@@ -2194,14 +2194,9 @@ extern int making_const_table;
- #undef ASM_OUTPUT_BEFORE_CASE_LABEL
- #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE) /* Empty. */
-
--/* Make sure subsequent insns are aligned after a TBB. */
--#define ASM_OUTPUT_CASE_END(FILE, NUM, JUMPTABLE) \
-- do \
-- { \
-- if (GET_MODE (PATTERN (JUMPTABLE)) == QImode) \
-- ASM_OUTPUT_ALIGN (FILE, 1); \
-- } \
-- while (0)
-+#define LABEL_ALIGN_AFTER_BARRIER(LABEL) \
-+ (GET_CODE (PATTERN (prev_active_insn (LABEL))) == ADDR_DIFF_VEC \
-+ ? 1 : 0)
-
- #define ARM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \
- do \
---- /dev/null
-+++ b/src/gcc/testsuite/g++.dg/torture/pr60609.C
-@@ -0,0 +1,252 @@
-+/* { dg-do assemble } */
-+
-+class exception
-+{
-+};
-+class bad_alloc:exception
-+{
-+};
-+class logic_error:exception
-+{
-+};
-+class domain_error:logic_error
-+{
-+};
-+class invalid_argument:logic_error
-+{
-+};
-+class length_error:logic_error
-+{
-+};
-+class overflow_error:exception
-+{
-+};
-+typedef int mpz_t[];
-+template < class > class __gmp_expr;
-+template <> class __gmp_expr < mpz_t >
-+{
-+ ~__gmp_expr ();
-+};
-+
-+class PIP_Solution_Node;
-+class internal_exception
-+{
-+ ~internal_exception ();
-+};
-+class not_an_integer:internal_exception
-+{
-+};
-+class not_a_variable:internal_exception
-+{
-+};
-+class not_an_optimization_mode:internal_exception
-+{
-+};
-+class not_a_bounded_integer_type_width:internal_exception
-+{
-+};
-+class not_a_bounded_integer_type_representation:internal_exception
-+{
-+};
-+class not_a_bounded_integer_type_overflow:internal_exception
-+{
-+};
-+class not_a_complexity_class:internal_exception
-+{
-+};
-+class not_a_control_parameter_name:internal_exception
-+{
-+};
-+class not_a_control_parameter_value:internal_exception
-+{
-+};
-+class not_a_pip_problem_control_parameter_name:internal_exception
-+{
-+};
-+class not_a_pip_problem_control_parameter_value:internal_exception
-+{
-+};
-+class not_a_relation:internal_exception
-+{
-+};
-+class ppl_handle_mismatch:internal_exception
-+{
-+};
-+class timeout_exception
-+{
-+ ~timeout_exception ();
-+};
-+class deterministic_timeout_exception:timeout_exception
-+{
-+};
-+void __assert_fail (const char *, const char *, int, int *)
-+__attribute__ ((__noreturn__));
-+void PL_get_pointer (void *);
-+int Prolog_is_address ();
-+inline int
-+Prolog_get_address (void **p1)
-+{
-+ Prolog_is_address ()? static_cast <
-+ void >(0) : __assert_fail ("Prolog_is_address", "./swi_cfli.hh", 0, 0);
-+ PL_get_pointer (p1);
-+ return 0;
-+}
-+
-+class non_linear:internal_exception
-+{
-+};
-+class not_unsigned_integer:internal_exception
-+{
-+};
-+class not_universe_or_empty:internal_exception
-+{
-+};
-+class not_a_nil_terminated_list:internal_exception
-+{
-+};
-+class PPL_integer_out_of_range
-+{
-+ __gmp_expr < mpz_t > n;
-+};
-+void handle_exception ();
-+template < typename T > T * term_to_handle (int, const char *)
-+{
-+ if (Prolog_is_address ())
-+ {
-+ void *p;
-+ Prolog_get_address (&p);
-+ return static_cast < T * >(0);
-+ }
-+ throw;
-+}
-+
-+void
-+ppl_new_MIP_Problem_from_MIP_Problem ()
-+try
-+{
-+ term_to_handle < int >(0, "ppl_new_MIP_Problem_from_MIP_Problem/2");
-+}
-+
-+catch (exception &)
-+{
-+}
-+
-+int
-+ppl_PIP_Tree_Node_parametric_values ()
-+{
-+ try
-+ {
-+ PIP_Solution_Node *a = term_to_handle < PIP_Solution_Node > (0, 0);
-+ (void)a;
-+ return 1;
-+ }
-+ catch (internal_exception &)
-+ {
-+ }
-+ catch (not_unsigned_integer &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (non_linear &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_variable &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_an_integer &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (ppl_handle_mismatch &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_an_optimization_mode &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_complexity_class &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_bounded_integer_type_width &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_bounded_integer_type_representation &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_bounded_integer_type_overflow &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_control_parameter_name &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_control_parameter_value &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_pip_problem_control_parameter_name &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_pip_problem_control_parameter_value &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_universe_or_empty &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_relation &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (not_a_nil_terminated_list &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (PPL_integer_out_of_range &)
-+ {
-+ handle_exception ();
-+ }
-+ catch (int &)
-+ {
-+ } catch (timeout_exception &)
-+ {
-+ handle_exception ();
-+ } catch (deterministic_timeout_exception &)
-+ {
-+ handle_exception ();
-+ } catch (overflow_error &)
-+ {
-+ handle_exception ();
-+ } catch (domain_error &)
-+ {
-+ handle_exception ();
-+ } catch (length_error &)
-+ {
-+ handle_exception ();
-+ } catch (invalid_argument &)
-+ {
-+ handle_exception ();
-+ } catch (logic_error &)
-+ {
-+ handle_exception ();
-+ } catch (bad_alloc &)
-+ {
-+ handle_exception ();
-+ } catch (exception &)
-+ {
-+ handle_exception ();
-+ } catch ( ...)
-+ {
-+ handle_exception ();
-+ }
-+ return 0;
-+}
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index f17eeb2..ad059e3 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 4.8 branch upto 20140508 (r210209).
+# DP: updates from the 4.8 branch upto 20140514 (r210436).
last_updated()
{
cat > ${dir}LAST_UPDATED <<EOF
-Thu May 8 13:38:43 CEST 2014
-Thu May 8 11:38:43 UTC 2014 (revision 210209)
+Wed May 14 18:55:18 CEST 2014
+Wed May 14 16:55:18 UTC 2014 (revision 210436)
EOF
}
@@ -1042,6 +1042,19 @@ Index: libstdc++-v3/scripts/extract_symvers.in
egrep -v ' (LOCAL|UND) ' |\
egrep -v ' (_DYNAMIC|_GLOBAL_OFFSET_TABLE_|_PROCEDURE_LINKAGE_TABLE_|_edata|_end|_etext)$' |\
sed -e 's/ <processor specific>: / <processor_specific>:_/g' |\
+Index: libstdc++-v3/src/c++98/ios_init.cc
+===================================================================
+--- a/src/libstdc++-v3/src/c++98/ios_init.cc (.../tags/gcc_4_8_2_release)
++++ b/src/libstdc++-v3/src/c++98/ios_init.cc (.../branches/gcc-4_8-branch)
+@@ -37,7 +37,7 @@
+ {
+ using namespace __gnu_cxx;
+
+- // Extern declarations for global objects in src/globals.cc.
++ // Extern declarations for global objects in src/c++98/globals.cc.
+ extern stdio_sync_filebuf<char> buf_cout_sync;
+ extern stdio_sync_filebuf<char> buf_cin_sync;
+ extern stdio_sync_filebuf<char> buf_cerr_sync;
Index: libstdc++-v3/src/c++11/thread.cc
===================================================================
--- a/src/libstdc++-v3/src/c++11/thread.cc (.../tags/gcc_4_8_2_release)
@@ -1055,6 +1068,19 @@ Index: libstdc++-v3/src/c++11/thread.cc
# endif
#elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
unsigned long ms = __ns.count() / 1000000;
+Index: libstdc++-v3/doc/xml/faq.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/faq.xml (.../tags/gcc_4_8_2_release)
++++ b/src/libstdc++-v3/doc/xml/faq.xml (.../branches/gcc-4_8-branch)
+@@ -241,7 +241,7 @@
+ </question>
+ <answer xml:id="a-license.what_restrictions">
+ <para>
+- None. We encourage such programs to be released as open source,
++ None. We encourage such programs to be released as free software,
+ but we won't punish you or sue you if you choose otherwise.
+ </para>
+ </answer>
Index: libstdc++-v3/doc/xml/manual/abi.xml
===================================================================
--- a/src/libstdc++-v3/doc/xml/manual/abi.xml (.../tags/gcc_4_8_2_release)
@@ -1149,6 +1175,15 @@ Index: libstdc++-v3/doc/html/faq.html
What is libstdc++?
</a></dt><dt>1.2. <a href="faq.html#faq.why">
Why should I use libstdc++?
+@@ -223,7 +223,7 @@
+ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
+ I see. So, what restrictions are there on programs that use the library?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
+- None. We encourage such programs to be released as open source,
++ None. We encourage such programs to be released as free software,
+ but we won't punish you or sue you if you choose otherwise.
+ </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
+ </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
Index: libstdc++-v3/doc/html/index.html
===================================================================
--- a/src/libstdc++-v3/doc/html/index.html (.../tags/gcc_4_8_2_release)
@@ -3977,6 +4012,27 @@ Index: libstdc++-v3/include/debug/macros.h
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
._M_iterator(_First, #_First) \
._M_iterator(_Last, #_Last) \
+Index: libstdc++-v3/include/std/iostream
+===================================================================
+--- a/src/libstdc++-v3/include/std/iostream (.../tags/gcc_4_8_2_release)
++++ b/src/libstdc++-v3/include/std/iostream (.../branches/gcc-4_8-branch)
+@@ -48,13 +48,13 @@
+ *
+ * The &lt;iostream&gt; header declares the eight <em>standard stream
+ * objects</em>. For other declarations, see
+- * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
++ * http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html
+ * and the @link iosfwd I/O forward declarations @endlink
+ *
+ * They are required by default to cooperate with the global C
+ * library's @c FILE streams, and to be available during program
+- * startup and termination. For more information, see the HOWTO
+- * linked to above.
++ * startup and termination. For more information, see the section of the
++ * manual linked to above.
+ */
+ //@{
+ extern istream cin; /// Linked to standard input
Index: libstdc++-v3/include/std/tuple
===================================================================
--- a/src/libstdc++-v3/include/std/tuple (.../tags/gcc_4_8_2_release)
@@ -4190,7 +4246,19 @@ Index: libstdc++-v3/ChangeLog
===================================================================
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_8_2_release)
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,188 @@
+@@ -1,3 +1,200 @@
++2014-05-08 Joshua Gay <jgay@gnu.org>
++
++ PR libstdc++/61117
++ * doc/xml/faq.xml (faq.license.what_restrictions): Replace "open
++ source" with "free software".
++ * doc/html/faq.html: Likewise.
++
++2014-05-08 Jonathan Wakely <jwakely@redhat.com>
++
++ * include/std/iostream: Fix URL in comment.
++ * src/c++98/ios_init.cc: Fix path in comment.
++
+2014-05-06 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline
@@ -9155,7 +9223,7 @@ Index: gcc/DATESTAMP
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
@@ -1 +1 @@
-20131016
-+20140508
++20140514
Index: gcc/value-prof.c
===================================================================
--- a/src/gcc/value-prof.c (.../tags/gcc_4_8_2_release)
@@ -9649,7 +9717,44 @@ Index: gcc/builtins.c
static tree fold_builtin_strncat (location_t, tree, tree, tree);
static tree fold_builtin_strspn (location_t, tree, tree);
static tree fold_builtin_strcspn (location_t, tree, tree);
-@@ -1958,6 +1957,7 @@
+@@ -906,9 +905,24 @@
+ if (! HAVE_nonlocal_goto)
+ #endif
+ {
++ /* First adjust our frame pointer to its actual value. It was
++ previously set to the start of the virtual area corresponding to
++ the stacked variables when we branched here and now needs to be
++ adjusted to the actual hardware fp value.
++
++ Assignments to virtual registers are converted by
++ instantiate_virtual_regs into the corresponding assignment
++ to the underlying register (fp in this case) that makes
++ the original assignment true.
++ So the following insn will actually be decrementing fp by
++ STARTING_FRAME_OFFSET. */
+ emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
+- /* This might change the hard frame pointer in ways that aren't
+- apparent to early optimization passes, so force a clobber. */
++
++ /* Restoring the frame pointer also modifies the hard frame pointer.
++ Mark it used (so that the previous assignment remains live once
++ the frame pointer is eliminated) and clobbered (to represent the
++ implicit update from the assignment). */
++ emit_use (hard_frame_pointer_rtx);
+ emit_clobber (hard_frame_pointer_rtx);
+ }
+
+@@ -949,8 +963,7 @@
+
+ /* We must not allow the code we just generated to be reordered by
+ scheduling. Specifically, the update of the frame pointer must
+- happen immediately, not later. Similarly, we must block
+- (frame-related) register values to be used across this code. */
++ happen immediately, not later. */
+ emit_insn (gen_blockage ());
+ }
+
+@@ -1958,6 +1971,7 @@
tree fndecl = get_callee_fndecl (exp);
enum machine_mode mode;
bool errno_set = false;
@@ -9657,7 +9762,7 @@ Index: gcc/builtins.c
tree arg;
if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
-@@ -1969,6 +1969,7 @@
+@@ -1969,6 +1983,7 @@
{
CASE_FLT_FN (BUILT_IN_SQRT):
errno_set = ! tree_expr_nonnegative_p (arg);
@@ -9665,7 +9770,7 @@ Index: gcc/builtins.c
builtin_optab = sqrt_optab;
break;
CASE_FLT_FN (BUILT_IN_EXP):
-@@ -2025,8 +2026,10 @@
+@@ -2025,8 +2040,10 @@
if (! flag_errno_math || ! HONOR_NANS (mode))
errno_set = false;
@@ -9678,7 +9783,7 @@ Index: gcc/builtins.c
&& (!errno_set || !optimize_insn_for_size_p ()))
{
rtx result = gen_reg_rtx (mode);
-@@ -5347,7 +5350,7 @@
+@@ -5347,7 +5364,7 @@
expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
rtx target)
{
@@ -9687,7 +9792,7 @@ Index: gcc/builtins.c
enum memmodel success, failure;
tree weak;
bool is_weak;
-@@ -5385,14 +5388,26 @@
+@@ -5385,14 +5402,26 @@
if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
is_weak = true;
@@ -9719,7 +9824,7 @@ Index: gcc/builtins.c
return target;
}
-@@ -5846,6 +5861,9 @@
+@@ -5846,6 +5875,9 @@
switch (fcode)
{
CASE_FLT_FN (BUILT_IN_FABS):
@@ -9729,7 +9834,7 @@ Index: gcc/builtins.c
target = expand_builtin_fabs (exp, target, subtarget);
if (target)
return target;
-@@ -10298,6 +10316,9 @@
+@@ -10298,6 +10330,9 @@
return fold_builtin_strlen (loc, type, arg0);
CASE_FLT_FN (BUILT_IN_FABS):
@@ -9739,7 +9844,7 @@ Index: gcc/builtins.c
return fold_builtin_fabs (loc, arg0, type);
case BUILT_IN_ABS:
-@@ -10766,7 +10787,7 @@
+@@ -10766,7 +10801,7 @@
return fold_builtin_strstr (loc, arg0, arg1, type);
case BUILT_IN_STRCAT:
@@ -9748,7 +9853,7 @@ Index: gcc/builtins.c
case BUILT_IN_STRSPN:
return fold_builtin_strspn (loc, arg0, arg1);
-@@ -11809,8 +11830,9 @@
+@@ -11809,8 +11844,9 @@
COMPOUND_EXPR in the chain will contain the tree for the simplified
form of the builtin function call. */
@@ -9760,7 +9865,7 @@ Index: gcc/builtins.c
{
if (!validate_arg (dst, POINTER_TYPE)
|| !validate_arg (src, POINTER_TYPE))
-@@ -11828,22 +11850,17 @@
+@@ -11828,22 +11864,17 @@
/* See if we can store by pieces into (dst + strlen(dst)). */
tree newdst, call;
tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
@@ -9791,7 +9896,7 @@ Index: gcc/builtins.c
/* Stabilize the argument list. */
dst = builtin_save_expr (dst);
-@@ -11855,7 +11872,11 @@
+@@ -11855,7 +11886,11 @@
newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
newdst = builtin_save_expr (newdst);
@@ -10115,7 +10220,80 @@ Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_2_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,5367 @@
+@@ -1,3 +1,5440 @@
++2014-05-14 Matthias Klose <doko@ubuntu.com>
++
++ Revert:
++ 2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
++ Matthias Klose <doko@ubuntu.com>
++
++ PR driver/61106
++ * optc-gen.awk: Fix option handling for -Wunused-parameter.
++
++2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
++
++ * doc/sourcebuild.texi: (dfp_hw): Document.
++ (p8vector_hw): Likewise.
++ (powerpc_eabi_ok): Likewise.
++ (powerpc_elfv2): Likewise.
++ (powerpc_htm_ok): Likewise.
++ (ppc_recip_hw): Likewise.
++ (vsx_hw): Likewise.
++
++2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ Backport from mainline
++ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ PR target/60991
++ * config/avr/avr.c (avr_out_store_psi): Use correct constant
++ to restore Y.
++
++2014-05-09 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2014-05-09 trunk r210267
++
++ PR target/61055
++ * config/avr/avr.md (cc): Add new attribute set_vzn.
++ (addqi3, addqq3, adduqq3, subqi3, subqq3, subuqq3, negqi2) [cc]:
++ Set cc insn attribute to set_vzn instead of set_zn for alternatives
++ with INC, DEC or NEG.
++ * config/avr/avr.c (avr_notice_update_cc): Handle SET_VZN.
++ (avr_out_plus_1): ADIW sets cc0 to CC_SET_CZN.
++ INC, DEC and ADD+ADC set cc0 to CC_CLOBBER.
++
++2014-05-09 Richard Sandiford <rdsandiford@googlemail.com>
++
++ * builtins.c (expand_builtin_setjmp_receiver): Emit a use of
++ the hard frame pointer. Synchronize commentary with mainline.
++ * cse.c (cse_insn): Only check for volatile asms.
++ * cselib.c (cselib_process_insn): Likewise.
++ * dse.c (scan_insn): Likewise.
++ * stmt.c (expand_nl_goto_receiver): Emit a use and a clobber of
++ the hard frame pointer.
++
++2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
++ Matthias Klose <doko@ubuntu.com>
++
++ PR driver/61106
++ * optc-gen.awk: Fix option handling for -Wunused-parameter.
++
++2014-05-08 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/59952
++ * config/i386/i386.c (ix86_option_override_internal): Remove PTA_RTM
++ from core-avx2.
++
++2014-05-08 Charles Baylis <charles.baylis@linaro.org>
++
++ Backport from mainline
++ 2014-04-07 Charles Baylis <charles.baylis@linaro.org>
++
++ PR target/60609
++ * config/arm/arm.h (ASM_OUTPUT_CASE_END): Remove.
++ (LABEL_ALIGN_AFTER_BARRIER): Align barriers which occur after
++ ADDR_DIFF_VEC.
++
+2014-05-06 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config.gcc (aarch64*-*-*): Use ISA flags from aarch64-arches.def.
@@ -11319,19 +11497,19 @@ Index: gcc/ChangeLog
+ (altivec_expand_stvex_be): New function.
+
+ Backport from mainline
-+ 2014-02-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
++ 2014-02-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ * config/rs6000/rs6000.c (rs6000_emit_le_vsx_move): Relax assert
+ to permit subregs.
+
+ Backport from mainline
-+ 2014-02-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
++ 2014-02-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+ * config/rs6000/vector.md (*vector_unordered<mode>): Change split
+ to use canonical form for nor<mode>3.
+
+2014-04-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
-+ 2014-02-04 Michael Meissner <meissner@linux.vnet.ibm.com>
++ 2014-02-04 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.opt (-mlra): Add switch to enable the LRA
+ register allocator.
@@ -13709,9 +13887,9 @@ Index: gcc/ChangeLog
+
+2014-03-26 Martin Jambor <mjambor@suse.cz>
+
-+ PR ipa/60419
-+ * ipa.c (symtab_remove_unreachable_nodes): Clear thunk and
-+ alias flags of nodes in the border.
++ PR ipa/60419
++ * ipa.c (symtab_remove_unreachable_nodes): Clear thunk and
++ alias flags of nodes in the border.
+
+2014-03-26 Eric Botcazou <ebotcazou@adacore.com>
+
@@ -13920,13 +14098,13 @@ Index: gcc/ChangeLog
+ Backport from mainline
+ 2014-02-21 Richard Biener <rguenther@suse.de>
+
-+ PR tree-optimization/60276
-+ * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
-+ (STMT_VINFO_MIN_NEG_DIST): New macro.
-+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
-+ STMT_VINFO_MIN_NEG_DIST.
-+ * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
-+ made for negative dependence distances still hold.
++ PR tree-optimization/60276
++ * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
++ (STMT_VINFO_MIN_NEG_DIST): New macro.
++ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
++ STMT_VINFO_MIN_NEG_DIST.
++ * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
++ made for negative dependence distances still hold.
+
+2014-02-25 Richard Biener <rguenther@suse.de>
+
@@ -15483,7 +15661,7 @@ Index: gcc/ChangeLog
2013-10-16 Release Manager
* GCC 4.8.2 released.
-@@ -639,7 +6008,7 @@
+@@ -639,7 +6081,7 @@
2013-07-31 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
Backport from mainline
@@ -20202,7 +20380,7 @@ Index: gcc/testsuite/gcc.target/powerpc/pack03.c
+/* { dg-do run { target { powerpc*-*-linux* } } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target dfprt } */
++/* { dg-require-effective-target dfp_hw } */
+/* { dg-options "-O2 -mhard-dfp" } */
+
+#include <stddef.h>
@@ -21650,6 +21828,125 @@ Index: gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
int64x1_t
test_vshrd_n_s64 (int64x1_t a)
{
+Index: gcc/testsuite/gcc.target/avr/torture/pr61055.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/avr/torture/pr61055.c (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/gcc.target/avr/torture/pr61055.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,88 @@
++/* { dg-do run } */
++/* { dg-options { -fno-peephole2 } } */
++
++#include <stdlib.h>
++
++typedef __UINT16_TYPE__ uint16_t;
++typedef __INT16_TYPE__ int16_t;
++typedef __UINT8_TYPE__ uint8_t;
++
++uint8_t __attribute__((noinline,noclone))
++fun_inc (uint8_t c0)
++{
++ register uint8_t c asm ("r15") = c0;
++
++ /* Force target value into R15 (lower register) */
++ asm ("" : "+l" (c));
++
++ c++;
++ if (c >= 0x80)
++ c = 0;
++
++ asm ("" : "+l" (c));
++
++ return c;
++}
++
++uint8_t __attribute__((noinline,noclone))
++fun_dec (uint8_t c0)
++{
++ register uint8_t c asm ("r15") = c0;
++
++ /* Force target value into R15 (lower register) */
++ asm ("" : "+l" (c));
++
++ c--;
++ if (c < 0x80)
++ c = 0;
++
++ asm ("" : "+l" (c));
++
++ return c;
++}
++
++
++uint8_t __attribute__((noinline,noclone))
++fun_neg (uint8_t c0)
++{
++ register uint8_t c asm ("r15") = c0;
++
++ c = -c;
++ if (c >= 0x80)
++ c = 0;
++
++ return c;
++}
++
++uint16_t __attribute__((noinline,noclone))
++fun_adiw (uint16_t c0)
++{
++ register uint16_t c asm ("r24") = c0;
++
++ /* Force target value into R24 (for ADIW) */
++ asm ("" : "+r" (c));
++
++ c += 2;
++ if (c >= 0x8000)
++ c = 0;
++
++ asm ("" : "+r" (c));
++
++ return c;
++}
++
++
++int main()
++{
++ if (fun_inc (0x7f) != 0)
++ abort();
++
++ if (fun_neg (0x80) != 0)
++ abort();
++
++ if (fun_adiw (0x7ffe) != 0)
++ abort();
++
++ exit (0);
++ return 0;
++}
+Index: gcc/testsuite/gcc.target/avr/pr60991.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/avr/pr60991.c (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/gcc.target/avr/pr60991.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++/* { dg-options "-O1" } */
++
++/* This testcase (simplified from the original bug report) exposes
++ PR60991. The code generated for writing the __int24 value corrupts
++ the frame pointer if the offset is <= 63 + MAX_LD_OFFSET */
++
++#include <stdlib.h>
++
++int main(void)
++{
++ volatile char junk[62];
++ junk[0] = 5;
++ volatile __int24 staticConfig = 0;
++
++ if (junk[0] != 5)
++ abort();
++
++ exit(0);
++ return 0;
++}
Index: gcc/testsuite/gcc.target/i386/pr59405.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr59405.c (.../tags/gcc_4_8_2_release)
@@ -25863,7 +26160,40 @@ Index: gcc/testsuite/lib/target-supports.exp
# Return 1 if the target supports executing VSX instructions, 0
# otherwise. Cache the result.
-@@ -2672,6 +2698,33 @@
+@@ -1858,6 +1884,32 @@
+ }]
+ }
+
++# Return 1 if the target supports executing DFP hardware instructions,
++# 0 otherwise. Cache the result.
++
++proc check_dfp_hw_available { } {
++ return [check_cached_effective_target dfp_hw_available {
++ # For now, disable on Darwin
++ if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
++ expr 0
++ } else {
++ check_runtime_nocache dfp_hw_available {
++ volatile _Decimal64 r;
++ volatile _Decimal64 a = 4.0DD;
++ volatile _Decimal64 b = 2.0DD;
++ int main()
++ {
++ asm volatile ("dadd %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ asm volatile ("dsub %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ asm volatile ("dmul %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ asm volatile ("ddiv %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
++ return 0;
++ }
++ } "-mcpu=power6 -mhard-float"
++ }
++ }]
++}
++
+ # Return 1 if the target supports compiling and assembling UCN, 0 otherwise.
+
+ proc check_effective_target_ucn_nocache { } {
+@@ -2672,6 +2724,33 @@
}
}
@@ -25897,7 +26227,7 @@ Index: gcc/testsuite/lib/target-supports.exp
# Return 1 if this is a PowerPC target supporting -mvsx
proc check_effective_target_powerpc_vsx_ok { } {
-@@ -2699,6 +2752,27 @@
+@@ -2699,6 +2778,27 @@
}
}
@@ -25925,7 +26255,7 @@ Index: gcc/testsuite/lib/target-supports.exp
# Return 1 if this is a PowerPC target supporting -mcpu=cell.
proc check_effective_target_powerpc_ppu_ok { } {
-@@ -2794,6 +2868,22 @@
+@@ -2794,6 +2894,22 @@
}
}
@@ -25948,23 +26278,27 @@ Index: gcc/testsuite/lib/target-supports.exp
# Return 1 if this is a SPU target with a toolchain that
# supports automatic overlay generation.
-@@ -4499,6 +4589,7 @@
+@@ -4499,7 +4615,9 @@
switch $arg {
"vmx_hw" { set selected [check_vmx_hw_available] }
"vsx_hw" { set selected [check_vsx_hw_available] }
+ "p8vector_hw" { set selected [check_p8vector_hw_available] }
"ppc_recip_hw" { set selected [check_ppc_recip_hw_available] }
++ "dfp_hw" { set selected [check_dfp_hw_available] }
"named_sections" { set selected [check_named_sections_available] }
"gc_sections" { set selected [check_gc_sections_available] }
-@@ -4520,6 +4611,7 @@
+ "cxa_atexit" { set selected [check_cxa_atexit_available] }
+@@ -4520,7 +4638,9 @@
switch $arg {
"vmx_hw" { return 1 }
"vsx_hw" { return 1 }
+ "p8vector_hw" { return 1 }
"ppc_recip_hw" { return 1 }
++ "dfp_hw" { return 1 }
"named_sections" { return 1 }
"gc_sections" { return 1 }
-@@ -5077,7 +5169,9 @@
+ "cxa_atexit" { return 1 }
+@@ -5077,7 +5197,9 @@
}
lappend DEFAULT_VECTCFLAGS "-maltivec"
@@ -32599,6 +32933,15 @@ Index: gcc/testsuite/gcc.dg/torture/pr59330.c
+ free(p);
+ return 0;
+}
+Index: gcc/testsuite/gcc.dg/unused-8b.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/unused-8b.c (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/gcc.dg/unused-8b.c (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,4 @@
++/* { dg-do compile } */
++/* { dg-options "-Wall -Wno-unused -Wextra" } */
++
++void foo(int x) { }
Index: gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/20040517-1.c (.../tags/gcc_4_8_2_release)
@@ -32967,7 +33310,41 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_2_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,1827 @@
+@@ -1,3 +1,1861 @@
++2014-05-14 Matthias Klose <doko@ubuntu.com>
++
++ PR driver/61106
++ * gcc-dg/unused-8a.c: Remove.
++
++2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
++
++ * lib/target-support.exp (check_dfp_hw_available): New function.
++ (is-effective-target): Check $arg for dfp_hw.
++ (is-effective-target-keyword): Likewise.
++ * gcc.target/powerpc/pack03.c: (dg-require-effective-target):
++ Change target to dfp_hw.
++
++2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ Backport from mainline
++ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
++
++ PR target/60991
++ * gcc.target/avr/pr60991.c: New testcase.
++
++2014-05-09 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2014-05-09 trunk r210267
++
++ PR target/61055
++ * gcc.target/avr/torture/pr61055.c: New test.
++
++2014-05-08 Matthias Klose <doko@ubuntu.com>
++
++ PR driver/61106
++ * gcc-dg/unused-8a.c: New.
++ * gcc-dg/unused-8b.c: Likewise.
++
+2014-05-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/57864
@@ -33133,7 +33510,7 @@ Index: gcc/testsuite/ChangeLog
+
+ Backport from mainline
+ PR libfortran/60810
-+ gfortran.dg/arrayio_13.f90: New test.
++ * gfortran.dg/arrayio_13.f90: New test.
+
+2014-04-11 Hans-Peter Nilsson <hp@axis.com>
+
@@ -33208,9 +33585,9 @@ Index: gcc/testsuite/ChangeLog
+2014-04-07 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/60640
-+ * g++.dg/ipa/pr60640-1.C: New test.
-+ * g++.dg/ipa/pr60640-2.C: Likewise.
-+ * g++.dg/ipa/pr60640-3.C: Likewise.
++ * g++.dg/ipa/pr60640-1.C: New test.
++ * g++.dg/ipa/pr60640-2.C: Likewise.
++ * g++.dg/ipa/pr60640-3.C: Likewise.
+
+2014-04-06 Dominique d'Humieres <dominiq@lps.ens.fr>
+ Iain Sandoe <iain@codesourcery.com>
@@ -33543,8 +33920,8 @@ Index: gcc/testsuite/ChangeLog
+
+ Power8 HTM Support
+ Backport from mainline
-+ * lib/target-supports.exp (check_effective_target_powerpc_htm_ok): New
-+ function to test if HTM is available.
++ * lib/target-supports.exp (check_effective_target_powerpc_htm_ok): New
++ function to test if HTM is available.
+ * gcc.target/powerpc/htm-xl-intrin-1.c: New test.
+ * gcc.target/powerpc/htm-builtin-1.c: New test.
+
@@ -33752,8 +34129,8 @@ Index: gcc/testsuite/ChangeLog
+
+2014-03-26 Martin Jambor <mjambor@suse.cz>
+
-+ PR ipa/60419
-+ * g++.dg/ipa/pr60419.C: New test.
++ PR ipa/60419
++ * g++.dg/ipa/pr60419.C: New test.
+
+2014-03-26 Eric Botcazou <ebotcazou@adacore.com>
+
@@ -34795,7 +35172,7 @@ Index: gcc/testsuite/ChangeLog
2013-10-16 Release Manager
* GCC 4.8.2 released.
-@@ -39,9 +1863,9 @@
+@@ -39,9 +1897,9 @@
Backport from mainline
2013-06-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
@@ -34808,7 +35185,7 @@ Index: gcc/testsuite/ChangeLog
2013-10-04 Tobias Burnus <burnus@net-b.de>
-@@ -307,8 +2131,8 @@
+@@ -307,8 +2165,8 @@
Backport from mainline
2013-08-12 Perez Read <netfirewall@gmail.com>
@@ -34819,7 +35196,7 @@ Index: gcc/testsuite/ChangeLog
2013-08-11 Janus Weil <janus@gcc.gnu.org>
-@@ -494,7 +2318,7 @@
+@@ -494,7 +2352,7 @@
2013-06-19 Wei Mi <wmi@google.com>
PR rtl-optimization/57518
@@ -34828,7 +35205,7 @@ Index: gcc/testsuite/ChangeLog
2013-06-11 Tobias Burnus <burnus@net-b.de>
-@@ -623,8 +2447,8 @@
+@@ -623,8 +2481,8 @@
2013-05-09 Martin Jambor <mjambor@suse.cz>
@@ -34839,7 +35216,7 @@ Index: gcc/testsuite/ChangeLog
2013-05-08 Marc Glisse <marc.glisse@inria.fr>
-@@ -701,7 +2525,7 @@
+@@ -701,7 +2559,7 @@
2013-04-25 Marek Polacek <polacek@redhat.com>
PR tree-optimization/57066
@@ -34848,7 +35225,7 @@ Index: gcc/testsuite/ChangeLog
2013-05-02 Jakub Jelinek <jakub@redhat.com>
-@@ -727,8 +2551,8 @@
+@@ -727,8 +2585,8 @@
Backport from mainline
2013-04-24 Vladimir Makarov <vmakarov@redhat.com>
@@ -34859,7 +35236,7 @@ Index: gcc/testsuite/ChangeLog
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
-@@ -735,8 +2559,8 @@
+@@ -735,8 +2593,8 @@
Backport from mainline
2013-04-22 Vladimir Makarov <vmakarov@redhat.com>
@@ -34870,7 +35247,7 @@ Index: gcc/testsuite/ChangeLog
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
-@@ -743,8 +2567,8 @@
+@@ -743,8 +2601,8 @@
Backport from mainline
2013-04-18 Jakub Jelinek <jakub@redhat.com>
@@ -34881,7 +35258,7 @@ Index: gcc/testsuite/ChangeLog
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
-@@ -751,8 +2575,8 @@
+@@ -751,8 +2609,8 @@
Backport from mainline
2013-04-19 Vladimir Makarov <vmakarov@redhat.com>
@@ -34892,7 +35269,7 @@ Index: gcc/testsuite/ChangeLog
2013-05-02 Ian Bolton <ian.bolton@arm.com>
-@@ -1102,7 +2926,7 @@
+@@ -1102,7 +2960,7 @@
2013-03-29 Tobias Burnus <burnus@net-b.de>
PR fortran/56737
@@ -34901,7 +35278,7 @@ Index: gcc/testsuite/ChangeLog
2013-04-02 Richard Biener <rguenther@suse.de>
-@@ -1636,7 +3460,7 @@
+@@ -1636,7 +3494,7 @@
2013-02-20 Jan Hubicka <jh@suse.cz>
PR tree-optimization/56265
@@ -34910,7 +35287,7 @@ Index: gcc/testsuite/ChangeLog
2013-02-20 Richard Biener <rguenther@suse.de>
-@@ -1823,11 +3647,9 @@
+@@ -1823,11 +3681,9 @@
Avoid instrumenting duplicated memory access in the same basic block
* c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
@@ -35447,6 +35824,16 @@ Index: gcc/testsuite/g++.dg/tree-prof/pr59255.C
+ s.fn = foo;
+ }
+}
+Index: gcc/testsuite/g++.dg/expr/cast2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/expr/cast2.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/expr/cast2.C (.../branches/gcc-4_8-branch)
+@@ -1,3 +1,5 @@
++// { dg-options "-pedantic" }
++
+ void (*p)();
+
+ void f() {
Index: gcc/testsuite/g++.dg/gomp/for-20.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/gomp/for-20.C (.../tags/gcc_4_8_2_release)
@@ -35532,6 +35919,18 @@ Index: gcc/testsuite/g++.dg/diagnostic/pr58979.C
+// { dg-do compile }
+
+int i = 0->*0; // { dg-error "invalid type argument of" }
+Index: gcc/testsuite/g++.dg/conversion/dr195.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/conversion/dr195.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/conversion/dr195.C (.../branches/gcc-4_8-branch)
+@@ -6,6 +6,7 @@
+ // it (yet).
+
+ // This checks we warn when being pedantic.
++// { dg-options "-pedantic" }
+
+ typedef void (*PF)(void);
+ typedef void *PV;
Index: gcc/testsuite/g++.dg/conversion/simd1.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/conversion/simd1.C (.../tags/gcc_4_8_2_release)
@@ -35917,6 +36316,36 @@ Index: gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
+template <template <class, class> class C, class A = F<D<int>>>
+void doSomething(C<D<char>, A> &);
+A::A(D<char> const &) : A() { doSomething(m_elements); }
+Index: gcc/testsuite/g++.dg/cpp0x/initlist81.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist81.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist81.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,25 @@
++// PR c++/60713
++// { dg-options "-O" }
++// { dg-do compile { target c++11 } }
++
++template < class x0, class x1, class x2, class x3, class x4 >
++int *x5 (x0 *, x2 (x1::*)(x3, x4));
++
++class x6
++{
++ void x7 ();
++ struct x8
++ {
++ int *x9;
++ };
++ void x10 (x8);
++ void x11 (int *, int *);
++};
++
++void
++x6::x7 ()
++{
++ x10 ({
++ x5 (this, &x6::x11)
++ });
++}
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C (.../tags/gcc_4_8_2_release)
@@ -36096,6 +36525,20 @@ Index: gcc/testsuite/g++.dg/cpp0x/variadic148.C
+template<typename T> struct X {};
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
+int n = test<X, int>(0); // { dg-error "no match" }
+Index: gcc/testsuite/g++.dg/cpp0x/auto42.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/auto42.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/auto42.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,9 @@
++// PR c++/60628
++// { dg-do compile { target c++11 } }
++
++#include <initializer_list>
++
++void foo(int i)
++{
++ auto x[1] = { 0 }; // { dg-error "array of .auto" }
++}
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C (.../tags/gcc_4_8_2_release)
@@ -36144,6 +36587,31 @@ Index: gcc/testsuite/g++.dg/cpp0x/variadic150.C
+{
+ foo<0>; // { dg-error "" }
+}
+Index: gcc/testsuite/g++.dg/cpp0x/initlist82.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist82.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist82.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,20 @@
++// PR c++/60708
++// { dg-do compile { target c++11 } }
++
++template <class T, class U> struct mypair {
++ mypair(T, U) {}
++};
++
++template<typename T> struct S {
++ mypair<T *, int> get_pair() noexcept {
++ return mypair<T*,int>(nullptr, 0);
++ }
++};
++
++static void foo(const mypair<char *, int> (&a)[2]) noexcept { }
++
++int main()
++{
++ S<char> s;
++ foo({s.get_pair(), s.get_pair()});
++}
Index: gcc/testsuite/g++.dg/cpp0x/static_assert9.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C (.../tags/gcc_4_8_2_release)
@@ -36342,6 +36810,263 @@ Index: gcc/testsuite/g++.dg/torture/pr38565.C
#define vector __attribute__((vector_size(16) ))
vector unsigned int f(int a)
{
+Index: gcc/testsuite/g++.dg/torture/pr60609.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/torture/pr60609.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/torture/pr60609.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,252 @@
++/* { dg-do assemble } */
++
++class exception
++{
++};
++class bad_alloc:exception
++{
++};
++class logic_error:exception
++{
++};
++class domain_error:logic_error
++{
++};
++class invalid_argument:logic_error
++{
++};
++class length_error:logic_error
++{
++};
++class overflow_error:exception
++{
++};
++typedef int mpz_t[];
++template < class > class __gmp_expr;
++template <> class __gmp_expr < mpz_t >
++{
++ ~__gmp_expr ();
++};
++
++class PIP_Solution_Node;
++class internal_exception
++{
++ ~internal_exception ();
++};
++class not_an_integer:internal_exception
++{
++};
++class not_a_variable:internal_exception
++{
++};
++class not_an_optimization_mode:internal_exception
++{
++};
++class not_a_bounded_integer_type_width:internal_exception
++{
++};
++class not_a_bounded_integer_type_representation:internal_exception
++{
++};
++class not_a_bounded_integer_type_overflow:internal_exception
++{
++};
++class not_a_complexity_class:internal_exception
++{
++};
++class not_a_control_parameter_name:internal_exception
++{
++};
++class not_a_control_parameter_value:internal_exception
++{
++};
++class not_a_pip_problem_control_parameter_name:internal_exception
++{
++};
++class not_a_pip_problem_control_parameter_value:internal_exception
++{
++};
++class not_a_relation:internal_exception
++{
++};
++class ppl_handle_mismatch:internal_exception
++{
++};
++class timeout_exception
++{
++ ~timeout_exception ();
++};
++class deterministic_timeout_exception:timeout_exception
++{
++};
++void __assert_fail (const char *, const char *, int, int *)
++__attribute__ ((__noreturn__));
++void PL_get_pointer (void *);
++int Prolog_is_address ();
++inline int
++Prolog_get_address (void **p1)
++{
++ Prolog_is_address ()? static_cast <
++ void >(0) : __assert_fail ("Prolog_is_address", "./swi_cfli.hh", 0, 0);
++ PL_get_pointer (p1);
++ return 0;
++}
++
++class non_linear:internal_exception
++{
++};
++class not_unsigned_integer:internal_exception
++{
++};
++class not_universe_or_empty:internal_exception
++{
++};
++class not_a_nil_terminated_list:internal_exception
++{
++};
++class PPL_integer_out_of_range
++{
++ __gmp_expr < mpz_t > n;
++};
++void handle_exception ();
++template < typename T > T * term_to_handle (int, const char *)
++{
++ if (Prolog_is_address ())
++ {
++ void *p;
++ Prolog_get_address (&p);
++ return static_cast < T * >(0);
++ }
++ throw;
++}
++
++void
++ppl_new_MIP_Problem_from_MIP_Problem ()
++try
++{
++ term_to_handle < int >(0, "ppl_new_MIP_Problem_from_MIP_Problem/2");
++}
++
++catch (exception &)
++{
++}
++
++int
++ppl_PIP_Tree_Node_parametric_values ()
++{
++ try
++ {
++ PIP_Solution_Node *a = term_to_handle < PIP_Solution_Node > (0, 0);
++ (void)a;
++ return 1;
++ }
++ catch (internal_exception &)
++ {
++ }
++ catch (not_unsigned_integer &)
++ {
++ handle_exception ();
++ }
++ catch (non_linear &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_variable &)
++ {
++ handle_exception ();
++ }
++ catch (not_an_integer &)
++ {
++ handle_exception ();
++ }
++ catch (ppl_handle_mismatch &)
++ {
++ handle_exception ();
++ }
++ catch (not_an_optimization_mode &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_complexity_class &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_bounded_integer_type_width &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_bounded_integer_type_representation &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_bounded_integer_type_overflow &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_control_parameter_name &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_control_parameter_value &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_pip_problem_control_parameter_name &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_pip_problem_control_parameter_value &)
++ {
++ handle_exception ();
++ }
++ catch (not_universe_or_empty &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_relation &)
++ {
++ handle_exception ();
++ }
++ catch (not_a_nil_terminated_list &)
++ {
++ handle_exception ();
++ }
++ catch (PPL_integer_out_of_range &)
++ {
++ handle_exception ();
++ }
++ catch (int &)
++ {
++ } catch (timeout_exception &)
++ {
++ handle_exception ();
++ } catch (deterministic_timeout_exception &)
++ {
++ handle_exception ();
++ } catch (overflow_error &)
++ {
++ handle_exception ();
++ } catch (domain_error &)
++ {
++ handle_exception ();
++ } catch (length_error &)
++ {
++ handle_exception ();
++ } catch (invalid_argument &)
++ {
++ handle_exception ();
++ } catch (logic_error &)
++ {
++ handle_exception ();
++ } catch (bad_alloc &)
++ {
++ handle_exception ();
++ } catch (exception &)
++ {
++ handle_exception ();
++ } catch ( ...)
++ {
++ handle_exception ();
++ }
++ return 0;
++}
Index: gcc/testsuite/g++.dg/torture/pr57499.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/torture/pr57499.C (.../tags/gcc_4_8_2_release)
@@ -36705,6 +37430,33 @@ Index: gcc/testsuite/g++.dg/ipa/pr60419.C
+{
+ h->l->bar ();
+}
+Index: gcc/testsuite/g++.dg/overload/defarg8.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/overload/defarg8.C (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/testsuite/g++.dg/overload/defarg8.C (.../branches/gcc-4_8-branch)
+@@ -0,0 +1,22 @@
++// PR c++/60367
++// { dg-do run { target c++11 } }
++
++extern "C" int printf (const char *, ...);
++extern "C" void abort();
++
++void *p;
++struct foo {
++ foo() { p = this; }
++ foo (const foo &) { abort(); }
++ ~foo() { if (p != this) abort(); }
++};
++
++void do_something( foo f = {} )
++{
++ if (&f != p) abort();
++}
++
++int main()
++{
++ do_something();
++}
Index: gcc/testsuite/g++.dg/template/ref7.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/template/ref7.C (.../tags/gcc_4_8_2_release)
@@ -37552,7 +38304,22 @@ Index: gcc/cp/decl.c
if (!TREE_CONSTANT (size))
size = osize;
}
-@@ -11891,7 +11893,10 @@
+@@ -8473,6 +8475,14 @@
+ return error_mark_node;
+ }
+
++ /* 8.3.4p1: ...if the type of the identifier of D contains the auto
++ type-specifier, the program is ill-formed. */
++ if (type_uses_auto (type))
++ {
++ error ("%qD declared as array of %qT", name, type);
++ return error_mark_node;
++ }
++
+ /* Figure out the index type for the array. */
+ if (size)
+ itype = compute_array_index_type (name, size, tf_warning_or_error);
+@@ -11891,7 +11901,10 @@
if (decl
&& (DECL_CLASS_TEMPLATE_P (decl)
@@ -37582,7 +38349,24 @@ Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_8_2_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_8-branch)
-@@ -1,3 +1,251 @@
+@@ -1,3 +1,268 @@
++2014-05-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/60708
++ * call.c (build_array_conv): Call complete_type.
++
++ PR c++/60713
++ * typeck2.c (PICFLAG_SIDE_EFFECTS): New.
++ (picflag_from_initializer): Return it.
++ (process_init_constructor): Handle it.
++
++ PR c++/60628
++ * decl.c (create_array_type_for_decl): Complain about array of auto.
++
++ PR c++/60367
++ * call.c (convert_default_arg): Remove special handling for
++ CONSTRUCTOR.
++
+2014-04-28 Daniel Gutson <daniel.gutson@tallertechnologies.com>
+
+ * typeck.c (build_reinterpret_cast_1): Pass proper argument to
@@ -37834,6 +38618,46 @@ Index: gcc/cp/ChangeLog
2013-10-16 Release Manager
* GCC 4.8.2 released.
+Index: gcc/cp/typeck2.c
+===================================================================
+--- a/src/gcc/cp/typeck2.c (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/cp/typeck2.c (.../branches/gcc-4_8-branch)
+@@ -1015,6 +1015,7 @@
+ #define PICFLAG_ERRONEOUS 1
+ #define PICFLAG_NOT_ALL_CONSTANT 2
+ #define PICFLAG_NOT_ALL_SIMPLE 4
++#define PICFLAG_SIDE_EFFECTS 8
+
+ /* Given an initializer INIT, return the flag (PICFLAG_*) which better
+ describe it. */
+@@ -1025,7 +1026,12 @@
+ if (init == error_mark_node)
+ return PICFLAG_ERRONEOUS;
+ else if (!TREE_CONSTANT (init))
+- return PICFLAG_NOT_ALL_CONSTANT;
++ {
++ if (TREE_SIDE_EFFECTS (init))
++ return PICFLAG_SIDE_EFFECTS;
++ else
++ return PICFLAG_NOT_ALL_CONSTANT;
++ }
+ else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
+ return PICFLAG_NOT_ALL_SIMPLE;
+ return 0;
+@@ -1392,7 +1398,12 @@
+ TREE_TYPE (init) = type;
+ if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
+ cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
+- if (flags & PICFLAG_NOT_ALL_CONSTANT)
++ if (flags & PICFLAG_SIDE_EFFECTS)
++ {
++ TREE_CONSTANT (init) = false;
++ TREE_SIDE_EFFECTS (init) = true;
++ }
++ else if (flags & PICFLAG_NOT_ALL_CONSTANT)
+ /* Make sure TREE_CONSTANT isn't set from build_constructor. */
+ TREE_CONSTANT (init) = false;
+ else
Index: gcc/cp/pt.c
===================================================================
--- a/src/gcc/cp/pt.c (.../tags/gcc_4_8_2_release)
@@ -38462,7 +39286,17 @@ Index: gcc/cp/call.c
else
{
if (empty_ctor == NULL_TREE)
-@@ -5806,9 +5809,11 @@
+@@ -940,6 +943,9 @@
+ bool user = false;
+ enum conversion_rank rank = cr_exact;
+
++ /* We might need to propagate the size from the element to the array. */
++ complete_type (type);
++
+ if (TYPE_DOMAIN (type))
+ {
+ unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
+@@ -5806,9 +5812,11 @@
&& convs->kind != ck_ambig
&& (convs->kind != ck_ref_bind
|| convs->user_conv_p)
@@ -38475,7 +39309,7 @@ Index: gcc/cp/call.c
conversion *t = convs;
/* Give a helpful error if this is bad because of excess braces. */
-@@ -5816,7 +5821,14 @@
+@@ -5816,7 +5824,14 @@
&& SCALAR_TYPE_P (totype)
&& CONSTRUCTOR_NELTS (expr) > 0
&& BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
@@ -38491,7 +39325,7 @@ Index: gcc/cp/call.c
for (; t ; t = next_conversion (t))
{
-@@ -5853,8 +5865,9 @@
+@@ -5853,8 +5868,9 @@
break;
}
@@ -38503,7 +39337,7 @@ Index: gcc/cp/call.c
if (fn)
permerror (DECL_SOURCE_LOCATION (fn),
" initializing argument %P of %qD", argnum, fn);
-@@ -5999,6 +6012,8 @@
+@@ -5999,6 +6015,8 @@
to avoid the error about taking the address of a temporary. */
array = cp_build_addr_expr (array, complain);
array = cp_convert (build_pointer_type (elttype), array, complain);
@@ -38512,7 +39346,7 @@ Index: gcc/cp/call.c
/* Build up the initializer_list object. */
totype = complete_type (totype);
-@@ -6023,8 +6038,11 @@
+@@ -6023,8 +6041,11 @@
return fold_if_not_in_template (expr);
}
expr = reshape_init (totype, expr, complain);
@@ -38525,7 +39359,32 @@ Index: gcc/cp/call.c
default:
break;
-@@ -7414,7 +7432,7 @@
+@@ -6405,20 +6426,10 @@
+ /* We must make a copy of ARG, in case subsequent processing
+ alters any part of it. */
+ arg = break_out_target_exprs (arg);
+- if (TREE_CODE (arg) == CONSTRUCTOR)
+- {
+- arg = digest_init (type, arg, complain);
+- arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
+- ICR_DEFAULT_ARGUMENT, fn, parmnum,
+- complain);
+- }
+- else
+- {
+- arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
+- ICR_DEFAULT_ARGUMENT, fn, parmnum,
+- complain);
+- arg = convert_for_arg_passing (type, arg, complain);
+- }
++ arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
++ ICR_DEFAULT_ARGUMENT, fn, parmnum,
++ complain);
++ arg = convert_for_arg_passing (type, arg, complain);
+ pop_deferring_access_checks();
+
+ pop_defarg_context ();
+@@ -7414,7 +7425,7 @@
struct z_candidate *candidates = 0, *cand;
tree explicit_targs = NULL_TREE;
tree basetype = NULL_TREE;
@@ -38534,7 +39393,7 @@ Index: gcc/cp/call.c
tree optype;
tree first_mem_arg = NULL_TREE;
tree instance_ptr;
-@@ -7454,6 +7472,7 @@
+@@ -7454,6 +7465,7 @@
if (!conversion_path)
conversion_path = BASELINK_BINFO (fns);
access_binfo = BASELINK_ACCESS_BINFO (fns);
@@ -38542,7 +39401,7 @@ Index: gcc/cp/call.c
optype = BASELINK_OPTYPE (fns);
fns = BASELINK_FUNCTIONS (fns);
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
-@@ -7697,13 +7716,13 @@
+@@ -7697,13 +7709,13 @@
{
/* Optimize away vtable lookup if we know that this
function can't be overridden. We need to check if
@@ -38806,7 +39665,20 @@ Index: gcc/cse.c
else
return 0;
}
-@@ -6082,6 +6082,18 @@
+@@ -5659,9 +5659,10 @@
+ invalidate (XEXP (dest, 0), GET_MODE (dest));
+ }
+
+- /* A volatile ASM or an UNSPEC_VOLATILE invalidates everything. */
++ /* A volatile ASM invalidates everything. */
+ if (NONJUMP_INSN_P (insn)
+- && volatile_insn_p (PATTERN (insn)))
++ && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
++ && MEM_VOLATILE_P (PATTERN (insn)))
+ flush_hash_table ();
+
+ /* Don't cse over a call to setjmp; on some machines (eg VAX)
+@@ -6082,6 +6083,18 @@
return x;
}
@@ -41970,6 +42842,20 @@ Index: gcc/ada/system-rtems.ads
Null_Address : constant Address;
Storage_Unit : constant := Standard'Storage_Unit;
+Index: gcc/dse.c
+===================================================================
+--- a/src/gcc/dse.c (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/dse.c (.../branches/gcc-4_8-branch)
+@@ -2518,7 +2518,8 @@
+ /* Cselib clears the table for this case, so we have to essentially
+ do the same. */
+ if (NONJUMP_INSN_P (insn)
+- && volatile_insn_p (PATTERN (insn)))
++ && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
++ && MEM_VOLATILE_P (PATTERN (insn)))
+ {
+ add_wild_read (bb_info);
+ insn_info->cannot_delete = true;
Index: gcc/gimple-ssa-strength-reduction.c
===================================================================
--- a/src/gcc/gimple-ssa-strength-reduction.c (.../tags/gcc_4_8_2_release)
@@ -45008,6 +45894,22 @@ Index: gcc/cselib.c
{
has_mem = true;
num_mems++;
+@@ -2623,12 +2623,13 @@
+
+ cselib_current_insn = insn;
+
+- /* Forget everything at a CODE_LABEL, a volatile insn, or a setjmp. */
++ /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */
+ if ((LABEL_P (insn)
+ || (CALL_P (insn)
+ && find_reg_note (insn, REG_SETJMP, NULL))
+ || (NONJUMP_INSN_P (insn)
+- && volatile_insn_p (PATTERN (insn))))
++ && GET_CODE (PATTERN (insn)) == ASM_OPERANDS
++ && MEM_VOLATILE_P (PATTERN (insn))))
+ && !cselib_preserve_constants)
+ {
+ cselib_reset_table (next_uid);
Index: gcc/tree-cfgcleanup.c
===================================================================
--- a/src/gcc/tree-cfgcleanup.c (.../tags/gcc_4_8_2_release)
@@ -49822,6 +50724,15 @@ Index: gcc/config/i386/i386.c
static bool
gate_insert_vzeroupper (void)
+@@ -2920,7 +2886,7 @@
+ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX | PTA_AVX2
+ | PTA_CX16 | PTA_POPCNT | PTA_AES | PTA_PCLMUL | PTA_FSGSBASE
+ | PTA_RDRND | PTA_F16C | PTA_BMI | PTA_BMI2 | PTA_LZCNT
+- | PTA_FMA | PTA_MOVBE | PTA_RTM | PTA_HLE | PTA_FXSR | PTA_XSAVE
++ | PTA_FMA | PTA_MOVBE | PTA_HLE | PTA_FXSR | PTA_XSAVE
+ | PTA_XSAVEOPT},
+ {"atom", PROCESSOR_ATOM, CPU_ATOM,
+ PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
@@ -2983,7 +2949,7 @@
{"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
@@ -51870,6 +52781,46 @@ Index: gcc/config/microblaze/microblaze.h
/* Stack layout; function entry, exit and calling. */
#define STACK_GROWS_DOWNWARD
+Index: gcc/config/avr/avr.md
+===================================================================
+--- a/src/gcc/config/avr/avr.md (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/config/avr/avr.md (.../branches/gcc-4_8-branch)
+@@ -89,7 +89,7 @@
+ (include "constraints.md")
+
+ ;; Condition code settings.
+-(define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber,
++(define_attr "cc" "none,set_czn,set_zn,set_vzn,set_n,compare,clobber,
+ plus,ldi"
+ (const_string "none"))
+
+@@ -1097,7 +1097,7 @@
+ inc %0\;inc %0
+ dec %0\;dec %0"
+ [(set_attr "length" "1,1,1,1,2,2")
+- (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
++ (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
+
+ ;; "addhi3"
+ ;; "addhq3" "adduhq3"
+@@ -1368,7 +1368,7 @@
+ dec %0\;dec %0
+ inc %0\;inc %0"
+ [(set_attr "length" "1,1,1,1,2,2")
+- (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
++ (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
+
+ ;; "subhi3"
+ ;; "subhq3" "subuhq3"
+@@ -3991,7 +3991,7 @@
+ ""
+ "neg %0"
+ [(set_attr "length" "1")
+- (set_attr "cc" "set_zn")])
++ (set_attr "cc" "set_vzn")])
+
+ (define_insn "*negqihi2"
+ [(set (match_operand:HI 0 "register_operand" "=r")
Index: gcc/config/avr/avr.c
===================================================================
--- a/src/gcc/config/avr/avr.c (.../tags/gcc_4_8_2_release)
@@ -51891,7 +52842,55 @@ Index: gcc/config/avr/avr.c
/* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
using this when it switched from SIGNAL and INTERRUPT to ISR. */
-@@ -6806,8 +6810,8 @@
+@@ -2339,6 +2343,12 @@
+ }
+ break;
+
++ case CC_SET_VZN:
++ /* Insn like INC, DEC, NEG that set Z,N,V. We currently don't make use
++ of this combination, cf. also PR61055. */
++ CC_STATUS_INIT;
++ break;
++
+ case CC_SET_CZN:
+ /* Insn sets the Z,N,C flags of CC to recog_operand[0].
+ The V flag may or may not be known but that's ok because
+@@ -3977,7 +3987,7 @@
+ "std Y+61,%A1" CR_TAB
+ "std Y+62,%B1" CR_TAB
+ "std Y+63,%C1" CR_TAB
+- "sbiw r28,%o0-60", op, plen, -5);
++ "sbiw r28,%o0-61", op, plen, -5);
+
+ return avr_asm_len ("subi r28,lo8(-%o0)" CR_TAB
+ "sbci r29,hi8(-%o0)" CR_TAB
+@@ -6274,7 +6284,7 @@
+
+ if (REG_P (xop[2]))
+ {
+- *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_SET_N;
++ *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_CLOBBER;
+
+ for (i = 0; i < n_bytes; i++)
+ {
+@@ -6383,7 +6393,7 @@
+ op, plen, 1);
+
+ if (n_bytes == 2 && PLUS == code)
+- *pcc = CC_SET_ZN;
++ *pcc = CC_SET_CZN;
+ }
+
+ i++;
+@@ -6406,6 +6416,7 @@
+ {
+ avr_asm_len ((code == PLUS) ^ (val8 == 1) ? "dec %0" : "inc %0",
+ op, plen, 1);
++ *pcc = CC_CLOBBER;
+ break;
+ }
+
+@@ -6806,8 +6817,8 @@
/* Work out the shortest sequence. */
@@ -78244,6 +79243,24 @@ Index: gcc/config/arm/arm.h
&& reg_classes_intersect_p (VFP_REGS, (CLASS)))
/* The class value for index registers, and the one for base regs. */
+@@ -2139,14 +2143,9 @@
+ #undef ASM_OUTPUT_BEFORE_CASE_LABEL
+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE) /* Empty. */
+
+-/* Make sure subsequent insns are aligned after a TBB. */
+-#define ASM_OUTPUT_CASE_END(FILE, NUM, JUMPTABLE) \
+- do \
+- { \
+- if (GET_MODE (PATTERN (JUMPTABLE)) == QImode) \
+- ASM_OUTPUT_ALIGN (FILE, 1); \
+- } \
+- while (0)
++#define LABEL_ALIGN_AFTER_BARRIER(LABEL) \
++ (GET_CODE (PATTERN (prev_active_insn (LABEL))) == ADDR_DIFF_VEC \
++ ? 1 : 0)
+
+ #define ARM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \
+ do \
Index: gcc/config/arm/vfp.md
===================================================================
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_8_2_release)
@@ -79624,6 +80641,50 @@ Index: gcc/config/mips/mips.h
/* ISA has data prefetch instructions. This controls use of 'pref'. */
#define ISA_HAS_PREFETCH ((ISA_MIPS4 \
|| TARGET_LOONGSON_2EF \
+Index: gcc/stmt.c
+===================================================================
+--- a/src/gcc/stmt.c (.../tags/gcc_4_8_2_release)
++++ b/src/gcc/stmt.c (.../branches/gcc-4_8-branch)
+@@ -1602,19 +1602,28 @@
+ #ifdef HAVE_nonlocal_goto
+ if (! HAVE_nonlocal_goto)
+ #endif
+- /* First adjust our frame pointer to its actual value. It was
+- previously set to the start of the virtual area corresponding to
+- the stacked variables when we branched here and now needs to be
+- adjusted to the actual hardware fp value.
++ {
++ /* First adjust our frame pointer to its actual value. It was
++ previously set to the start of the virtual area corresponding to
++ the stacked variables when we branched here and now needs to be
++ adjusted to the actual hardware fp value.
+
+- Assignments are to virtual registers are converted by
+- instantiate_virtual_regs into the corresponding assignment
+- to the underlying register (fp in this case) that makes
+- the original assignment true.
+- So the following insn will actually be
+- decrementing fp by STARTING_FRAME_OFFSET. */
+- emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
++ Assignments to virtual registers are converted by
++ instantiate_virtual_regs into the corresponding assignment
++ to the underlying register (fp in this case) that makes
++ the original assignment true.
++ So the following insn will actually be decrementing fp by
++ STARTING_FRAME_OFFSET. */
++ emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
+
++ /* Restoring the frame pointer also modifies the hard frame pointer.
++ Mark it used (so that the previous assignment remains live once
++ the frame pointer is eliminated) and clobbered (to represent the
++ implicit update from the assignment). */
++ emit_use (hard_frame_pointer_rtx);
++ emit_clobber (hard_frame_pointer_rtx);
++ }
++
+ #if !HARD_FRAME_POINTER_IS_ARG_POINTER
+ if (fixed_regs[ARG_POINTER_REGNUM])
+ {
Index: gcc/params.def
===================================================================
--- a/src/gcc/params.def (.../tags/gcc_4_8_2_release)
diff --git a/debian/rules.patch b/debian/rules.patch
index 13f0d03..3f11455 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -90,8 +90,6 @@ debian_patches += \
$(if $(with_linaro_branch),aarch64-abi-fix) \
fix-ffi_call_VFP-with-no-VFP-argument \
$(if $(with_linaro_branch),pr60034) \
- pr60609 \
- gcc-rs6000-update \
pr61106 \
# FIXME: still necessary for cross building the native compiler?