Bug 41618

Summary: [OOP] accepts-invalid with CLASS pointer component
Product: gcc Reporter: janus
Component: fortranAssignee: janus
Status: RESOLVED FIXED    
Severity: normal CC: gcc-bugs
Priority: P3 Keywords: accepts-invalid
Version: 4.5.0   
Target Milestone: ---   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2009-10-09 12:17:50

Description janus 2009-10-07 12:43:22 UTC
The following invalid program is currently accepted:

 type t1
   integer :: comp
   class(t1),pointer :: cc
 end type

 class(t1) :: x    ! invalid: must be dummy, allocatable or pointer

 x%comp = 3
 print *,x%comp

end


Removing the line which defines the class pointer component 'cc' causes the program to be correctly rejected.
Comment 1 janus 2009-10-09 12:17:49 UTC
The problem here is that the error check comes too late: It should happen already before the call to encapsulate_class_symbol.

This is effectively fixed by the patch for PR41629:

http://gcc.gnu.org/ml/fortran/2009-10/msg00088.html
Comment 2 Paul Thomas 2009-10-17 18:09:43 UTC
Subject: Bug 41618

Author: pault
Date: Sat Oct 17 18:09:25 2009
New Revision: 152955

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=152955
Log:
2009-10-17  Janus Weil  <janus@gcc.gnu.org>
	    Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/41608
	* decl.c (gfc_match_data_decl): Add BT_CLASS for undefined type
	and empty type errors.
	* parse.c (gfc_build_block_ns): Only set recursive if parent ns
	has a proc_name.

	PR fortran/41629
	PR fortran/41618
	PR fortran/41587
	* gfortran.h : Add class_ok bitfield to symbol_attr.
	* decl.c (build_sym): Set attr.class_ok if dummy, pointer or
	allocatable.
	(build_struct): Use gfc_try 't' to carry errors past the call
	to encapsulate_class_symbol.
	(attr_decl1): For a CLASS object, apply the new attribute to
	the data component.
	* match.c (gfc_match_select_type): Set attr.class_ok for an
	assigned selector.
	* resolve.c (resolve_fl_variable_derived): Check a CLASS object
	is dummy, pointer or allocatable by testing the class_ok and
	the use_assoc attribute.

2009-10-17  Janus Weil  <janus@gcc.gnu.org>
	    Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/41629
	* gfortran.dg/class_6.f90: New test.

	PR fortran/41608
	PR fortran/41587
	* gfortran.dg/class_7.f90: New test.

	PR fortran/41618
	* gfortran.dg/class_8.f90: New test.


Added:
    trunk/gcc/testsuite/gfortran.dg/class_6.f03
    trunk/gcc/testsuite/gfortran.dg/class_7.f03
    trunk/gcc/testsuite/gfortran.dg/class_8.f03
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/decl.c
    trunk/gcc/fortran/gfortran.h
    trunk/gcc/fortran/match.c
    trunk/gcc/fortran/parse.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/testsuite/ChangeLog

Comment 3 Paul Thomas 2009-10-18 12:26:22 UTC
Fixed on trunk.

Thanks for the report!

Paul