From 624547f6e709bc2480f2bcd7a9eeb62b3161fe64 Mon Sep 17 00:00:00 2001 From: burnus Date: Tue, 22 Jan 2008 19:35:49 +0000 Subject: [PATCH] 2008-01-22 Tobias Burnus PR fortran/34848 * interface.c (compare_actual_formal): Fix adding type to missing_arg_type for absent optional arguments. 2008-01-22 Tobias Burnus PR fortran/34848 * gfortran.dg/missing_optional_dummy_4.f90 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131738 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 6 +++++ gcc/fortran/interface.c | 2 +- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/missing_optional_dummy_4.f90 | 28 ++++++++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/missing_optional_dummy_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fd6efa3..134c0c4 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2008-01-22 Tobias Burnus + PR fortran/34848 + * interface.c (compare_actual_formal): Fix adding type + to missing_arg_type for absent optional arguments. + +2008-01-22 Tobias Burnus + PR fortran/34907 * parse.c (parse_spec): Change = into ==. diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index ef63984..8b73adc 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -2147,7 +2147,7 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal, *ap = new[0]; /* Note the types of omitted optional arguments. */ - for (a = actual, f = formal; a; a = a->next, f = f->next) + for (a = *ap, f = formal; a; a = a->next, f = f->next) if (a->expr == NULL && a->label == NULL) a->missing_arg_type = f->sym->ts.type; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82f22c0..7dcbbcb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-22 Tobias Burnus + + PR fortran/34848 + * gfortran.dg/missing_optional_dummy_4.f90 + 2008-01-22 Kaveh R. Ghazi * gcc.dg/vect/vect-ifcvt-9.c: Use inline. diff --git a/gcc/testsuite/gfortran.dg/missing_optional_dummy_4.f90 b/gcc/testsuite/gfortran.dg/missing_optional_dummy_4.f90 new file mode 100644 index 0000000..9b1a574 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/missing_optional_dummy_4.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/34848 +! +! The "0" for the string size of the absent optional +! argument was missing. +! +module krmod +contains + subroutine doit() + implicit none + real :: doit1 + doit1 = tm_doit() + return + end subroutine doit + function tm_doit(genloc) + implicit none + character, optional :: genloc + real :: tm_doit + tm_doit = 42.0 + end function tm_doit +end module krmod + +! { dg-final { scan-tree-dump " tm_doit \\(0B, 0\\);" "original" } } +! { dg-final { cleanup-tree-dump "original" } } +! { dg-final { cleanup-modules "krmod" } } + -- 2.7.4