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