mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 05:00:23 +08:00
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
This commit is contained in:
parent
fdb510e7d6
commit
d157d97822
@ -1,3 +1,9 @@
|
||||
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
|
||||
|
@ -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.
|
||||
|
15
gcc/testsuite/gfortran.dg/pr15129.f90
Normal file
15
gcc/testsuite/gfortran.dg/pr15129.f90
Normal file
@ -0,0 +1,15 @@
|
||||
! { 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
|
Loading…
x
Reference in New Issue
Block a user