Hello community,

here is the log from the commit of package gcc48 for openSUSE:Factory checked 
in at 2014-09-15 17:39:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gcc48 (Old)
 and      /work/SRC/openSUSE:Factory/.gcc48.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gcc48"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gcc48/cross-aarch64-gcc48-icecream-backend.changes   
    2014-07-19 11:04:37.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.gcc48.new/cross-aarch64-gcc48-icecream-backend.changes
  2014-09-15 17:39:49.000000000 +0200
@@ -1,0 +2,18 @@
+Fri Aug  1 08:32:16 UTC 2014 - rguent...@suse.com
+
+- Add patch gcc48-libgfortran-CVE-2014-5044.diff to fix
+  integer overflows in libgfortran, CVE-2014-5044.  [bnc#888791]
+
+-------------------------------------------------------------------
+Mon Jul 28 08:36:23 UTC 2014 - rguent...@suse.com
+
+- Add patch gcc48-ppc64le-abi-warnings-fix.diff to fix failure to
+  link any Objective-C/C++ program on ppc64le.  [ggo#61920]
+
+-------------------------------------------------------------------
+Fri Jul 25 07:34:37 UTC 2014 - rguent...@suse.com
+
+- Add patch gcc48-ppc64le-abi-warnings.diff to warn about future
+  ABI changes for ppc64le.  [bnc#888907]
+
+-------------------------------------------------------------------
cross-armv6hl-gcc48-icecream-backend.changes: same change
cross-armv7hl-gcc48-icecream-backend.changes: same change
cross-hppa-gcc48-icecream-backend.changes: same change
cross-i386-gcc48-icecream-backend.changes: same change
cross-ia64-gcc48-icecream-backend.changes: same change
cross-ppc-gcc48-icecream-backend.changes: same change
cross-ppc64-gcc48-icecream-backend.changes: same change
cross-ppc64le-gcc48-icecream-backend.changes: same change
cross-s390-gcc48-icecream-backend.changes: same change
cross-s390x-gcc48-icecream-backend.changes: same change
cross-x86_64-gcc48-icecream-backend.changes: same change
gcc48-testresults.changes: same change
gcc48.changes: same change
libffi48.changes: same change
libgcj48.changes: same change

New:
----
  gcc48-libgfortran-CVE-2014-5044.diff
  gcc48-ppc64le-abi-warnings-fix.diff
  gcc48-ppc64le-abi-warnings.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ cross-aarch64-gcc48-icecream-backend.spec ++++++
--- /var/tmp/diff_new_pack.Ee7Sr6/_old  2014-09-15 17:39:53.000000000 +0200
+++ /var/tmp/diff_new_pack.Ee7Sr6/_new  2014-09-15 17:39:53.000000000 +0200
@@ -127,6 +127,9 @@
 Patch39:        gcc48-libstdc++-api-reference.patch
 Patch40:        gcc48-bnc887141.patch
 Patch41:        gcc48-bnc884738.patch
+Patch42:        gcc48-ppc64le-abi-warnings.diff
+Patch43:        gcc48-ppc64le-abi-warnings-fix.diff
+Patch44:        gcc48-libgfortran-CVE-2014-5044.diff
 # A set of patches from the RH srpm
 Patch51:        gcc41-ia64-stack-protector.patch
 Patch55:        gcc41-java-slow_pthread_self.patch
@@ -206,6 +209,9 @@
 %patch39
 %patch40
 %patch41
+%patch42
+%patch43
+%patch44
 %patch51
 %patch55
 %patch57
@@ -379,6 +385,9 @@
 %if 0%{suse_version} > 1100
        --enable-linker-build-id \
 %endif
+%if 0%{suse_version} < 1220
+        --disable-initfini-array \
+%endif
        --enable-linux-futex \
 %if 0%{!?gcc_target_arch:1}
        --program-suffix=%{binsuffix} \

cross-armv6hl-gcc48-icecream-backend.spec: same change
cross-armv7hl-gcc48-icecream-backend.spec: same change
cross-hppa-gcc48-icecream-backend.spec: same change
cross-i386-gcc48-icecream-backend.spec: same change
cross-ia64-gcc48-icecream-backend.spec: same change
cross-ppc-gcc48-icecream-backend.spec: same change
cross-ppc64-gcc48-icecream-backend.spec: same change
cross-ppc64le-gcc48-icecream-backend.spec: same change
cross-s390-gcc48-icecream-backend.spec: same change
cross-s390x-gcc48-icecream-backend.spec: same change
cross-x86_64-gcc48-icecream-backend.spec: same change
gcc48-testresults.spec: same change
++++++ gcc48.spec ++++++
--- /var/tmp/diff_new_pack.Ee7Sr6/_old  2014-09-15 17:39:54.000000000 +0200
+++ /var/tmp/diff_new_pack.Ee7Sr6/_new  2014-09-15 17:39:54.000000000 +0200
@@ -270,6 +270,9 @@
 Patch39:        gcc48-libstdc++-api-reference.patch
 Patch40:        gcc48-bnc887141.patch
 Patch41:        gcc48-bnc884738.patch
+Patch42:        gcc48-ppc64le-abi-warnings.diff
+Patch43:        gcc48-ppc64le-abi-warnings-fix.diff
+Patch44:        gcc48-libgfortran-CVE-2014-5044.diff
 # A set of patches from the RH srpm
 Patch51:        gcc41-ia64-stack-protector.patch
 Patch55:        gcc41-java-slow_pthread_self.patch
@@ -1494,6 +1497,9 @@
 %patch39
 %patch40
 %patch41
+%patch42
+%patch43
+%patch44
 %patch51
 %patch55
 %patch57
@@ -1667,6 +1673,9 @@
 %if 0%{suse_version} > 1100
        --enable-linker-build-id \
 %endif
+%if 0%{suse_version} < 1220
+        --disable-initfini-array \
+%endif
        --enable-linux-futex \
 %if 0%{!?gcc_target_arch:1}
        --program-suffix=%{binsuffix} \

++++++ libffi48.spec ++++++
--- /var/tmp/diff_new_pack.Ee7Sr6/_old  2014-09-15 17:39:54.000000000 +0200
+++ /var/tmp/diff_new_pack.Ee7Sr6/_new  2014-09-15 17:39:54.000000000 +0200
@@ -287,6 +287,9 @@
 Patch39:        gcc48-libstdc++-api-reference.patch
 Patch40:        gcc48-bnc887141.patch
 Patch41:        gcc48-bnc884738.patch
+Patch42:        gcc48-ppc64le-abi-warnings.diff
+Patch43:        gcc48-ppc64le-abi-warnings-fix.diff
+Patch44:        gcc48-libgfortran-CVE-2014-5044.diff
 # A set of patches from the RH srpm
 Patch51:        gcc41-ia64-stack-protector.patch
 Patch55:        gcc41-java-slow_pthread_self.patch
@@ -505,6 +508,9 @@
 %patch39
 %patch40
 %patch41
+%patch42
+%patch43
+%patch44
 %patch51
 %patch55
 %patch57
@@ -678,6 +684,9 @@
 %if 0%{suse_version} > 1100
        --enable-linker-build-id \
 %endif
+%if 0%{suse_version} < 1220
+        --disable-initfini-array \
+%endif
        --enable-linux-futex \
 %if 0%{!?gcc_target_arch:1}
        --program-suffix=%{binsuffix} \

libgcj48.spec: same change

++++++ gcc.spec.in ++++++
--- /var/tmp/diff_new_pack.Ee7Sr6/_old  2014-09-15 17:39:54.000000000 +0200
+++ /var/tmp/diff_new_pack.Ee7Sr6/_new  2014-09-15 17:39:54.000000000 +0200
@@ -277,6 +277,9 @@
 Patch39:       gcc48-libstdc++-api-reference.patch
 Patch40:       gcc48-bnc887141.patch
 Patch41:       gcc48-bnc884738.patch
+Patch42:       gcc48-ppc64le-abi-warnings.diff
+Patch43:       gcc48-ppc64le-abi-warnings-fix.diff
+Patch44:       gcc48-libgfortran-CVE-2014-5044.diff
 # A set of patches from the RH srpm
 Patch51:       gcc41-ia64-stack-protector.patch
 Patch55:       gcc41-java-slow_pthread_self.patch
@@ -1007,6 +1010,9 @@
 %patch39
 %patch40
 %patch41
+%patch42
+%patch43
+%patch44
 %patch51
 %patch55
 %patch57
@@ -1180,6 +1186,9 @@
 %if 0%{suse_version} > 1100
        --enable-linker-build-id \
 %endif
+%if 0%{suse_version} < 1220
+        --disable-initfini-array \
+%endif
        --enable-linux-futex \
 %if 0%{!?gcc_target_arch:1}
        --program-suffix=%{binsuffix} \

++++++ gcc48-libgfortran-CVE-2014-5044.diff ++++++
++++ 10922 lines (skipped)

++++++ gcc48-ppc64le-abi-warnings-fix.diff ++++++
2014-07-27  Alan Modra  <amo...@gmail.com>
            Matthias Klose  <d...@ubuntu.com>

        PR libobjc/61920
        * encoding.c: Define rs6000_special_adjust_field_align_p.

2014-07-27  Ulrich Weigand  <uweig...@de.ibm.com>

        PR libobjc/61920
        * encoding.c (rs6000_special_adjust_field_align_p): Use definition
        that matches the 4.8 branch ABI.
 
Index: libobjc/encoding.c
===================================================================
--- libobjc/encoding.c  (revision 213099)
+++ libobjc/encoding.c  (revision 213100)
@@ -192,6 +192,7 @@ _darwin_rs6000_special_round_type_align
    ? MAX (MAX (COMPUTED, SPECIFIED), 64)                               \
    : MAX (COMPUTED, SPECIFIED));})
 
+#define rs6000_special_adjust_field_align_p(FIELD, COMPUTED) 0
 
 /* Skip a variable name, enclosed in quotes (").  */
 static inline

Index: libobjc/encoding.c
===================================================================
--- libobjc/encoding.c  (revision 213127)
+++ libobjc/encoding.c  (revision 213128)
@@ -192,7 +192,8 @@ _darwin_rs6000_special_round_type_align
    ? MAX (MAX (COMPUTED, SPECIFIED), 64)                               \
    : MAX (COMPUTED, SPECIFIED));})
 
-#define rs6000_special_adjust_field_align_p(FIELD, COMPUTED) 0
+#define rs6000_special_adjust_field_align_p(FIELD, COMPUTED) \
+ (TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE)
 
 /* Skip a variable name, enclosed in quotes (").  */
 static inline

++++++ gcc48-ppc64le-abi-warnings.diff ++++++
2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * config/rs6000/rs6000-protos.h (rs6000_special_adjust_field_align_p):
        Add prototype.
        * config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p): New
        function.  Issue -Wpsabi warning if future GCC releases will use
        different field alignment rules for this type.
        * config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Call it.
        * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise.
        * config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Likewise.

2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * config/rs6000/rs6000.c (rs6000_function_arg_boundary): Issue
        -Wpsabi note when encountering a type where future GCC releases
        will apply different alignment requirements.

2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * config/rs6000/rs6000.c (rs6000_function_arg): If a float argument
        does not fit fully into floating-point registers, and there is still
        space in the register parameter area, issue -Wpsabi note that the ABI
        will change in a future GCC release.

2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        Backport from mainline:
        2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * gcc.target/powerpc/ppc64-abi-warn-3.c: New test.

        * gcc.c-torture/execute/20050316-1.x: Add -Wno-psabi.
        * gcc.c-torture/execute/20050604-1.x: Add -Wno-psabi.
        * gcc.c-torture/execute/20050316-3.x: New file.  Add -Wno-psabi.
        * gcc.c-torture/execute/pr23135.x: Likewise.

2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        Backport from mainline:
        2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * gcc.target/powerpc/ppc64-abi-warn-2.c: New test.

2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        Backport from mainline:
        2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * gcc.target/powerpc/ppc64-abi-warn-1.c: New test.

2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        Backport from mainline:
        2014-07-24  Ulrich Weigand  <ulrich.weig...@de.ibm.com>

        * g++.dg/compat/struct-layout-1.exp: Load g++-dg.exp.

Index: gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c (revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-1.c (revision 213025)
@@ -0,0 +1,12 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-options "-mabi=elfv2" } */
+
+struct f8
+  {
+    float x[8];
+  };
+
+void test (struct f8 a, struct f8 b) /* { dg-message "note: the ABI of passing 
homogeneous float aggregates will change" } */
+{
+}
+
Index: gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c (revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-2.c (revision 213025)
@@ -0,0 +1,12 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-options "-mno-compat-align-parm" } */
+
+struct test
+  {
+    long a __attribute__((aligned (16)));
+  };
+
+void test (struct test a) /* { dg-message "note: the ABI of passing aggregates 
with 16-byte alignment will change" } */
+{
+}
+
Index: gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c (revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc64-abi-warn-3.c (revision 213025)
@@ -0,0 +1,9 @@
+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+struct test
+  {
+    int a __attribute__((vector_size (8)));
+  }; /* { dg-message "note: the layout of aggregates containing vectors with 
8-byte alignment will change" } */
+
Index: gcc/testsuite/gcc.c-torture/execute/pr23135.x
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/pr23135.x       (revision 0)
+++ gcc/testsuite/gcc.c-torture/execute/pr23135.x       (revision 213025)
@@ -0,0 +1,2 @@
+set additional_flags "-Wno-psabi"
+return 0
Index: gcc/testsuite/gcc.c-torture/execute/20050604-1.x
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/20050604-1.x    (revision 213021)
+++ gcc/testsuite/gcc.c-torture/execute/20050604-1.x    (revision 213025)
@@ -6,4 +6,5 @@ if { [istarget "i?86-*-*"] || [istarget
        set additional_flags "-mno-mmx"
 }
 
+set additional_flags "-Wno-psabi"
 return 0
Index: gcc/testsuite/gcc.c-torture/execute/20050316-1.x
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/20050316-1.x    (revision 213021)
+++ gcc/testsuite/gcc.c-torture/execute/20050316-1.x    (revision 213025)
@@ -4,4 +4,5 @@ if { [check_effective_target_int16] } {
        return 1
 }
 
+set additional_flags "-Wno-psabi"
 return 0;
Index: gcc/testsuite/gcc.c-torture/execute/20050316-3.x
===================================================================
--- gcc/testsuite/gcc.c-torture/execute/20050316-3.x    (revision 0)
+++ gcc/testsuite/gcc.c-torture/execute/20050316-3.x    (revision 213025)
@@ -0,0 +1,2 @@
+set additional_flags "-Wno-psabi"
+return 0
Index: gcc/testsuite/g++.dg/compat/struct-layout-1.exp
===================================================================
--- gcc/testsuite/g++.dg/compat/struct-layout-1.exp     (revision 213021)
+++ gcc/testsuite/g++.dg/compat/struct-layout-1.exp     (revision 213025)
@@ -89,6 +89,9 @@ proc compat-use-tst-compiler { } {
 # This must be done after the compat-use-*-compiler definitions.
 load_lib compat.exp
 
+# Provide the g++-dg-prune routine (gcc-dp.exp is loaded by compat.exp)
+load_lib g++-dg.exp
+
 g++_init
 
 # Save variables for the C++ compiler under test, which each test will
Index: gcc/config/rs6000/freebsd64.h
===================================================================
--- gcc/config/rs6000/freebsd64.h       (revision 213021)
+++ gcc/config/rs6000/freebsd64.h       (revision 213025)
@@ -367,7 +367,7 @@ extern int dot_symbols;
 /* PowerPC64 Linux word-aligns FP doubles when -malign-power is given.  */
 #undef  ADJUST_FIELD_ALIGN
 #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
-  ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE)     \
+  (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED))           \
    ? 128                                                                \
    : (TARGET_64BIT                                                      \
       && TARGET_ALIGN_NATURAL == 0                                      \
Index: gcc/config/rs6000/rs6000-protos.h
===================================================================
--- gcc/config/rs6000/rs6000-protos.h   (revision 213021)
+++ gcc/config/rs6000/rs6000-protos.h   (revision 213025)
@@ -153,6 +153,7 @@ extern void rs6000_split_logical (rtx []
 
 #ifdef TREE_CODE
 extern unsigned int rs6000_data_alignment (tree, unsigned int, enum 
data_align);
+extern bool rs6000_special_adjust_field_align_p (tree, unsigned int);
 extern unsigned int rs6000_special_round_type_align (tree, unsigned int,
                                                     unsigned int);
 extern unsigned int darwin_rs6000_special_round_type_align (tree, unsigned int,
Index: gcc/config/rs6000/linux64.h
===================================================================
--- gcc/config/rs6000/linux64.h (revision 213021)
+++ gcc/config/rs6000/linux64.h (revision 213025)
@@ -246,7 +246,7 @@ extern int dot_symbols;
 /* PowerPC64 Linux word-aligns FP doubles when -malign-power is given.  */
 #undef  ADJUST_FIELD_ALIGN
 #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
-  ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE)    \
+  (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED))           \
    ? 128                                                               \
    : (TARGET_64BIT                                                     \
       && TARGET_ALIGN_NATURAL == 0                                     \
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 213021)
+++ gcc/config/rs6000/rs6000.c  (revision 213025)
@@ -5862,6 +5862,34 @@ rs6000_data_alignment (tree type, unsign
   return align;
 }
 
+/* Previous GCC releases forced all vector types to have 16-byte alignment.  */
+
+bool
+rs6000_special_adjust_field_align_p (tree field, unsigned int computed)
+{
+  if (TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE)
+    {
+      if (computed != 128)
+       {
+         static bool warned;
+         if (!warned && warn_psabi)
+           {
+             warned = true;
+             inform (input_location,
+                     "the layout of aggregates containing vectors with"
+                     " %d-byte alignment will change in a future GCC release",
+                     computed / BITS_PER_UNIT);
+           }
+       }
+      /* GCC 4.8/4.9 Note: To avoid any ABI change on a release branch, we
+        keep the special treatment of vector types, but warn if there will
+        be differences in future GCC releases.  */
+      return true;
+    }
+
+  return false;
+}
+
 /* AIX increases natural record alignment to doubleword if the first
    field is an FP double while the FP fields remain word aligned.  */
 
@@ -9200,14 +9228,51 @@ rs6000_function_arg_boundary (enum machi
           || (type && TREE_CODE (type) == VECTOR_TYPE
               && int_size_in_bytes (type) >= 16))
     return 128;
-  else if (((TARGET_MACHO && rs6000_darwin64_abi)
-           || DEFAULT_ABI == ABI_ELFv2
-            || (DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm))
-          && mode == BLKmode
-          && type && TYPE_ALIGN (type) > 64)
+
+  /* Aggregate types that need > 8 byte alignment are quadword-aligned
+     in the parameter area in the ELFv2 ABI, and in the AIX ABI unless
+     -mcompat-align-parm is used.  */
+  if (((DEFAULT_ABI == ABI_AIX && !rs6000_compat_align_parm)
+       || DEFAULT_ABI == ABI_ELFv2)
+      && type && TYPE_ALIGN (type) > 64)
+    {
+      /* "Aggregate" means any AGGREGATE_TYPE except for single-element
+         or homogeneous float/vector aggregates here.  We already handled
+         vector aggregates above, but still need to check for float here. */
+      bool aggregate_p = (AGGREGATE_TYPE_P (type)
+                         && !SCALAR_FLOAT_MODE_P (elt_mode));
+
+      /* We used to check for BLKmode instead of the above aggregate type
+        check.  Warn when this results in any difference to the ABI.  */
+      if (aggregate_p != (mode == BLKmode))
+       {
+         static bool warned;
+         if (!warned && warn_psabi)
+           {
+             warned = true;
+             inform (input_location,
+                     "the ABI of passing aggregates with %d-byte alignment"
+                     " will change in a future GCC release",
+                     (int) TYPE_ALIGN (type) / BITS_PER_UNIT);
+           }
+       }
+
+      /* GCC 4.8/4.9 Note: To avoid any ABI change on a release branch, we
+        keep using the BLKmode check, but warn if there will be differences
+        in future GCC releases.  */
+      if (mode == BLKmode)
+       return 128;
+    }
+
+  /* Similar for the Darwin64 ABI.  Note that for historical reasons we
+     implement the "aggregate type" check as a BLKmode check here; this
+     means certain aggregate types are in fact not aligned.  */
+  if (TARGET_MACHO && rs6000_darwin64_abi
+      && mode == BLKmode
+      && type && TYPE_ALIGN (type) > 64)
     return 128;
-  else
-    return PARM_BOUNDARY;
+
+  return PARM_BOUNDARY;
 }
 
 /* The offset in words to the start of the parameter save area.  */
@@ -10245,6 +10310,7 @@ rs6000_function_arg (cumulative_args_t c
          rtx r, off;
          int i, k = 0;
          unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3;
+         int fpr_words;
 
          /* Do we also need to pass this argument in the parameter
             save area?  */
@@ -10273,6 +10339,37 @@ rs6000_function_arg (cumulative_args_t c
              rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, r, off);
            }
 
+         /* If there were not enough FPRs to hold the argument, the rest
+            usually goes into memory.  However, if the current position
+            is still within the register parameter area, a portion may
+            actually have to go into GPRs.
+
+            Note that it may happen that the portion of the argument
+            passed in the first "half" of the first GPR was already
+            passed in the last FPR as well.
+
+            For unnamed arguments, we already set up GPRs to cover the
+            whole argument in rs6000_psave_function_arg, so there is
+            nothing further to do at this point.
+
+            GCC 4.8/4.9 Note: This was implemented incorrectly in earlier
+            GCC releases.  To avoid any ABI change on the release branch,
+            we retain that original implementation here, but warn if we
+            encounter a case where the ABI will change in the future.  */
+         fpr_words = (i * GET_MODE_SIZE (elt_mode)) / (TARGET_32BIT ? 4 : 8);
+         if (i < n_elts && align_words + fpr_words < GP_ARG_NUM_REG
+             && cum->nargs_prototype > 0)
+            {
+             static bool warned;
+             if (!warned && warn_psabi)
+               {
+                 warned = true;
+                 inform (input_location,
+                         "the ABI of passing homogeneous float aggregates"
+                         " will change in a future GCC release");
+               }
+           }
+
          return rs6000_finish_function_arg (mode, rvec, k);
        }
       else if (align_words < GP_ARG_NUM_REG)
Index: gcc/config/rs6000/sysv4.h
===================================================================
--- gcc/config/rs6000/sysv4.h   (revision 213021)
+++ gcc/config/rs6000/sysv4.h   (revision 213025)
@@ -292,7 +292,7 @@ do {                                                        
                \
 /* An expression for the alignment of a structure field FIELD if the
    alignment computed in the usual way is COMPUTED.  */
 #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED)                                  \
-       ((TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (FIELD)) == VECTOR_TYPE)     \
+       (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED))            \
         ? 128 : COMPUTED)
 
 #undef  BIGGEST_FIELD_ALIGNMENT
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to