From: Tobias Burnus Date: Tue, 22 Jan 2008 19:35:49 +0000 (+0100) Subject: re PR fortran/34848 (internal compiler error with optional argument of character... X-Git-Tag: releases/gcc-4.3.0~469 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5ca4fd2f6927b6c2cc9ca3f315980b9cbf45605;p=thirdparty%2Fgcc.git re PR fortran/34848 (internal compiler error with optional argument of character type and array return type) 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 From-SVN: r131738 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fd6efa3dbba9..134c0c4e6699 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +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 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index ef639845c789..8b73adcf3c8a 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 82f22c06faf8..7dcbbcb768ac 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 000000000000..9b1a574d792a --- /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" } } +