gfortran -v Reading specs from /home/ig25/lib/gcc/i686-pc-linux-gnu/4.0.0/specs Configured with: ../gcc/configure --prefix=/home/ig25 --enable-languages=c,c++,f95 Thread model: posix gcc version 4.0.0 20041120 (experimental) $ cat vary2.f90 program main real :: b call foo(b) contains subroutine foo(a) real, intent(out) :: a a = a + 3. end subroutine foo end program main $ gfortran vary2.f90 $ This violation of intent(out) should be reported. It's there for a reason...
Confirmed.
The test case is OK; the variable b is definable, so can be used as an actual argument for a dummy with intent OUT/INOUT. DF6.0 and Lahey agree with me on this. Gfortran does the right thing if the intent is changed to IN. However, if the testcase is modified to call foo (b + 3.0) it still does not give an error and that is a bug because the expression is not definable. I will produce a patch for it.
Sorry, I goofed; the testcase is not OK - you are right on the righthand side, so to speak. Paul
Subject: Bug 18579 Author: pault Date: Sun Jan 29 16:31:24 2006 New Revision: 110376 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110376 Log: 2006-01-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/18578 PR fortran/18579 PR fortran/20857 PR fortran/20885 * interface.c (compare_actual_formal): Error for INTENT(OUT or INOUT) if actual argument is not a variable. 2006-01-29 Paul Thomas <pault@gcc.gnu.org> PR fortran/18578 PR fortran/18579 PR fortran/20857 PR fortran/20885 * gfortran.dg/intent_out_1.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/intent_out_1.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/interface.c trunk/gcc/testsuite/ChangeLog
Subject: Bug 18579 Author: pault Date: Mon Jan 30 05:45:06 2006 New Revision: 110394 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=110394 Log: 2006-01-30 Paul Thomas <pault@gcc.gnu.org> PR fortran/18578 PR fortran/18579 PR fortran/20857 PR fortran/20885 * interface.c (compare_actual_formal): Error for INTENT(OUT or INOUT) if actual argument is not a variable. PR fortran/17911 * expr.c (gfc_check_assign, gfc_check_pointer_assign): Emit error if the lvalue is a use associated procedure. PR fortran/20895 PR fortran/25030 * expr.c (gfc_check_pointer_assign): Emit error if lvalue and rvalue character lengths are not the same. Use gfc_dep_compare_expr for the comparison. * gfortran.h: Add prototype for gfc_dep_compare_expr. * dependency.h: Remove prototype for gfc_dep_compare_expr. 2006-01-30 Paul Thomas <pault@gcc.gnu.org> PR fortran/18578 PR fortran/18579 PR fortran/20857 PR fortran/20885 * gfortran.dg/intent_out_1.f90: New test. PR fortran/17911 * gfortran.dg/procedure_lvalue.f90: New test. PR fortran/20895 PR fortran/25030 * gfortran.dg/char_pointer_assign_2.f90: New test. * gfortran.dg/char_result_1.f90: Correct unequal charlen pointer assignment to be consistent with standard. * gfortran.dg/char_result_2.f90: The same. * gfortran.dg/char_result_8.f90: The same. Added: branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/char_pointer_assign_2.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/intent_out_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/procedure_lvalue.f90 Modified: branches/gcc-4_1-branch/gcc/fortran/ChangeLog branches/gcc-4_1-branch/gcc/fortran/dependency.h branches/gcc-4_1-branch/gcc/fortran/expr.c branches/gcc-4_1-branch/gcc/fortran/gfortran.h branches/gcc-4_1-branch/gcc/fortran/interface.c branches/gcc-4_1-branch/gcc/testsuite/ChangeLog branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/char_result_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/char_result_2.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/char_result_8.f90
Fixed on trunk and 4.1. Paul