aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2011-04-30 12:37:47 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-05-05 11:54:44 +0100
commitb0d5b9f12adbce2c4a0df6059f5671188cd32293 (patch)
treef376fcd2e5dcc46185d73d619ce2eec31320d812 /meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch
parent81859b136c0153e8d5be71d56e910dcc3e8cdb66 (diff)
downloadopenembedded-core-contrib-b0d5b9f12adbce2c4a0df6059f5671188cd32293.tar.gz
gcc-4.6.0: Backport FSF 4.6 branch patches
This is set of bugfixes that has been done on FSF gcc-4_2-branch since 4.6.0 was released They will roll into 4.6.1 release once that happens in coming approx 6 months time then we can simply remove them thats the reason so use a separate .inc file to define the SRC_URI additions Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch182
1 files changed, 182 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch
new file mode 100644
index 0000000000..f2aa9eb981
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0116-2011-04-13-Paul-Thomas-pault-gcc.gnu.org.patch
@@ -0,0 +1,182 @@
+From 348c7b9400ed5fe0d8c3c077f8223ca359bed036 Mon Sep 17 00:00:00 2001
+From: pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Wed, 13 Apr 2011 18:38:17 +0000
+Subject: [PATCH 116/200] 2011-04-13 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/48360
+ PR fortran/48456
+ * trans-array.c (get_std_lbound): For derived type variables
+ return array valued component lbound.
+
+2011-04-13 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/48360
+ PR fortran/48456
+ * gfortran.dg/realloc_on_assign_6.f03: New test.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172390 138bc75d-0d04-0410-961f-82ee72b054a4
+
+index ac08c42..3d4a52a 100644
+--- a/gcc/fortran/trans-array.c
++++ b/gcc/fortran/trans-array.c
+@@ -6707,6 +6707,8 @@ get_std_lbound (gfc_expr *expr, tree desc, int dim, bool assumed_size)
+ tree stride;
+ tree cond, cond1, cond3, cond4;
+ tree tmp;
++ gfc_ref *ref;
++
+ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)))
+ {
+ tmp = gfc_rank_cst[dim];
+@@ -6740,6 +6742,14 @@ get_std_lbound (gfc_expr *expr, tree desc, int dim, bool assumed_size)
+ else if (expr->expr_type == EXPR_VARIABLE)
+ {
+ tmp = TREE_TYPE (expr->symtree->n.sym->backend_decl);
++ for (ref = expr->ref; ref; ref = ref->next)
++ {
++ if (ref->type == REF_COMPONENT
++ && ref->u.c.component->as
++ && ref->next
++ && ref->next->u.ar.type == AR_FULL)
++ tmp = TREE_TYPE (ref->u.c.component->backend_decl);
++ }
+ return GFC_TYPE_ARRAY_LBOUND(tmp, dim);
+ }
+ else if (expr->expr_type == EXPR_FUNCTION)
+new file mode 100644
+index 0000000..7c170eb
+--- /dev/null
++++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_6.f03
+@@ -0,0 +1,129 @@
++! { dg-do compile }
++! Test the fix for PR48456 and PR48360 in which the backend
++! declarations for components were not located in the automatic
++! reallocation on assignments, thereby causing ICEs.
++!
++! Contributed by Keith Refson <krefson@googlemail.com>
++! and Douglas Foulds <mixnmaster@gmail.com>
++!
++! This is PR48360
++
++module m
++ type mm
++ real, dimension(3,3) :: h0
++ end type mm
++end module m
++
++module gf33
++
++ real, allocatable, save, dimension(:,:) :: hmat
++
++contains
++ subroutine assignit
++
++ use m
++ implicit none
++
++ type(mm) :: mmv
++
++ hmat = mmv%h0
++ end subroutine assignit
++end module gf33
++
++! This is PR48456
++
++module custom_type
++
++integer, parameter :: dp = kind(0.d0)
++
++type :: my_type_sub
++ real(dp), dimension(5) :: some_vector
++end type my_type_sub
++
++type :: my_type
++ type(my_type_sub) :: some_element
++end type my_type
++
++end module custom_type
++
++module custom_interfaces
++
++interface
++ subroutine store_data_subroutine(vec_size)
++ implicit none
++ integer, intent(in) :: vec_size
++ integer :: k
++ end subroutine store_data_subroutine
++end interface
++
++end module custom_interfaces
++
++module store_data_test
++
++use custom_type
++
++save
++type(my_type), dimension(:), allocatable :: some_type_to_save
++
++end module store_data_test
++
++program test
++
++use store_data_test
++
++integer :: vec_size
++
++vec_size = 2
++
++call store_data_subroutine(vec_size)
++call print_after_transfer()
++
++end program test
++
++subroutine store_data_subroutine(vec_size)
++
++use custom_type
++use store_data_test
++
++implicit none
++
++integer, intent(in) :: vec_size
++integer :: k
++
++allocate(some_type_to_save(vec_size))
++
++do k = 1,vec_size
++
++ some_type_to_save(k)%some_element%some_vector(1) = 1.0_dp
++ some_type_to_save(k)%some_element%some_vector(2) = 2.0_dp
++ some_type_to_save(k)%some_element%some_vector(3) = 3.0_dp
++ some_type_to_save(k)%some_element%some_vector(4) = 4.0_dp
++ some_type_to_save(k)%some_element%some_vector(5) = 5.0_dp
++
++end do
++
++end subroutine store_data_subroutine
++
++subroutine print_after_transfer()
++
++use custom_type
++use store_data_test
++
++implicit none
++
++real(dp), dimension(:), allocatable :: C_vec
++integer :: k
++
++allocate(C_vec(5))
++
++do k = 1,size(some_type_to_save)
++
++ C_vec = some_type_to_save(k)%some_element%some_vector
++ print *, "C_vec", C_vec
++
++end do
++
++end subroutine print_after_transfer
++! { dg-final { cleanup-modules "m gf33" } }
++! { dg-final { cleanup-modules "custom_type custom_interfaces" } }
++! { dg-final { cleanup-modules "store_data_test" } }
+--
+1.7.0.4
+