diff options
| -rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/fortran/trans-expr.c | 2 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90 | 29 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0c8f4a2..9e0c2f0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-01-26 Tobias Burnus <burnus@net-b.de> + + PR fortran/34848 + * trans-expr.c (gfc_conv_function_call): Don't call + gfc_add_interface_mapping if the expression is NULL. + 2008-01-26 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/31610 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 9e30a99..89bc3c2 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2506,7 +2506,7 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, } } - if (fsym && need_interface_mapping) + if (fsym && need_interface_mapping && e) gfc_add_interface_mapping (&mapping, fsym, &parmse, e); gfc_add_block_to_block (&se->pre, &parmse.pre); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6974e21..65924d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-26 Tobias Burnus <burnus@net-b.de> + + PR fortran/34848 + * gfortran.dg/missing_optional_dummy_5.f90: New. + 2008-01-26 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * gcc.dg/tree-ssa/20070302-1.c (baz): Mark with attribute diff --git a/gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90 b/gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90 new file mode 100644 index 0000000..2be90fd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/missing_optional_dummy_5.f90 @@ -0,0 +1,29 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/34848 +! +! This was before giving an ICE; additionally +! the "0" for the string size of the absent optional +! argument was missing. +! +module krmod +contains + subroutine doit() + implicit none + real :: doit1(2) + doit1 = tm_doit() + return + end subroutine doit + function tm_doit(genloc) + implicit none + character, optional :: genloc + real :: tm_doit(2) + tm_doit = 42.0 + end function tm_doit +end module krmod + +! { dg-final { scan-tree-dump " tm_doit \\(&parm.7, 0B, 0\\);" "original" } } +! { dg-final { cleanup-tree-dump "original" } } +! { dg-final { cleanup-modules "pr22146" } } + |
