From: Tobias Burnus Date: Sun, 6 Jan 2008 09:07:47 +0000 (+0100) Subject: re PR fortran/34662 (inout argument with parameter) X-Git-Tag: releases/gcc-4.3.0~736 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5c655e832e56b78b5cc4cab0452f4263740e938;p=thirdparty%2Fgcc.git re PR fortran/34662 (inout argument with parameter) 2008-01-06 Tobias Burnus PR fortran/34662 * interface.c (compare_actual_formal): Reject parameter actual to intent(out) dummy. 2008-01-06 Tobias Burnus PR fortran/34662 * gfortran.dg/intent_out_3.f90: New. From-SVN: r131348 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 82f4cd7aea43..43d7519d13af 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-01-06 Tobias Burnus + + PR fortran/34662 + * interface.c (compare_actual_formal): Reject parameter + actual to intent(out) dummy. + 2008-01-04 Tobias Burnus PR fortran/34557 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 519251efb2e4..b900b102fe5e 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1908,13 +1908,15 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal, } /* Check intent = OUT/INOUT for definable actual argument. */ - if (a->expr->expr_type != EXPR_VARIABLE + if ((a->expr->expr_type != EXPR_VARIABLE + || a->expr->symtree->n.sym->attr.flavor != FL_VARIABLE) && (f->sym->attr.intent == INTENT_OUT || f->sym->attr.intent == INTENT_INOUT)) { if (where) - gfc_error ("Actual argument at %L must be definable to " - "match dummy INTENT = OUT/INOUT", &a->expr->where); + gfc_error ("Actual argument at %L must be definable as " + "the dummy argument '%s' is INTENT = OUT/INOUT", + &a->expr->where, f->sym->name); return 0; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8519caecd7f3..5cecf0642e65 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-06 Tobias Burnus + + PR fortran/34662 + * gfortran.dg/intent_out_3.f90: New. + 2008-01-05 Richard Sandiford * objc.dg/stabs-1.m: Allow labels to be begin with $L as well as .L. diff --git a/gcc/testsuite/gfortran.dg/intent_out_3.f90 b/gcc/testsuite/gfortran.dg/intent_out_3.f90 new file mode 100644 index 000000000000..7b68a352246e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intent_out_3.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! PR fortran/34662 +! The INTENT error was not detected. +! Test case contributed by Joost VandeVondele. +! +MODULE M1 + TYPE T1 + INTEGER :: I(3) + END TYPE T1 + TYPE(T1), PARAMETER :: D1=T1((/1,2,3/)) +CONTAINS + SUBROUTINE S1(J) + INTEGER, INTENT(INOUT) :: J + END SUBROUTINE S1 +END MODULE M1 +USE M1 +CALL S1(D1%I(3)) ! { dg-error "must be definable" } +END