re PR fortran/47023 (C_Sizeof: Rejects valid code)

2011-10-19  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/47023
	* check.c (gfc_check_sizeof): Reject procedures as argument of SIZEOF.
	* intrinsinc.texi (SIZEOF): Document it.
	(STORAGE_SIZE): Fix special characters. Fix line breaks.

2011-10-19  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/47023
	* gfortran.dg/sizeof_proc.f90: New.

From-SVN: r180210
This commit is contained in:
Janus Weil 2011-10-20 00:05:23 +02:00
parent e423833d36
commit 2c23ebfec6
5 changed files with 54 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2011-10-19 Janus Weil <janus@gcc.gnu.org>
PR fortran/47023
* check.c (gfc_check_sizeof): Reject procedures as argument of SIZEOF.
* intrinsinc.texi (SIZEOF): Document it.
(STORAGE_SIZE): Fix special characters. Fix line breaks.
2011-10-18 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/50420

View File

@ -3444,8 +3444,15 @@ gfc_check_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
gfc_try
gfc_check_sizeof (gfc_expr *arg ATTRIBUTE_UNUSED)
gfc_check_sizeof (gfc_expr *arg)
{
if (arg->ts.type == BT_PROCEDURE)
{
gfc_error ("'%s' argument of '%s' intrinsic at %L may not be a procedure",
gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic,
&arg->where);
return FAILURE;
}
return SUCCESS;
}

View File

@ -11459,7 +11459,8 @@ number of bytes occupied by the argument. If the argument has the
to is returned. If the argument is of a derived type with @code{POINTER}
or @code{ALLOCATABLE} components, the return value doesn't account for
the sizes of the data pointed to by these components. If the argument is
polymorphic, the size according to the declared type is returned.
polymorphic, the size according to the declared type is returned. The argument
may not be a procedure or procedure pointer.
@item @emph{Example}:
@smallexample
@ -11816,8 +11817,10 @@ Inquiry function
@end multitable
@item @emph{Return Value}:
The result is a scalar integer with the kind type parameter specified by KIND (or default integer type if KIND is missing). The result value is the size expressed in bits for an element of an array that
has the dynamic type and type parameters of A.
The result is a scalar integer with the kind type parameter specified by KIND
(or default integer type if KIND is missing). The result value is the size
expressed in bits for an element of an array that has the dynamic type and type
parameters of A.
@item @emph{See also}:
@ref{C_SIZEOF}, @ref{SIZEOF}

View File

@ -1,3 +1,8 @@
2011-10-19 Janus Weil <janus@gcc.gnu.org>
PR fortran/47023
* gfortran.dg/sizeof_proc.f90: New.
2011-10-19 Joseph Myers <joseph@codesourcery.com>
* g++.dg/compat/struct-layout-1_generate.c: Also pass -mno-mmx

View File

@ -0,0 +1,28 @@
! { dg-do compile }
!
! PR 47023: C_Sizeof: Rejects valid code
!
! Contributed by Janus Weil <janus@gcc.gnu.org>
use iso_c_binding
procedure(real) :: proc
procedure(real), pointer :: pp
pp => sin
print *,sizeof(proc) ! { dg-error "may not be a procedure" }
print *,sizeof(pp) ! { dg-error "may not be a procedure" }
print *,sizeof(pp(0.))
print *,sizeof(sub) ! { dg-error "may not be a procedure" }
print *,sizeof(func) ! { dg-error "may not be a procedure" }
print *,sizeof(func())
contains
subroutine sub
end subroutine
real function func()
func = 0.
end function
end