gcc-4.8: Fix meta-fsl-arm iperf build issue

This should fix the problem seen where gcc ICE
was happening when compiling iperf with older 2.6.x
kernel

Test this patch by reverting below commit in meta-fsl-arm

commit daf582c93a7283fb0af3b25fe2ada48f4c9985c4
Author: Otavio Salvador <otavio@ossystems.com.br>
Date:   Tue Jul 2 11:52:51 2013 -0300

    perf: Disable FPU tune for i.MX5 SoCs to workaround GCC ICE

(From OE-Core rev: 8ab1d16b6c6d946b625b6872e5d0f155206f4bad)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
CC: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2013-08-01 15:07:55 -07:00 committed by Richard Purdie
parent 82877a9665
commit 5aff1820c5
2 changed files with 79 additions and 0 deletions

View File

@ -71,6 +71,7 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
file://0039-gcc-4.8-PR57717.patch \
file://0040-fix-g++-sysroot.patch \
file://0041-libtool-avoid-libdir.patch \
file://0042-pr57748.patch \
"
SRC_URI[md5sum] = "3b2386c114cd74185aa3754b58a79304"
SRC_URI[sha256sum] = "545b44be3ad9f2c4e90e6880f5c9d4f0a8f0e5f67e1ffb0d45da9fa01bb05813"

View File

@ -0,0 +1,78 @@
Upstream-Status: Backport
Signed-off-by: Khem Raj
2013-08-01 Martin Jambor <mjambor@suse.cz>
PR middle-end/57748
* stor-layout.c (compute_record_mode): Treat zero-sized array fields
like incomplete types.
testsuite/
* gcc.dg/torture/pr57748.c: New test.
Index: gcc-4.8.1/gcc/stor-layout.c
===================================================================
--- gcc-4.8.1.orig/gcc/stor-layout.c 2013-04-28 10:29:18.000000000 -0700
+++ gcc-4.8.1/gcc/stor-layout.c 2013-08-01 15:02:08.018006125 -0700
@@ -1618,7 +1618,9 @@
&& integer_zerop (TYPE_SIZE (TREE_TYPE (field)))))
|| ! host_integerp (bit_position (field), 1)
|| DECL_SIZE (field) == 0
- || ! host_integerp (DECL_SIZE (field), 1))
+ || ! host_integerp (DECL_SIZE (field), 1)
+ || (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
+ && tree_low_cst (DECL_SIZE (field), 1) == 0))
return;
/* If this field is the whole struct, remember its mode so
Index: gcc-4.8.1/gcc/testsuite/gcc.dg/torture/pr57748.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gcc-4.8.1/gcc/testsuite/gcc.dg/torture/pr57748.c 2013-08-01 15:02:08.062006126 -0700
@@ -0,0 +1,45 @@
+/* PR middle-end/57748 */
+/* { dg-do run } */
+
+#include <stdlib.h>
+
+extern void abort (void);
+
+typedef long long V
+ __attribute__ ((vector_size (2 * sizeof (long long)), may_alias));
+
+typedef struct S { V a; V b[0]; } P __attribute__((aligned (1)));
+
+struct __attribute__((packed)) T { char c; P s; };
+
+void __attribute__((noinline, noclone))
+check (struct T *t)
+{
+ if (t->s.b[0][0] != 3 || t->s.b[0][1] != 4)
+ abort ();
+}
+
+int __attribute__((noinline, noclone))
+get_i (void)
+{
+ return 0;
+}
+
+void __attribute__((noinline, noclone))
+foo (P *p)
+{
+ V a = { 3, 4 };
+ int i = get_i();
+ p->b[i] = a;
+}
+
+int
+main ()
+{
+ struct T *t = (struct T *) malloc (128);
+
+ foo (&t->s);
+ check (t);
+
+ return 0;
+}