[PATCH] Automatics in equivalence statements
Mark Eggleston
mark.eggleston@codethink.co.uk
Mon Jul 1 09:35:00 GMT 2019
On 25/06/2019 14:17, Mark Eggleston wrote:
>
> On 25/06/2019 00:17, Jeff Law wrote:
>> On 6/24/19 2:19 AM, Bernhard Reutner-Fischer wrote:
>>> On Fri, 21 Jun 2019 07:10:11 -0700
>>> Steve Kargl <sgk@troutmask.apl.washington.edu> wrote:
>>>
>>>> On Fri, Jun 21, 2019 at 02:31:51PM +0100, Mark Eggleston wrote:
>>>>> Currently variables with the AUTOMATIC attribute can not appear in an
>>>>> EQUIVALENCE statement. However its counterpart, STATIC, can be
>>>>> used in
>>>>> an EQUIVALENCE statement.
>>>>>
>>>>> Where there is a clear conflict in the attributes of variables in an
>>>>> EQUIVALENCE statement an error message will be issued as is currently
>>>>> the case.
>>>>>
>>>>> If there is no conflict e.g. a variable with a AUTOMATIC attribute
>>>>> and a
>>>>> variable(s) without attributes all variables in the EQUIVALENCE will
>>>>> become AUTOMATIC.
>>>>>
>>>>> Note: most of this patch was written by Jeff Law <law@redhat.com>
>>>>>
>>>>> Please review.
>>>>>
>>>>> ChangeLogs:
>>>>>
>>>>> gcc/fortran
>>>>>
>>>>>     Jeff Law <law@redhat.com>
>>>>>     Mark Eggleston <mark.eggleston@codethink.com>
>>>>>
>>>>> Â Â Â Â * gfortran.h: Add check_conflict declaration.
>>>> This is wrong. By convention a routine that is not static
>>>> has the gfc_ prefix.
Updated the code to use gfc_check_conflict instead.
>>>>
>>> Furthermore doesn't this export indicate that you're committing a
>>> layering violation somehow?
>> Possibly. I'm the original author, but my experience in our fortran
>> front-end is minimal. I fully expected this patch to need some
>> tweaking.
>>
>> We certainly don't want to recreate all the checking that's done in
>> check_conflict. We just need to defer it to a later point --
>> find_equivalence seemed like a good point since we've got the full
>> equivalence list handy and can accumulate the attributes across the
>> entire list, then check for conflicts.
>>
>> If there's a concrete place where you think we should be doing this, I'm
>> all ears.
>>
> Any suggestions will be appreciate.
>>>> Â Â Â Â * symbol.c (check_conflict): Remove automatic in equivalence
>>>> conflict
>>>> Â Â Â Â check.
>>>> Â Â Â Â * symbol.c (save_symbol): Add check for in equivalence to
>>>> stop the
>>>> Â Â Â Â the save attribute being added.
>>>> Â Â Â Â * trans-common.c (build_equiv_decl): Add is_auto parameter and
>>>> Â Â Â Â add !is_auto to condition where TREE_STATIC (decl) is set.
>>>> Â Â Â Â * trans-common.c (build_equiv_decl): Add local variable is_auto,
>>>> Â Â Â Â set it true if an atomatic attribute is encountered in the
>>>> variable
>>> atomatic? I read atomic but you mean automatic.
>> Yes.
>>
>>>>     list. Call build_equiv_decl with is_auto as an additional
>>>> parameter.
>>>> Â Â Â Â flag_dec_format_defaults is enabled.
>>>> Â Â Â Â * trans-common.c (accumulate_equivalence_attributes) : New
>>>> subroutine.
>>>> Â Â Â Â * trans-common.c (find_equivalence) : New local variable
>>>> dummy_symbol,
>>>> Â Â Â Â accumulated equivalence attributes from each symbol then
>>>> check for
>>>> Â Â Â Â conflicts.
>>> I'm just curious why you don't gfc_copy_attr for the most part of
>>> accumulate_equivalence_attributes?
>>> thanks,
>> Simply didn't know about it. It could probably significantly simplify
>> the accumulation of attributes step.
> Using gfc_copy_attr causes a great many "Duplicate DIMENSION attribute
> specified at (1)" errors. This is because there is a great deal of
> checking done instead of simply keeping track of the attributes used
> which is all that is required for determining whether there is a
> conflict in the equivalence statement.
>
> Also, the final section of accumulate_equivalence_attributes involving
> SAVE, INTENT and ACCESS look suspect to me. I'll check and update the
> patch if necessary.
No need to check intent as there is already a conflict with DUMMY and
INTENT can only be present for dummy variables.
Please find attached an updated patch. Change logs:
gcc/fortran
   Jeff Law <law@redhat.com>
   Mark Eggleston <mark.eggleston@codethink.com>
   * gfortran.h: Add gfc_check_conflict declaration.
   * symbol.c (check_conflict): Rename cfg_check_conflict and remove
   static.
   * symbol.c (cfg_check_conflict): Remove automatic in equivalence
   conflict check.
   * symbol.c (save_symbol): Add check for in equivalence to stop the
   the save attribute being added.
   * trans-common.c (build_equiv_decl): Add is_auto parameter and
   add !is_auto to condition where TREE_STATIC (decl) is set.
   * trans-common.c (build_equiv_decl): Add local variable is_auto,
   set it true if an atomatic attribute is encountered in the variable
   list. Call build_equiv_decl with is_auto as an additional parameter.
   flag_dec_format_defaults is enabled.
   * trans-common.c (accumulate_equivalence_attributes) : New subroutine.
   * trans-common.c (find_equivalence) : New local variable dummy_symbol,
   accumulated equivalence attributes from each symbol then check for
   conflicts.
gcc/testsuite
   Mark Eggleston <mark.eggleston@codethink.com>
   * gfortran.dg/auto_in_equiv_1.f90: New test.
   * gfortran.dg/auto_in_equiv_2.f90: New test.
   * gfortran.dg/auto_in_equiv_3.f90: New test.
If the updated patch is acceptable, please can someone with the
privileges commit the patch.
Mark
>
>> Jeff
>>
>>
>>
--
https://www.codethink.co.uk/privacy.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Allow-automatics-in-equivalence.patch
Type: text/x-patch
Size: 23778 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/fortran/attachments/20190701/c09eb164/attachment.bin>
More information about the Fortran
mailing list