------- Additional Comments From cvs-commit at gcc dot gnu dot org  2005-09-09 
06:34 -------
Subject: Bug 21104

CVSROOT:        /cvs/gcc
Module name:    gcc
Changes by:     [EMAIL PROTECTED]       2005-09-09 06:34:08

Modified files:
        gcc/fortran    : ChangeLog Make-lang.in dependency.h 
                         dependency.c trans.h trans-array.c trans-expr.c 
        gcc/testsuite  : ChangeLog 
Added files:
        gcc/testsuite/gfortran.dg: vector_subscript_1.f90 
                                   vector_subscript_2.f90 

Log message:
        PR fortran/19239
        * Makefile.in (fortran/trans-expr.o): Depend on dependency.h.
        * dependency.h (gfc_ref_needs_temporary_p): Declare.
        * dependency.c (gfc_ref_needs_temporary_p): New function.
        (gfc_check_fncall_dependency): Use it instead of inlined check.
        By so doing, take advantage of the fact that character substrings
        within an array reference also need a temporary.
        * trans.h (GFC_SS_VECTOR): Adjust comment.
        * trans-array.c (gfc_free_ss): Remove GFC_SS_VECTOR case.
        (gfc_set_vector_loop_bounds): New function.
        (gfc_add_loop_ss_code): Call it after evaluating the subscripts of
        a GFC_SS_SECTION.  Deal with the GFC_SS_VECTOR case by evaluating
        the vector expression and caching its descriptor for use within
        the loop.
        (gfc_conv_array_index_ref, gfc_conv_vector_array_index): Delete.
        (gfc_conv_array_index_offset): Handle scalar, vector and range
        dimensions as separate cases of a switch statement.  In the vector
        case, use the loop variable to calculate a vector index and use the
        referenced element as the dimension's index.  Perform bounds checking
        on this final index.
        (gfc_conv_section_upper_bound): Return null for vector indexes.
        (gfc_conv_section_startstride): Give vector indexes a start value
        of 0 and a stride of 1.
        (gfc_conv_ss_startstride): Adjust for new GFC_SS_VECTOR representation.
        (gfc_conv_expr_descriptor): Expand comments.  Generalize the
        handling of the !want_pointer && !direct_byref case.  Use
        gfc_ref_needs_temporary_p to decide whether the variable case
        needs a temporary.
        (gfc_walk_variable_expr): Handle DIMEN_VECTOR by creating a
        GFC_SS_VECTOR index.
        * trans-expr.c: Include dependency.h.
        (gfc_trans_arrayfunc_assign): Fail if the target needs a temporary.
        
        2005-09-09  Richard Sandiford  <[EMAIL PROTECTED]>
        
        PR fortran/21104
        * trans.h (gfc_interface_sym_mapping, gfc_interface_mapping): Moved
        from trans-expr.c.
        (gfc_init_interface_mapping, gfc_free_interface_mapping)
        (gfc_add_interface_mapping, gfc_finish_interface_mapping)
        (gfc_apply_interface_mapping): Declare.
        * trans-array.h (gfc_set_loop_bounds_from_array_spec): Declare.
        (gfc_trans_allocate_temp_array): Add pre and post block arguments.
        * trans-array.c (gfc_set_loop_bounds_from_array_spec): New function.
        (gfc_trans_allocate_array_storage): Replace loop argument with
        separate pre and post blocks.
        (gfc_trans_allocate_temp_array): Add pre and post block arguments.
        Update call to gfc_trans_allocate_array_storage.
        (gfc_trans_array_constructor, gfc_conv_loop_setup): Adjust for new
        interface to gfc_trans_allocate_temp_array.
        * trans-expr.c (gfc_interface_sym_mapping, gfc_interface_mapping):
        Moved to trans.h.
        (gfc_init_interface_mapping, gfc_free_interface_mapping)
        (gfc_add_interface_mapping, gfc_finish_interface_mapping)
        (gfc_apply_interface_mapping): Make extern.
        (gfc_conv_function_call): Build an interface mapping for array
        return values too.  Call gfc_set_loop_bounds_from_array_spec.
        Adjust call to gfc_trans_allocate_temp_array so that code is
        added to SE rather than LOOP.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&r1=1.546&r2=1.547
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/Make-lang.in.diff?cvsroot=gcc&r1=1.20&r2=1.21
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/dependency.h.diff?cvsroot=gcc&r1=1.4&r2=1.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/dependency.c.diff?cvsroot=gcc&r1=1.8&r2=1.9
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans.h.diff?cvsroot=gcc&r1=1.34&r2=1.35
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-array.c.diff?cvsroot=gcc&r1=1.59&r2=1.60
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-expr.c.diff?cvsroot=gcc&r1=1.62&r2=1.63
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6037&r2=1.6038
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/vector_subscript_1.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/vector_subscript_2.f90.diff?cvsroot=gcc&r1=NONE&r2=1.1



-- 


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

Reply via email to