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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180210
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
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;
}
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
@end multitable
@item @emph{Return Value}:
-The result is a scalar integer with the kind type parameter speciļ¬ed 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}
+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
--- /dev/null
+! { 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