Bug 18579 - intent(out) violation is not detected
Summary: intent(out) violation is not detected
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.0.0
: P2 minor
Target Milestone: 4.1.0
Assignee: Not yet assigned to anyone
URL:
Keywords: accepts-invalid, diagnostic
Depends on:
Blocks:
 
Reported: 2004-11-20 17:15 UTC by Thomas Koenig
Modified: 2006-01-30 12:38 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-01-07 05:38:22


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Koenig 2004-11-20 17:15:30 UTC
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...
Comment 1 Andrew Pinski 2004-11-20 17:48:45 UTC
Confirmed.
Comment 2 Paul Thomas 2005-12-15 09:17:42 UTC
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.
Comment 3 Paul Thomas 2005-12-15 14:10:45 UTC
Sorry, I goofed; the testcase is not OK - you are right on the righthand side, so to speak.

Paul

Comment 4 Paul Thomas 2006-01-29 16:31:30 UTC
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

Comment 5 Paul Thomas 2006-01-30 05:45:13 UTC
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

Comment 6 Paul Thomas 2006-01-30 05:47:15 UTC
Fixed on trunk and 4.1.

Paul