public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work
       [not found] <bug-41539-4@http.gcc.gnu.org/bugzilla/>
@ 2011-12-11 20:45 ` pault at gcc dot gnu.org
  2011-12-12  8:03 ` burnus at gcc dot gnu.org
  1 sibling, 0 replies; 5+ messages in thread
From: pault at gcc dot gnu.org @ 2011-12-11 20:45 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41539

--- Comment #6 from Paul Thomas <pault at gcc dot gnu.org> 2011-12-11 20:42:29 UTC ---
Author: pault
Date: Sun Dec 11 20:42:23 2011
New Revision: 182210

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=182210
Log:
2011-12-11  Paul Thomas  <pault@gcc.gnu.org>
    Tobias Burnus  <burnus@gcc.gnu.org>

    PR fortran/41539
    PR fortran/43214
    PR fortran/43969
    PR fortran/44568
    PR fortran/46356
    PR fortran/46990
    PR fortran/49074
    * interface.c(symbol_rank): Return the rank of the _data
    component of class objects.
    (compare_parameter): Also compare the derived type of the class
    _data component for type mismatch.  Similarly, return 1 if the
    formal and _data ranks match.
    (compare_actual_formal): Do not compare storage sizes for class
    expressions. It is an error if an actual class array, passed to
    a formal class array is not full.
    * trans-expr.c (gfc_class_data_get, gfc_class_vptr_get,
    gfc_vtable_field_get, gfc_vtable_hash_get, gfc_vtable_size_get,
    gfc_vtable_extends_get, gfc_vtable_def_init_get,
    gfc_vtable_copy_get): New functions for class API.
    (gfc_conv_derived_to_class): For an array reference in an
    elemental procedure call retain the ss to provide the
    scalarized array reference. Moved in file.
    (gfc_conv_class_to_class): New function.
        (gfc_conv_subref_array_arg): Use the type of the
    class _data component as a basetype.
    (gfc_conv_procedure_call): Ensure that class array expressions
    have both the _data reference and an array reference. Use 
    gfc_conv_class_to_class to handle class arrays for elemental
    functions in scalarized loops, class array elements and full
    class arrays. Use a call to gfc_conv_subref_array_arg in order
    that the copy-in/copy-out for passing class arrays to derived
    type arrays occurs correctly.
    (gfc_conv_expr): If it is missing, add the _data component
    between a class object or component and an array reference.
    (gfc_trans_class_array_init_assign): New function.
    (gfc_trans_class_init_assign): Call it for array expressions.
    * trans-array.c (gfc_add_loop_ss_code): Do not use a temp for
    class scalars since their size will depend on the dynamic type.
    (build_class_array_ref): New function.
    (gfc_conv_scalarized_array_ref): Call build_class_array_ref.
    (gfc_array_init_size): Add extra argument, expr3, that represents
    the SOURCE argument. If present,use this for the element size.
    (gfc_array_allocate): Also add argument expr3 and use it when
    calling gfc_array_init_size.
    (structure_alloc_comps): Enable class arrays.
    * class.c (gfc_add_component_ref): Carry over the derived type
    of the _data component.
    (gfc_add_class_array_ref): New function.
    (class_array_ref_detected): New static function.
    (gfc_is_class_array_ref): New function that calls previous.
    (gfc_is_class_scalar_expr): New function.
    (gfc_build_class_symbol): Throw not implemented error for
    assumed size class arrays.  Remove error that prevents
    CLASS arrays.
    (gfc_build_class_symbol): Prevent pointer/allocatable conflict.
    Also unset codimension.
    (gfc_find_derived_vtab): Make 'copy' elemental and set the
    intent of the arguments accordingly.: 
    * trans-array.h : Update prototype for gfc_array_allocate.
    * array.c (gfc_array_dimen_size): Return failure if class expr.
    (gfc_array_size): Likewise.
    * gfortran.h : New prototypes for gfc_add_class_array_ref,
    gfc_is_class_array_ref and gfc_is_class_scalar_expr.
    * trans-stmt.c (trans_associate_var): Exclude class targets
    from test. Move the allocation of the _vptr to an earlier time
    for class objects.
    (trans_associate_var): Assign the descriptor directly for class
    arrays.
    (gfc_trans_allocate): Add expr3 to gfc_array_allocate arguments.
    Convert array element references into sections. Do not invoke
    gfc_conv_procedure_call, use gfc_trans_call instead.
    * expr.c (gfc_get_corank): Fix for BT_CLASS.
    (gfc_is_simply_contiguous): Exclude class from test.
    * trans.c (gfc_build_array_ref): Include class array refs.
    * trans.h : Include prototypes for class API functions that are
    new in trans-expr. Define GFC_DECL_CLASS(node).
    * resolve.c (check_typebound_baseobject ): Remove error for
    non-scalar base object.
    (resolve_allocate_expr): Ensure that class _data component is
    present. If array, call gfc_expr_to_intialize.
    (resolve_select): Remove scalar error for SELECT statement as a
    temporary measure.
    (resolve_assoc_var): Update 'target' (aka 'selector') as
    needed. Ensure that the target expression has the right rank.
    (resolve_select_type): Ensure that target expressions have a
    valid locus.
    (resolve_allocate_expr, resolve_fl_derived0): Fix for BT_CLASS.
    * trans-decl.c (gfc_get_symbol_decl): Set GFC_DECL_CLASS, where
    appropriate.
    (gfc_trans_deferred_vars): Get class arrays right.
    * match.c(select_type_set_tmp): Add array spec to temporary.
    (gfc_match_select_type): Allow class arrays.
    * check.c (array_check): Ensure that class arrays have refs.
    (dim_corank_check, dim_rank_check): Retrun success if class.
    * primary.c (gfc_match_varspec): Fix for class arrays and
    co-arrays. Make sure that class _data is present.
    (gfc_match_rvalue): Handle class arrays.
    *trans-intrinsic.c (gfc_conv_intrinsic_size): Add class array
    reference.
    (gfc_conv_allocated): Add _data component to class expressions.
    (gfc_add_intrinsic_ss_code): ditto.
    * simplify.c (simplify_cobound): Fix for BT_CLASS.
    (simplify_bound): Return NULL for class arrays.
    (simplify_cobound): Obtain correct array_spec. Use cotype as
    appropriate. Use arrayspec for bounds.

2011-12-11  Paul Thomas  <pault@gcc.gnu.org>
    Tobias Burnus  <burnus@gcc.gnu.org>

    PR fortran/41539
    PR fortran/43214
    PR fortran/43969
    PR fortran/44568
    PR fortran/46356
    PR fortran/46990
    PR fortran/49074
    * gfortran.dg/class_array_1.f03: New.
    * gfortran.dg/class_array_2.f03: New.
    * gfortran.dg/class_array_3.f03: New.
    * gfortran.dg/class_array_4.f03: New.
    * gfortran.dg/class_array_5.f03: New.
    * gfortran.dg/class_array_6.f03: New.
    * gfortran.dg/class_array_7.f03: New.
    * gfortran.dg/class_array_8.f03: New.
    * gfortran.dg/coarray_poly_1.f90: New.
    * gfortran.dg/coarray_poly_2.f90: New.
    * gfortran.dg/coarray/poly_run_1.f90: New.
    * gfortran.dg/coarray/poly_run_2.f90: New.
    * gfortran.dg/class_to_type_1.f03: New.
    * gfortran.dg/type_to_class_1.f03: New.
    * gfortran.dg/typebound_assignment_3.f03: Remove the error.
    * gfortran.dg/auto_dealloc_2.f90: Occurences of __builtin_free
    now 2.
    * gfortran.dg/class_19.f03: Occurences of __builtin_free now 8.


Added:
    trunk/gcc/testsuite/gfortran.dg/class_array_1.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_2.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_3.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_4.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_5.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_6.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_7.f03
    trunk/gcc/testsuite/gfortran.dg/class_array_8.f03
    trunk/gcc/testsuite/gfortran.dg/class_to_type_1.f03
    trunk/gcc/testsuite/gfortran.dg/coarray/poly_run_1.f90
    trunk/gcc/testsuite/gfortran.dg/coarray/poly_run_2.f90
    trunk/gcc/testsuite/gfortran.dg/coarray_poly_1.f90
    trunk/gcc/testsuite/gfortran.dg/coarray_poly_2.f90
    trunk/gcc/testsuite/gfortran.dg/type_to_class_1.f03
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/array.c
    trunk/gcc/fortran/check.c
    trunk/gcc/fortran/class.c
    trunk/gcc/fortran/expr.c
    trunk/gcc/fortran/gfortran.h
    trunk/gcc/fortran/interface.c
    trunk/gcc/fortran/match.c
    trunk/gcc/fortran/primary.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/simplify.c
    trunk/gcc/fortran/trans-array.c
    trunk/gcc/fortran/trans-array.h
    trunk/gcc/fortran/trans-decl.c
    trunk/gcc/fortran/trans-expr.c
    trunk/gcc/fortran/trans-intrinsic.c
    trunk/gcc/fortran/trans-stmt.c
    trunk/gcc/fortran/trans.c
    trunk/gcc/fortran/trans.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/auto_dealloc_2.f90
    trunk/gcc/testsuite/gfortran.dg/class_19.f03
    trunk/gcc/testsuite/gfortran.dg/typebound_assignment_3.f03


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work
       [not found] <bug-41539-4@http.gcc.gnu.org/bugzilla/>
  2011-12-11 20:45 ` [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work pault at gcc dot gnu.org
@ 2011-12-12  8:03 ` burnus at gcc dot gnu.org
  1 sibling, 0 replies; 5+ messages in thread
From: burnus at gcc dot gnu.org @ 2011-12-12  8:03 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41539

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED

--- Comment #7 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-12-12 07:53:11 UTC ---
FIXED on the 4.7 trunk


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work
  2009-10-01 22:02 [Bug fortran/41539] New: " burnus at gcc dot gnu dot org
  2010-03-04 15:00 ` [Bug fortran/41539] [OOP] " pault at gcc dot gnu dot org
  2010-03-04 15:00 ` pault at gcc dot gnu dot org
@ 2010-07-15 21:39 ` dfranke at gcc dot gnu dot org
  2 siblings, 0 replies; 5+ messages in thread
From: dfranke at gcc dot gnu dot org @ 2010-07-15 21:39 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from dfranke at gcc dot gnu dot org  2010-07-15 21:39 -------
(From update of attachment 20021)
Obsolete duplicate.


-- 

dfranke at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #20021|0                           |1
        is obsolete|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41539


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work
  2009-10-01 22:02 [Bug fortran/41539] New: " burnus at gcc dot gnu dot org
@ 2010-03-04 15:00 ` pault at gcc dot gnu dot org
  2010-03-04 15:00 ` pault at gcc dot gnu dot org
  2010-07-15 21:39 ` dfranke at gcc dot gnu dot org
  2 siblings, 0 replies; 5+ messages in thread
From: pault at gcc dot gnu dot org @ 2010-03-04 15:00 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from pault at gcc dot gnu dot org  2010-03-04 15:00 -------
Created an attachment (id=20021)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20021&action=view)
Fixes this bug

This does all the right things, except that the array elements cannot yet be
referenced - another PR, I think?

Paul


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41539


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work
  2009-10-01 22:02 [Bug fortran/41539] New: " burnus at gcc dot gnu dot org
  2010-03-04 15:00 ` [Bug fortran/41539] [OOP] " pault at gcc dot gnu dot org
@ 2010-03-04 15:00 ` pault at gcc dot gnu dot org
  2010-07-15 21:39 ` dfranke at gcc dot gnu dot org
  2 siblings, 0 replies; 5+ messages in thread
From: pault at gcc dot gnu dot org @ 2010-03-04 15:00 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from pault at gcc dot gnu dot org  2010-03-04 14:59 -------
Created an attachment (id=20020)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20020&action=view)
Fixes this bug

This does all the right things, except that the array elements cannot yet be
referenced - another PR, I think?

Paul


-- 

pault at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |pault at gcc dot gnu dot org
                   |dot org                     |
             Status|UNCONFIRMED                 |ASSIGNED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41539


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-12-12  7:53 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-41539-4@http.gcc.gnu.org/bugzilla/>
2011-12-11 20:45 ` [Bug fortran/41539] [OOP] Calling function which takes CLASS: Rank comparison does not work pault at gcc dot gnu.org
2011-12-12  8:03 ` burnus at gcc dot gnu.org
2009-10-01 22:02 [Bug fortran/41539] New: " burnus at gcc dot gnu dot org
2010-03-04 15:00 ` [Bug fortran/41539] [OOP] " pault at gcc dot gnu dot org
2010-03-04 15:00 ` pault at gcc dot gnu dot org
2010-07-15 21:39 ` dfranke at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).