This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Automatics in equivalence statements
- From: Jeff Law <law at redhat dot com>
- To: Mark Eggleston <mark dot eggleston at codethink dot co dot uk>, Bernhard Reutner-Fischer <rep dot dot dot nop at gmail dot com>, Steve Kargl <sgk at troutmask dot apl dot washington dot edu>
- Cc: fortran <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 22 Jul 2019 18:19:21 -0600
- Subject: Re: [PATCH] Automatics in equivalence statements
- References: <01b19cf0-7854-90a7-a2cd-14750dfcf543@codethink.co.uk> <20190621141011.GB49159@troutmask.apl.washington.edu> <20190624101930.7cf804b1@nbbrfq.loc> <1cd500c2-14b6-b758-710a-b95c75c746f9@redhat.com> <0cc2093c-29f5-1c6b-07c5-c2f931c20674@codethink.co.uk> <8d987cfc-b9ff-491c-3453-eb8d1d8f3936@codethink.co.uk>
On 7/1/19 3:35 AM, Mark Eggleston wrote:
>
> 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.
[ ... ]
BTW, I've put the latest version of this into my tester. I don't expect
to see any problems, of course.
Jeff