diff options
author | Tobias Burnus <burnus@net-b.de> | 2008-01-22 20:35:49 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2008-01-22 20:35:49 +0100 |
commit | b5ca4fd2f6927b6c2cc9ca3f315980b9cbf45605 (patch) | |
tree | 3c1b71c8974b8b54b4e6e30b505b01c998567adb /gcc | |
parent | 841d09e0d0b57a5f8d1afa680757bbc229a52e36 (diff) | |
download | gcc-b5ca4fd2f6927b6c2cc9ca3f315980b9cbf45605.zip gcc-b5ca4fd2f6927b6c2cc9ca3f315980b9cbf45605.tar.gz gcc-b5ca4fd2f6927b6c2cc9ca3f315980b9cbf45605.tar.bz2 |
re PR fortran/34848 (internal compiler error with optional argument of character type and array return type)
2008-01-22 Tobias Burnus <burnus@net-b.de>
PR fortran/34848
* interface.c (compare_actual_formal): Fix adding type
to missing_arg_type for absent optional arguments.
2008-01-22 Tobias Burnus <burnus@net-b.de>
PR fortran/34848
* gfortran.dg/missing_optional_dummy_4.f90
From-SVN: r131738
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/missing_optional_dummy_4.f90 | 28 |
4 files changed, 40 insertions, 1 deletions
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 <burnus@net-b.de> + PR fortran/34848 + * interface.c (compare_actual_formal): Fix adding type + to missing_arg_type for absent optional arguments. + +2008-01-22 Tobias Burnus <burnus@net-b.de> + 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 <burnus@net-b.de> + + PR fortran/34848 + * gfortran.dg/missing_optional_dummy_4.f90 + 2008-01-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * 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" } } + |