packages: gcc/gcc-branch.diff, gcc/gcc.spec - rel 3; update branch patch
arekm
arekm at pld-linux.org
Thu Sep 8 20:52:06 CEST 2011
Author: arekm Date: Thu Sep 8 18:52:06 2011 GMT
Module: packages Tag: HEAD
---- Log message:
- rel 3; update branch patch
---- Files affected:
packages/gcc:
gcc-branch.diff (1.49 -> 1.50) , gcc.spec (1.664 -> 1.665)
---- Diffs:
================================================================
Index: packages/gcc/gcc-branch.diff
diff -u packages/gcc/gcc-branch.diff:1.49 packages/gcc/gcc-branch.diff:1.50
--- packages/gcc/gcc-branch.diff:1.49 Thu Jul 14 21:06:31 2011
+++ packages/gcc/gcc-branch.diff Thu Sep 8 20:51:57 2011
@@ -1,7 +1,7 @@
Index: configure
===================================================================
---- configure (.../tags/gcc_4_6_1_release) (wersja 176280)
-+++ configure (.../branches/gcc-4_6-branch) (wersja 176280)
+--- configure (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ configure (.../branches/gcc-4_6-branch) (wersja 178706)
@@ -2705,9 +2705,8 @@
# these libraries are built for the target environment, and are built after
@@ -148,8 +148,8 @@
# is now the case.
Index: Makefile.in
===================================================================
---- Makefile.in (.../tags/gcc_4_6_1_release) (wersja 176280)
-+++ Makefile.in (.../branches/gcc-4_6-branch) (wersja 176280)
+--- Makefile.in (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ Makefile.in (.../branches/gcc-4_6-branch) (wersja 178706)
@@ -966,7 +966,6 @@
maybe-configure-target-libtermcap \
maybe-configure-target-winsup \
@@ -819,10 +819,341 @@
configure-target-gperf: maybe-all-target-newlib maybe-all-target-libgloss
configure-target-gperf: maybe-all-target-libstdc++-v3
+Index: libgcc/ChangeLog
+===================================================================
+--- libgcc/ChangeLog (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libgcc/ChangeLog (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -1,3 +1,15 @@
++2011-08-24 Richard Sandiford <richard.sandiford at linaro.org>
++
++ PR target/50090
++ * config/arm/bpabi-lib.h (RENAME_LIBRARY_SET): Delete.
++ (RENAME_LIBRARY): Use a C-level alias instead of an assembly one.
++
++2011-08-23 Uros Bizjak <ubizjak at gmail.com>
++
++ * config/i386/64/sfp-machine.h (ASM_INVALID): New define.
++ (ASM_DIVZERO): Ditto.
++ (FP_HANLDE_EXCEPTIONS): Use ASM_INVALID and ASM_DIVZERO.
++
+ 2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+Index: libgcc/config/arm/bpabi-lib.h
+===================================================================
+--- libgcc/config/arm/bpabi-lib.h (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libgcc/config/arm/bpabi-lib.h (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -20,17 +20,10 @@
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+-#if defined (__thumb__)
+-#define RENAME_LIBRARY_SET ".thumb_set"
+-#else
+-#define RENAME_LIBRARY_SET ".set"
+-#endif
+-
+ /* Make __aeabi_AEABI_NAME an alias for __GCC_NAME. */
+ #define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) \
+- __asm__ (".globl\t__aeabi_" #AEABI_NAME "\n" \
+- RENAME_LIBRARY_SET "\t__aeabi_" #AEABI_NAME \
+- ", __" #GCC_NAME "\n");
++ typeof (__##GCC_NAME) __aeabi_##AEABI_NAME \
++ __attribute__((alias ("__" #GCC_NAME)));
+
+ /* Give some libgcc functions an additional __aeabi name. */
+ #ifdef L_muldi3
+Index: libgcc/config/i386/64/sfp-machine.h
+===================================================================
+--- libgcc/config/i386/64/sfp-machine.h (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libgcc/config/i386/64/sfp-machine.h (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -79,17 +79,25 @@
+ unsigned short int __unused5;
+ };
+
++#ifdef __AVX__
++ #define ASM_INVALID "vdivss %0, %0, %0"
++ #define ASM_DIVZERO "vdivss %1, %0, %0"
++#else
++ #define ASM_INVALID "divss %0, %0"
++ #define ASM_DIVZERO "divss %1, %0"
++#endif
++
+ #define FP_HANDLE_EXCEPTIONS \
+ do { \
+ if (_fex & FP_EX_INVALID) \
+ { \
+ float f = 0.0; \
+- __asm__ __volatile__ ("divss %0, %0 " : : "x" (f)); \
++ __asm__ __volatile__ (ASM_INVALID : : "x" (f)); \
+ } \
+ if (_fex & FP_EX_DIVZERO) \
+ { \
+ float f = 1.0, g = 0.0; \
+- __asm__ __volatile__ ("divss %1, %0" : : "x" (f), "x" (g)); \
++ __asm__ __volatile__ (ASM_DIVZERO : : "x" (f), "x" (g)); \
+ } \
+ if (_fex & FP_EX_OVERFLOW) \
+ { \
+Index: libgomp/ChangeLog
+===================================================================
+--- libgomp/ChangeLog (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libgomp/ChangeLog (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -1,3 +1,24 @@
++2011-08-19 Jakub Jelinek <jakub at redhat.com>
++
++ PR fortran/49792
++ * testsuite/libgomp.fortran/pr49792-1.f90: New test.
++ * testsuite/libgomp.fortran/pr49792-2.f90: New test.
++
++2011-07-29 Jakub Jelinek <jakub at redhat.com>
++
++ PR middle-end/49897
++ PR middle-end/49898
++ * testsuite/libgomp.c/pr49897-1.c: New test.
++ * testsuite/libgomp.c/pr49897-2.c: New test.
++ * testsuite/libgomp.c/pr49898-1.c: New test.
++ * testsuite/libgomp.c/pr49898-2.c: New test.
++
++2011-07-18 Rainer Orth <ro at CeBiTec.Uni-Bielefeld.DE>
++
++ PR target/49541
++ * testsuite/lib/libgomp.exp (libgomp_init): Don't add -lgomp to
++ ldflags.
++
+ 2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+Index: libgomp/testsuite/libgomp.fortran/pr49792-1.f90
+===================================================================
+--- libgomp/testsuite/libgomp.fortran/pr49792-1.f90 (.../tags/gcc_4_6_1_release) (wersja 0)
++++ libgomp/testsuite/libgomp.fortran/pr49792-1.f90 (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -0,0 +1,18 @@
++! PR fortran/49792
++! { dg-do run }
++
++subroutine reverse(n, a)
++ integer :: n
++ real(kind=8) :: a(n)
++!$omp parallel workshare
++ a(:) = a(n:1:-1)
++!$omp end parallel workshare
++end subroutine reverse
++
++program pr49792
++ real(kind=8) :: a(16) = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
++ real(kind=8) :: b(16)
++ b(:) = a(16:1:-1)
++ call reverse (16,a)
++ if (any (a.ne.b)) call abort
++end program pr49792
+Index: libgomp/testsuite/libgomp.fortran/pr49792-2.f90
+===================================================================
+--- libgomp/testsuite/libgomp.fortran/pr49792-2.f90 (.../tags/gcc_4_6_1_release) (wersja 0)
++++ libgomp/testsuite/libgomp.fortran/pr49792-2.f90 (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -0,0 +1,22 @@
++! PR fortran/49792
++! { dg-do run }
++! { dg-options "-std=f2003 -fall-intrinsics" }
++
++subroutine reverse(n, a)
++ integer :: n
++ real(kind=8) :: a(n)
++!$omp parallel workshare
++ a(:) = a(n:1:-1)
++!$omp end parallel workshare
++end subroutine reverse
++
++program pr49792
++ integer :: b(16)
++ integer, allocatable :: a(:)
++ b = 1
++!$omp parallel workshare
++ a = b
++!$omp end parallel workshare
++ if (size(a).ne.size(b)) call abort()
++ if (any (a.ne.b)) call abort()
++end program pr49792
+Index: libgomp/testsuite/lib/libgomp.exp
+===================================================================
+--- libgomp/testsuite/lib/libgomp.exp (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libgomp/testsuite/lib/libgomp.exp (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -137,7 +137,6 @@
+ lappend ALWAYS_CFLAGS "ldflags=-L${blddir}/.libs"
+ }
+ lappend ALWAYS_CFLAGS "additional_flags=-I${srcdir}/.."
+- lappend ALWAYS_CFLAGS "ldflags=-lgomp"
+
+ # We use atomic operations in the testcases to validate results.
+ if { ([istarget i?86-*-*] || [istarget x86_64-*-*])
+Index: libgomp/testsuite/libgomp.c/pr49897-1.c
+===================================================================
+--- libgomp/testsuite/libgomp.c/pr49897-1.c (.../tags/gcc_4_6_1_release) (wersja 0)
++++ libgomp/testsuite/libgomp.c/pr49897-1.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -0,0 +1,31 @@
++/* PR middle-end/49897 */
++/* { dg-do run } */
++
++extern void abort (void);
++
++int
++main ()
++{
++ int i, j, x = 0, y, sum = 0;
++#pragma omp parallel reduction(+:sum)
++ {
++ #pragma omp for firstprivate(x) lastprivate(x, y)
++ for (i = 0; i < 10; i++)
++ {
++ x = i;
++ y = 0;
++ #pragma omp parallel reduction(+:sum)
++ {
++ #pragma omp for firstprivate(y) lastprivate(y)
++ for (j = 0; j < 10; j++)
++ {
++ y = j;
++ sum += y;
++ }
++ }
++ }
++ }
++ if (x != 9 || y != 9 || sum != 450)
++ abort ();
++ return 0;
++}
+Index: libgomp/testsuite/libgomp.c/pr49898-1.c
+===================================================================
+--- libgomp/testsuite/libgomp.c/pr49898-1.c (.../tags/gcc_4_6_1_release) (wersja 0)
++++ libgomp/testsuite/libgomp.c/pr49898-1.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -0,0 +1,26 @@
++/* PR middle-end/49898 */
++/* { dg-do run } */
++
++extern void abort (void);
++
++int
++main ()
++{
++ int i, j, sum = 0;
++#pragma omp parallel
++ {
++ #pragma omp for reduction(+:sum)
++ for (i = 0; i < 10; i++)
++ {
++ #pragma omp parallel
++ {
++ #pragma omp for reduction(+:sum)
++ for (j = 0; j < 10; j++)
++ sum += j;
++ }
++ }
++ }
++ if (sum != 450)
++ abort ();
++ return 0;
++}
+Index: libgomp/testsuite/libgomp.c/pr49897-2.c
+===================================================================
+--- libgomp/testsuite/libgomp.c/pr49897-2.c (.../tags/gcc_4_6_1_release) (wersja 0)
++++ libgomp/testsuite/libgomp.c/pr49897-2.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -0,0 +1,25 @@
++/* PR middle-end/49897 */
++/* { dg-do run } */
++
++extern void abort (void);
++
++int
++main ()
++{
++ int i, j, x = 0, y, sum = 0;
++#pragma omp parallel for reduction(+:sum) firstprivate(x) lastprivate(x, y)
++ for (i = 0; i < 10; i++)
++ {
++ x = i;
++ y = 0;
++ #pragma omp parallel for reduction(+:sum) firstprivate(y) lastprivate(y)
++ for (j = 0; j < 10; j++)
++ {
++ y = j;
++ sum += y;
++ }
++ }
++ if (x != 9 || y != 9 || sum != 450)
++ abort ();
++ return 0;
++}
+Index: libgomp/testsuite/libgomp.c/pr49898-2.c
+===================================================================
+--- libgomp/testsuite/libgomp.c/pr49898-2.c (.../tags/gcc_4_6_1_release) (wersja 0)
++++ libgomp/testsuite/libgomp.c/pr49898-2.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -0,0 +1,18 @@
++/* PR middle-end/49898 */
++/* { dg-do run } */
++
++extern void abort (void);
++
++int
++main ()
++{
++ int i, j, sum = 0;
++#pragma omp parallel for reduction(+:sum)
++ for (i = 0; i < 10; i++)
++ #pragma omp parallel for reduction(+:sum)
++ for (j = 0; j < 10; j++)
++ sum += j;
++ if (sum != 450)
++ abort ();
++ return 0;
++}
+Index: libquadmath/ChangeLog
+===================================================================
+--- libquadmath/ChangeLog (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libquadmath/ChangeLog (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -1,3 +1,8 @@
++2011-08-01 Jakub Jelinek <jakub at redhat.com>
++
++ * math/rem_pio2q.c (__quadmath_kernel_rem_pio2): Fix up fq to y
++ conversion for prec 3 and __FLT_EVAL_METHOD__ != 0.
++
+ 2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+Index: libquadmath/math/rem_pio2q.c
+===================================================================
+--- libquadmath/math/rem_pio2q.c (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ libquadmath/math/rem_pio2q.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -282,14 +282,20 @@
+ break;
+ case 3: /* painful */
+ for (i=jz;i>0;i--) {
+- fw = fq[i-1]+fq[i];
+- fq[i] += fq[i-1]-fw;
+- fq[i-1] = fw;
++#if __FLT_EVAL_METHOD__ != 0
++ volatile
++#endif
++ double fv = (double)(fq[i-1]+fq[i]);
++ fq[i] += fq[i-1]-fv;
++ fq[i-1] = fv;
+ }
+ for (i=jz;i>1;i--) {
+- fw = fq[i-1]+fq[i];
+- fq[i] += fq[i-1]-fw;
+- fq[i-1] = fw;
++#if __FLT_EVAL_METHOD__ != 0
++ volatile
++#endif
++ double fv = (double)(fq[i-1]+fq[i]);
++ fq[i] += fq[i-1]-fv;
++ fq[i-1] = fv;
+ }
+ for (fw=0.0,i=jz;i>=2;i--) fw += fq[i];
+ if(ih==0) {
Index: gcc/doc/invoke.texi
===================================================================
---- gcc/doc/invoke.texi (.../tags/gcc_4_6_1_release) (wersja 176280)
-+++ gcc/doc/invoke.texi (.../branches/gcc-4_6-branch) (wersja 176280)
+--- gcc/doc/invoke.texi (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/doc/invoke.texi (.../branches/gcc-4_6-branch) (wersja 178706)
@@ -611,7 +611,8 @@
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs @gol
-mcmodel=@var{code-model} -mabi=@var{name} @gol
@@ -833,7 +1164,18 @@
@emph{i386 and x86-64 Windows Options}
@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
-@@ -12769,6 +12770,12 @@
+@@ -12172,6 +12173,10 @@
+ @item corei7-avx
+ Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
+ SSE4.1, SSE4.2, AVX, AES and PCLMUL instruction set support.
++ at item core-avx-i
++Intel Core CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3,
++SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction
++set support.
+ @item atom
+ Intel Atom CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3 and SSSE3
+ instruction set support.
+@@ -12769,6 +12774,12 @@
to 255, 8bit unsigned integer divide will be used instead of
32bit/64bit integer divide.
@@ -846,17 +1188,271 @@
@end table
These @samp{-m} switches are supported in addition to the above
+Index: gcc/doc/md.texi
+===================================================================
+--- gcc/doc/md.texi (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/doc/md.texi (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -4641,8 +4641,9 @@
+ string. The instruction is not allowed to prefetch more than one byte
+ at a time since either string may end in the first byte and reading past
+ that may access an invalid page or segment and cause a fault. The
+-effect of the instruction is to store a value in operand 0 whose sign
+-indicates the result of the comparison.
++comparison terminates early if the fetched bytes are different or if
++they are equal to zero. The effect of the instruction is to store a
++value in operand 0 whose sign indicates the result of the comparison.
+
+ @cindex @code{cmpstr at var{m}} instruction pattern
+ @item @samp{cmpstr at var{m}}
+@@ -4660,8 +4661,10 @@
+ order starting at the beginning of each string. The instruction is not allowed
+ to prefetch more than one byte at a time since either string may end in the
+ first byte and reading past that may access an invalid page or segment and
+-cause a fault. The effect of the instruction is to store a value in operand 0
+-whose sign indicates the result of the comparison.
++cause a fault. The comparison will terminate when the fetched bytes
++are different or if they are equal to zero. The effect of the
++instruction is to store a value in operand 0 whose sign indicates the
++result of the comparison.
+
+ @cindex @code{cmpmem at var{m}} instruction pattern
+ @item @samp{cmpmem at var{m}}
+@@ -4669,9 +4672,10 @@
+ of @samp{cmpstr at var{m}}. The two memory blocks specified are compared
+ byte by byte in lexicographic order starting at the beginning of each
+ block. Unlike @samp{cmpstr at var{m}} the instruction can prefetch
+-any bytes in the two memory blocks. The effect of the instruction is
+-to store a value in operand 0 whose sign indicates the result of the
+-comparison.
++any bytes in the two memory blocks. Also unlike @samp{cmpstr at var{m}}
++the comparison will not stop if both bytes are zero. The effect of
++the instruction is to store a value in operand 0 whose sign indicates
++the result of the comparison.
+
+ @cindex @code{strlen at var{m}} instruction pattern
+ @item @samp{strlen at var{m}}
+@@ -5510,7 +5514,7 @@
+ @cindex @code{stack_protect_set} instruction pattern
+ @item @samp{stack_protect_set}
+
+-This pattern, if defined, moves a @code{Pmode} value from the memory
++This pattern, if defined, moves a @code{ptr_mode} value from the memory
+ in operand 1 to the memory in operand 0 without leaving the value in
+ a register afterward. This is to avoid leaking the value some place
+ that an attacker might use to rewrite the stack guard slot after
+@@ -5521,7 +5525,7 @@
+ @cindex @code{stack_protect_test} instruction pattern
+ @item @samp{stack_protect_test}
+
+-This pattern, if defined, compares a @code{Pmode} value from the
++This pattern, if defined, compares a @code{ptr_mode} value from the
+ memory in operand 1 with the memory in operand 0 without leaving the
+ value in a register afterward and branches to operand 2 if the values
+ weren't equal.
+Index: gcc/c-family/ChangeLog
+===================================================================
+--- gcc/c-family/ChangeLog (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/c-family/ChangeLog (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -1,3 +1,9 @@
++2011-09-06 Eric Botcazou <ebotcazou at adacore.com>
++
++ PR middle-end/50266
++ * c-common.c (c_fully_fold_internal) <ADDR_EXPR>: Fold offsetof-like
++ computations.
++
+ 2011-06-27 Release Manager
+
+ * GCC 4.6.1 released.
+Index: gcc/c-family/c-common.c
+===================================================================
+--- gcc/c-family/c-common.c (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/c-family/c-common.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -1229,7 +1229,21 @@
+ STRIP_TYPE_NOPS (op0);
+ if (code != ADDR_EXPR && code != REALPART_EXPR && code != IMAGPART_EXPR)
+ op0 = decl_constant_value_for_optimization (op0);
+- if (op0 != orig_op0 || in_init)
++ /* ??? Cope with user tricks that amount to offsetof. The middle-end is
++ not prepared to deal with them if they occur in initializers. */
++ if (op0 != orig_op0
++ && code == ADDR_EXPR
++ && (op1 = get_base_address (op0)) != NULL_TREE
++ && TREE_CODE (op1) == INDIRECT_REF
++ && TREE_CONSTANT (TREE_OPERAND (op1, 0)))
++ {
++ tree offset = fold_offsetof (op0, op1);
++ op1
++ = fold_convert_loc (loc, TREE_TYPE (expr), TREE_OPERAND (op1, 0));
++ ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (expr), op1,
++ offset);
++ }
++ else if (op0 != orig_op0 || in_init)
+ ret = in_init
+ ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
+ : fold_build1_loc (loc, code, TREE_TYPE (expr), op0);
Index: gcc/DATESTAMP
===================================================================
---- gcc/DATESTAMP (.../tags/gcc_4_6_1_release) (wersja 176280)
-+++ gcc/DATESTAMP (.../branches/gcc-4_6-branch) (wersja 176280)
+--- gcc/DATESTAMP (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/DATESTAMP (.../branches/gcc-4_6-branch) (wersja 178706)
@@ -1 +1 @@
-20110627
-+20110714
++20110908
+Index: gcc/tree.c
+===================================================================
+--- gcc/tree.c (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/tree.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -9386,6 +9386,31 @@
+ ? "_Unwind_SjLj_Resume" : "_Unwind_Resume"),
+ ECF_NORETURN);
+
++ if (built_in_decls[BUILT_IN_RETURN_ADDRESS] == NULL_TREE)
++ {
++ ftype = build_function_type_list (ptr_type_node, integer_type_node,
++ NULL_TREE);
++ local_define_builtin ("__builtin_return_address", ftype,
++ BUILT_IN_RETURN_ADDRESS,
++ "__builtin_return_address",
++ ECF_NOTHROW);
++ }
++
++ if (built_in_decls[BUILT_IN_PROFILE_FUNC_ENTER] == NULL_TREE
++ || built_in_decls[BUILT_IN_PROFILE_FUNC_EXIT] == NULL_TREE)
++ {
++ ftype = build_function_type_list (void_type_node, ptr_type_node,
++ ptr_type_node, NULL_TREE);
++ if (built_in_decls[BUILT_IN_PROFILE_FUNC_ENTER] == NULL_TREE)
++ local_define_builtin ("__cyg_profile_func_enter", ftype,
++ BUILT_IN_PROFILE_FUNC_ENTER,
++ "__cyg_profile_func_enter", 0);
++ if (built_in_decls[BUILT_IN_PROFILE_FUNC_EXIT] == NULL_TREE)
++ local_define_builtin ("__cyg_profile_func_exit", ftype,
++ BUILT_IN_PROFILE_FUNC_EXIT,
++ "__cyg_profile_func_exit", 0);
++ }
++
+ /* The exception object and filter values from the runtime. The argument
+ must be zero before exception lowering, i.e. from the front end. After
+ exception lowering, it will be the region number for the exception
+@@ -10470,9 +10495,14 @@
+ if (result || !walk_subtrees)
+ return result;
+
+- result = walk_type_fields (*type_p, func, data, pset, lh);
+- if (result)
+- return result;
++ /* But do not walk a pointed-to type since it may itself need to
++ be walked in the declaration case if it isn't anonymous. */
++ if (!POINTER_TYPE_P (*type_p))
++ {
++ result = walk_type_fields (*type_p, func, data, pset, lh);
++ if (result)
++ return result;
++ }
+
+ /* If this is a record type, also walk the fields. */
+ if (RECORD_OR_UNION_TYPE_P (*type_p))
+Index: gcc/builtins.c
+===================================================================
+--- gcc/builtins.c (.../tags/gcc_4_6_1_release) (wersja 178706)
++++ gcc/builtins.c (.../branches/gcc-4_6-branch) (wersja 178706)
+@@ -4117,9 +4117,9 @@
+ }
+
+ /* Expand expression EXP, which is a call to the memcmp built-in function.
+- Return NULL_RTX if we failed and the
+- caller should emit a normal call, otherwise try to get the result in
+- TARGET, if convenient (and in mode MODE, if that's convenient). */
++ Return NULL_RTX if we failed and the caller should emit a normal call,
++ otherwise try to get the result in TARGET, if convenient (and in mode
++ MODE, if that's convenient). */
+
+ static rtx
+ expand_builtin_memcmp (tree exp, ATTRIBUTE_UNUSED rtx target,
+@@ -4131,7 +4131,10 @@
+ POINTER_TYPE, POINTER_TYPE, INTEGER_TYPE, VOID_TYPE))
+ return NULL_RTX;
+
+-#if defined HAVE_cmpmemsi || defined HAVE_cmpstrnsi
++ /* Note: The cmpstrnsi pattern, if it exists, is not suitable for
++ implementing memcmp because it will stop if it encounters two
++ zero bytes. */
++#if defined HAVE_cmpmemsi
+ {
+ rtx arg1_rtx, arg2_rtx, arg3_rtx;
+ rtx result;
+@@ -4146,16 +4149,9 @@
+ = get_pointer_alignment (arg2, BIGGEST_ALIGNMENT) / BITS_PER_UNIT;
+ enum machine_mode insn_mode;
+
+-#ifdef HAVE_cmpmemsi
+ if (HAVE_cmpmemsi)
+ insn_mode = insn_data[(int) CODE_FOR_cmpmemsi].operand[0].mode;
+ else
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/gcc/gcc-branch.diff?r1=1.49&r2=1.50&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/gcc/gcc.spec?r1=1.664&r2=1.665&f=u
More information about the pld-cvs-commit
mailing list