OSDN Git Service

2005-02-16 Paul Thomas <pault@gcc.gnu.org>
authorpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 Feb 2006 07:04:13 +0000 (07:04 +0000)
committerpault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 16 Feb 2006 07:04:13 +0000 (07:04 +0000)
PR fortran/24557
* trans-expr.c (gfc_add_interface_mapping): Use the actual argument
for character(*) arrays, rather than casting to the type and kind
parameters of the formal argument.

2005-02-16  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/24557
        * gfortran.dg/assumed_charlen_needed_1.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111130 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 5a0b387..0755ee7 100644 (file)
@@ -1,3 +1,10 @@
+2005-02-16  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/24557
+       * trans-expr.c (gfc_add_interface_mapping): Use the actual argument
+       for character(*) arrays, rather than casting to the type and kind
+       parameters of the formal argument.
+
 2006-02-15  Toon Moene  <toon@moene.indiv.nluug.nl>
 
        PR fortran/26054
 2006-02-15  Toon Moene  <toon@moene.indiv.nluug.nl>
 
        PR fortran/26054
index 3fbbf0e..9f5774b 100644 (file)
@@ -1346,6 +1346,10 @@ gfc_add_interface_mapping (gfc_interface_mapping * mapping,
   /* If the argument is a scalar or a pointer to an array, dereference it.  */
   else if (!sym->attr.dimension || sym->attr.pointer)
     value = build_fold_indirect_ref (se->expr);
   /* If the argument is a scalar or a pointer to an array, dereference it.  */
   else if (!sym->attr.dimension || sym->attr.pointer)
     value = build_fold_indirect_ref (se->expr);
+  
+  /* For character(*), use the actual argument's descriptor.  */  
+  else if (sym->ts.type == BT_CHARACTER && !new_sym->ts.cl->length)
+    value = build_fold_indirect_ref (se->expr);
 
   /* If the argument is an array descriptor, use it to determine
      information about the actual argument's shape.  */
 
   /* If the argument is an array descriptor, use it to determine
      information about the actual argument's shape.  */
index 21fcc95..7f464ab 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-16  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/24557
+        * gfortran.dg/assumed_charlen_needed_1.f90: New test.
+
 2006-02-15  Toon Moene  <toon@moene.indiv.nluug.nl>
 
        PR fortran/26054
 2006-02-15  Toon Moene  <toon@moene.indiv.nluug.nl>
 
        PR fortran/26054
diff --git a/gcc/testsuite/gfortran.dg/assumed_charlen_needed_1.f90 b/gcc/testsuite/gfortran.dg/assumed_charlen_needed_1.f90
new file mode 100644 (file)
index 0000000..759e3e7
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! Tests the fix for PR24557 in which the return of a
+! temporary character(*) array would cause an ICE.
+!
+! Test case provided by Erik Edelmann  <eedelmann@gcc.gnu.org>
+!
+  character(4) :: a(2)
+  print *, fun (a)
+contains
+  function fun (arg)
+    character (*) :: arg (10)
+    integer :: fun(size(arg))
+    fun = 1
+  end function fun
+end