OSDN Git Service

2014-02-03 Janus Weil <janus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Feb 2014 08:16:06 +0000 (08:16 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Feb 2014 08:16:06 +0000 (08:16 +0000)
PR fortran/59941
* expr.c (replace_comp): Check for isym to avoid ICE.

2014-02-03  Janus Weil  <janus@gcc.gnu.org>

PR fortran/59941
* gfortran.dg/typebound_proc_26.f90: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@207417 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/typebound_proc_26.f90 [new file with mode: 0644]

index e3988a0..b316817 100644 (file)
@@ -1,3 +1,8 @@
+2014-02-03  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/59941
+       * expr.c (replace_comp): Check for isym to avoid ICE.
+
 2014-01-27  Mikael Morin  <mikael@gcc.gnu.org>
 
        PR fortran/58007
index 194deb6..c0cc688 100644 (file)
@@ -4195,7 +4195,7 @@ replace_comp (gfc_expr *expr, gfc_symbol *sym, int *i ATTRIBUTE_UNUSED)
   gfc_component *comp;
   comp = (gfc_component *)sym;
   if ((expr->expr_type == EXPR_VARIABLE 
-       || (expr->expr_type == EXPR_FUNCTION
+       || (expr->expr_type == EXPR_FUNCTION && !expr->value.function.isym
           && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where)))
       && expr->symtree->n.sym->ns == comp->ts.interface->formal_ns)
     {
index 152554d..8ede531 100644 (file)
@@ -1,3 +1,8 @@
+2014-02-03  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/59941
+       * gfortran.dg/typebound_proc_26.f90: New.
+
 2014-01-29  Markus Trippelsdorf  <markus@trippelsdorf.de>
 
        Backport from mainline
diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_26.f90
new file mode 100644 (file)
index 0000000..ec2e0e8
--- /dev/null
@@ -0,0 +1,38 @@
+! { dg-do compile }
+!
+! PR 59941: [4.7 Regression] [OOP] ICE with polymorphic types
+!
+! Contributed by Jürgen Reuter <juergen.reuter@desy.de>
+
+module tao_random_numbers
+  integer, dimension(10), private :: s_buffer
+  integer, private :: s_buffer_end = size (s_buffer)
+end module
+
+
+module beam_structures
+
+  private
+
+  type :: beam_structure_t
+     integer, dimension(:), allocatable :: smatrix
+   contains
+     procedure :: get_smatrix
+  end type
+  
+contains
+
+  function get_smatrix (beam_structure) result (matrix)
+    class(beam_structure_t), intent(in) :: beam_structure
+    integer, dimension (size (beam_structure%smatrix)) :: matrix
+  end function
+  
+end module
+
+
+program p
+  use tao_random_numbers
+  use beam_structures
+end
+
+! { dg-final { cleanup-modules "tao_random_numbers beam_structures" } }