Commit d157d978 by Tobias Schlüter Committed by Tobias Schlüter

re PR fortran/15129 (assumed size characters passed to subroutines incorrect)

fortran/
PR fortran/15129
* trans-decl.c (gfc_build_function_decl): Create a new chardecl
for every assumed length character dummy argument.

testsuite/
PR fortran/15129
* gfortran.dg/pr15129.f90: New test.

From-SVN: r84769
parent fdb510e7
2004-07-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/15129
* trans-decl.c (gfc_build_function_decl): Create a new chardecl
for every assumed length character dummy argument.
2004-07-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/15324
* trans-array.c gfc_trans_g77_array,
gfc_trans_dummy_array_bias): Don't call gfc_trans_string_init
......
......@@ -1180,7 +1180,25 @@ gfc_build_function_decl (gfc_symbol * sym)
if (!f->sym->ts.cl->length)
{
TREE_USED (length) = 1;
f->sym->ts.cl->backend_decl = length;
if (!f->sym->ts.cl->backend_decl)
f->sym->ts.cl->backend_decl = length;
else
{
/* there is already another variable using this
gfc_charlen node, build a new one for this variable
and chain it into the list of gfc_charlens.
This happens for e.g. in the case
CHARACTER(*)::c1,c2
since CHARACTER declarations on the same line share
the same gfc_charlen node. */
gfc_charlen *cl;
cl = gfc_get_charlen ();
cl->backend_decl = length;
cl->next = f->sym->ts.cl->next;
f->sym->ts.cl->next = cl;
f->sym->ts.cl = cl;
}
}
parm = TREE_CHAIN (parm);
......
......@@ -3,6 +3,9 @@
PR fortran/15324
* gfortran.dg/pr15324.f90: New test.
PR fortran/15129
* gfortran.dg/pr15129.f90: New test.
2004-07-14 Mike Stump <mrs@apple.com>
* gcc.dg/20020426-2.c: Improve type safety wrt unsignedness.
......
! { dg-do run }
! PR 15129: we used to share the character length between A and B in the
! subroutine.
CHARACTER*10 A
CHARACTER*8 B
A = 'gfortran'
B = 'rocks!'
CALL T(A,B)
contains
SUBROUTINE T(A,B)
CHARACTER*(*) A,B
if(len(a)/=10) call abort()
if(len(b)/=8) call abort()
END SUBROUTINE
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment