Bug 53191 - [OOP] C614 (F2003) or C618 (F2008) not implemented for class expressions
Summary: [OOP] C614 (F2003) or C618 (F2008) not implemented for class expressions
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: unknown
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-05-02 14:19 UTC by Paul Thomas
Modified: 2012-05-05 08:53 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Thomas 2012-05-02 14:19:15 UTC
"A part-name to the right of a part-ref with non-zero rank shall not have the POINTER or ALLOCATABLE attribute" is not implemented for class expressions.

 implicit none
 type t0
   integer :: j = 42
 end type t0
 type, extends(t0) :: t1
   integer :: k = 99
 end type t1
 type t
   integer :: i
   class(t0), allocatable :: foo
 end type t
 type(t) :: m(4)
 integer :: n

 do n = 1, 2
   allocate(m(n)%foo, source = t0(n*99))
 end do
 do n = 3, 4
   allocate(m(n)%foo, source = t1(n*99, n*999))
 end do

end

Should not be permitted, according to this constraint. At present, it compiles and does the intended thing at runtime.

Cheers

Paul
Comment 1 Paul Thomas 2012-05-05 08:49:54 UTC
Author: pault
Date: Sat May  5 08:49:43 2012
New Revision: 187192

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187192
Log:
2012-05-05  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/41600
	* trans-array.c (build_array_ref): New static function.
	(gfc_conv_array_ref, gfc_get_dataptr_offset): Call it.
	* trans-expr.c (gfc_get_vptr_from_expr): New function.
	(gfc_conv_derived_to_class): Add a new argument for a caller
	supplied vptr and use it if it is not NULL.
	(gfc_conv_procedure_call): Add NULL to call to above.
	symbol.c (gfc_is_associate_pointer): Return true if symbol is
	a class object.
	* trans-stmt.c (trans_associate_var): Handle class associate-
	names.
	* expr.c (gfc_get_variable_expr): Supply the array-spec if
	possible.
	* trans-types.c (gfc_typenode_for_spec): Set GFC_CLASS_TYPE_P
	for class types.
	* trans.h : Add prototypes for gfc_get_vptr_from_expr and
	gfc_conv_derived_to_class. Define GFC_CLASS_TYPE_P.
	* resolve.c (resolve_variable): For class arrays, ensure that
	the target expression has all the necessary _data references.
	(resolve_assoc_var): Throw a "not yet implemented" error for
	class array selectors that need a temporary.
	* match.c (copy_ts_from_selector_to_associate,
	select_derived_set_tmp, select_class_set_tmp): New functions.
	(select_type_set_tmp): Call one of last two new functions.
	(gfc_match_select_type): Copy_ts_from_selector_to_associate is
	called if associate-name is typed.

	PR fortran/53191
	* resolve.c (resolve_ref): C614 applied to class expressions.


2012-05-05  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/41600
	* gfortran.dg/select_type_26.f03 : New test.
	* gfortran.dg/select_type_27.f03 : New test.

	PR fortran/53191
	* gfortran.dg/select_type_28.f03 : New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/select_type_26.f03
    trunk/gcc/testsuite/gfortran.dg/select_type_27.f03
    trunk/gcc/testsuite/gfortran.dg/select_type_28.f03
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/expr.c
    trunk/gcc/fortran/match.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/symbol.c
    trunk/gcc/fortran/trans-array.c
    trunk/gcc/fortran/trans-expr.c
    trunk/gcc/fortran/trans-stmt.c
    trunk/gcc/fortran/trans-types.c
    trunk/gcc/fortran/trans.h
    trunk/gcc/testsuite/ChangeLog
Comment 2 Paul Thomas 2012-05-05 08:53:51 UTC
Fixed on trunk.

Paul