summaryrefslogtreecommitdiff
path: root/debian/patches/gcc-linaro-revert-r247639.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/gcc-linaro-revert-r247639.diff')
-rw-r--r--debian/patches/gcc-linaro-revert-r247639.diff369
1 files changed, 369 insertions, 0 deletions
diff --git a/debian/patches/gcc-linaro-revert-r247639.diff b/debian/patches/gcc-linaro-revert-r247639.diff
new file mode 100644
index 0000000..a186f7e
--- /dev/null
+++ b/debian/patches/gcc-linaro-revert-r247639.diff
@@ -0,0 +1,369 @@
+Index: b/src/gcc/ChangeLog
+===================================================================
+--- a/src/gcc/ChangeLog
++++ b/src/gcc/ChangeLog
+@@ -209,25 +209,6 @@
+ * config/i386/i386.c (ix86_print_operand): Use output_operand_lossage
+ instead of gcc_assert for K, r and R code checks. Formatting fixes.
+
+-2017-05-05 Marek Polacek <polacek@redhat.com>
+- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+- Jakub Jelinek <jakub@redhat.com>
+-
+- PR target/77728
+- * config/arm/arm.c: Include gimple.h.
+- (aapcs_layout_arg): Emit -Wpsabi note if arm_needs_doubleword_align
+- returns negative, increment ncrn if it returned non-zero.
+- (arm_needs_doubleword_align): Return int instead of bool,
+- ignore DECL_ALIGN of non-FIELD_DECL TYPE_FIELDS chain
+- members, but if there is any such non-FIELD_DECL
+- > PARM_BOUNDARY aligned decl, return -1 instead of false.
+- (arm_function_arg): Emit -Wpsabi note if arm_needs_doubleword_align
+- returns negative, increment nregs if it returned non-zero.
+- (arm_setup_incoming_varargs): Likewise.
+- (arm_function_arg_boundary): Emit -Wpsabi note if
+- arm_needs_doubleword_align returns negative, return
+- DOUBLEWORD_ALIGNMENT if it returned non-zero.
+-
+ 2017-05-03 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+Index: b/src/gcc/testsuite/ChangeLog
+===================================================================
+--- a/src/gcc/testsuite/ChangeLog
++++ b/src/gcc/testsuite/ChangeLog
+@@ -151,13 +151,6 @@
+ PR c++/79512
+ * c-c++-common/gomp/pr79512.c: New test.
+
+-2017-05-05 Marek Polacek <polacek@redhat.com>
+- Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
+- Jakub Jelinek <jakub@redhat.com>
+-
+- PR target/77728
+- * g++.dg/abi/pr77728-1.C: New test.
+-
+ 2017-05-01 Janus Weil <janus@gcc.gnu.org>
+
+ Backport from trunk
+Index: b/src/gcc/testsuite/g++.dg/abi/pr77728-1.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/abi/pr77728-1.C
++++ b/src/gcc/testsuite/g++.dg/abi/pr77728-1.C
+@@ -1,171 +0,0 @@
+-// { dg-do compile { target arm_eabi } }
+-// { dg-options "-Wpsabi" }
+-
+-#include <stdarg.h>
+-
+-template <int N>
+-struct A { double p; };
+-
+-A<0> v;
+-
+-template <int N>
+-struct B
+-{
+- typedef A<N> T;
+- int i, j;
+-};
+-
+-struct C : public B<0> {};
+-struct D {};
+-struct E : public D, C {};
+-struct F : public B<1> {};
+-struct G : public F { static double y; };
+-struct H : public G {};
+-struct I : public D { long long z; };
+-struct J : public D { static double z; int i, j; };
+-
+-template <int N>
+-struct K : public D { typedef A<N> T; int i, j; };
+-
+-struct L { static double h; int i, j; };
+-
+-int
+-fn1 (int a, B<0> b) // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" }
+-{
+- return a + b.i;
+-}
+-
+-int
+-fn2 (int a, B<1> b)
+-{
+- return a + b.i;
+-}
+-
+-int
+-fn3 (int a, L b) // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" }
+-{
+- return a + b.i;
+-}
+-
+-int
+-fn4 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, B<0> n, ...)
+-// { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 }
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn5 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, B<1> n, ...)
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn6 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, C n, ...)
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn7 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, E n, ...)
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn8 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, H n, ...)
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn9 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, I n, ...)
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn10 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, J n, ...)
+-// { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 }
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn11 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, K<0> n, ...)
+-// { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 }
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-int
+-fn12 (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, K<2> n, ...)
+-{
+- va_list ap;
+- va_start (ap, n);
+- int x = va_arg (ap, int);
+- va_end (ap);
+- return x;
+-}
+-
+-void
+-test ()
+-{
+- static B<0> b0;
+- static B<1> b1;
+- static L l;
+- static C c;
+- static E e;
+- static H h;
+- static I i;
+- static J j;
+- static K<0> k0;
+- static K<2> k2;
+- fn1 (1, b0); // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" }
+- fn2 (1, b1);
+- fn3 (1, l); // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" }
+- fn4 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, b0, 1, 2, 3, 4);
+- // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 }
+- fn5 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, b1, 1, 2, 3, 4);
+- fn6 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, c, 1, 2, 3, 4);
+- fn7 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, e, 1, 2, 3, 4);
+- fn8 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, h, 1, 2, 3, 4);
+- fn9 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, i, 1, 2, 3, 4);
+- fn10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, j, 1, 2, 3, 4);
+- // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 }
+- fn11 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, k0, 1, 2, 3, 4);
+- // { dg-message "note: parameter passing for argument of type \[^\n\r]* will change in GCC 7\.1" "" { target *-*-* } .-1 }
+- fn12 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, k2, 1, 2, 3, 4);
+-}
+Index: b/src/gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c
++++ b/src/gcc/config/arm/arm.c
+@@ -61,7 +61,6 @@
+ #include "builtins.h"
+ #include "tm-constrs.h"
+ #include "rtl-iter.h"
+-#include "gimple.h"
+
+ /* This file should be included last. */
+ #include "target-def.h"
+@@ -79,7 +78,7 @@ struct four_ints
+
+ /* Forward function declarations. */
+ static bool arm_const_not_ok_for_debug_p (rtx);
+-static int arm_needs_doubleword_align (machine_mode, const_tree);
++static bool arm_needs_doubleword_align (machine_mode, const_tree);
+ static int arm_compute_static_chain_stack_bytes (void);
+ static arm_stack_offsets *arm_get_frame_offsets (void);
+ static void arm_add_gc_roots (void);
+@@ -6138,20 +6137,8 @@ aapcs_layout_arg (CUMULATIVE_ARGS *pcum,
+ /* C3 - For double-word aligned arguments, round the NCRN up to the
+ next even number. */
+ ncrn = pcum->aapcs_ncrn;
+- if (ncrn & 1)
+- {
+- int res = arm_needs_doubleword_align (mode, type);
+- /* Only warn during RTL expansion of call stmts, otherwise we would
+- warn e.g. during gimplification even on functions that will be
+- always inlined, and we'd warn multiple times. Don't warn when
+- called in expand_function_start either, as we warn instead in
+- arm_function_arg_boundary in that case. */
+- if (res < 0 && warn_psabi && currently_expanding_gimple_stmt)
+- inform (input_location, "parameter passing for argument of type "
+- "%qT will change in GCC 7.1", type);
+- if (res != 0)
+- ncrn++;
+- }
++ if ((ncrn & 1) && arm_needs_doubleword_align (mode, type))
++ ncrn++;
+
+ nregs = ARM_NUM_REGS2(mode, type);
+
+@@ -6256,16 +6243,12 @@ arm_init_cumulative_args (CUMULATIVE_ARG
+ }
+ }
+
+-/* Return 1 if double word alignment is required for argument passing.
+- Return -1 if double word alignment used to be required for argument
+- passing before PR77728 ABI fix, but is not required anymore.
+- Return 0 if double word alignment is not required and wasn't requried
+- before either. */
+-static int
++/* Return true if mode/type need doubleword alignment. */
++static bool
+ arm_needs_doubleword_align (machine_mode mode, const_tree type)
+ {
+ if (!type)
+- return GET_MODE_ALIGNMENT (mode) > PARM_BOUNDARY;
++ return PARM_BOUNDARY < GET_MODE_ALIGNMENT (mode);
+
+ /* Scalar and vector types: Use natural alignment, i.e. of base type. */
+ if (!AGGREGATE_TYPE_P (type))
+@@ -6275,21 +6258,12 @@ arm_needs_doubleword_align (machine_mode
+ if (TREE_CODE (type) == ARRAY_TYPE)
+ return TYPE_ALIGN (TREE_TYPE (type)) > PARM_BOUNDARY;
+
+- int ret = 0;
+ /* Record/aggregate types: Use greatest member alignment of any member. */
+ for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ if (DECL_ALIGN (field) > PARM_BOUNDARY)
+- {
+- if (TREE_CODE (field) == FIELD_DECL)
+- return 1;
+- else
+- /* Before PR77728 fix, we were incorrectly considering also
+- other aggregate fields, like VAR_DECLs, TYPE_DECLs etc.
+- Make sure we can warn about that with -Wpsabi. */
+- ret = -1;
+- }
++ return true;
+
+- return ret;
++ return false;
+ }
+
+
+@@ -6346,15 +6320,10 @@ arm_function_arg (cumulative_args_t pcum
+ }
+
+ /* Put doubleword aligned quantities in even register pairs. */
+- if ((pcum->nregs & 1) && ARM_DOUBLEWORD_ALIGN)
+- {
+- int res = arm_needs_doubleword_align (mode, type);
+- if (res < 0 && warn_psabi)
+- inform (input_location, "parameter passing for argument of type "
+- "%qT will change in GCC 7.1", type);
+- if (res != 0)
+- pcum->nregs++;
+- }
++ if (pcum->nregs & 1
++ && ARM_DOUBLEWORD_ALIGN
++ && arm_needs_doubleword_align (mode, type))
++ pcum->nregs++;
+
+ /* Only allow splitting an arg between regs and memory if all preceding
+ args were allocated to regs. For args passed by reference we only count
+@@ -6373,15 +6342,9 @@ arm_function_arg (cumulative_args_t pcum
+ static unsigned int
+ arm_function_arg_boundary (machine_mode mode, const_tree type)
+ {
+- if (!ARM_DOUBLEWORD_ALIGN)
+- return PARM_BOUNDARY;
+-
+- int res = arm_needs_doubleword_align (mode, type);
+- if (res < 0 && warn_psabi)
+- inform (input_location, "parameter passing for argument of type %qT "
+- "will change in GCC 7.1", type);
+-
+- return res != 0 ? DOUBLEWORD_ALIGNMENT : PARM_BOUNDARY;
++ return (ARM_DOUBLEWORD_ALIGN && arm_needs_doubleword_align (mode, type)
++ ? DOUBLEWORD_ALIGNMENT
++ : PARM_BOUNDARY);
+ }
+
+ static int
+@@ -26439,15 +26402,8 @@ arm_setup_incoming_varargs (cumulative_a
+ if (pcum->pcs_variant <= ARM_PCS_AAPCS_LOCAL)
+ {
+ nregs = pcum->aapcs_ncrn;
+- if (nregs & 1)
+- {
+- int res = arm_needs_doubleword_align (mode, type);
+- if (res < 0 && warn_psabi)
+- inform (input_location, "parameter passing for argument of "
+- "type %qT will change in GCC 7.1", type);
+- if (res != 0)
+- nregs++;
+- }
++ if ((nregs & 1) && arm_needs_doubleword_align (mode, type))
++ nregs++;
+ }
+ else
+ nregs = pcum->nregs;