This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: Re: [PATCH] fortran/20869 -- INTRINSIC and EXTERNAL conflict


Steve,

> 
> gfc_match_intrinsic and gfc_match_external work for attributes
> in a single statement, ie.,
> 
> real, intrinsic, external :: x

Yes, indeed.

> 
> will trigger an error.  OTOH, the INTRINSIC and EXTERNAL statements
> do not (apparently) go through the check_conflict routine.  I spent
> a few hours today trying to see how these statements work and simply
> haven't figured out how either is parsed with respect to setting
> the attributes.

I have had the same experience; I decided to fix that - see below:

> Well, it is obviously not done for us, or I won't have added the
> code to resolve.c :-)  I'll look at it some more tomorrow.  Time for
> some sleep.

Sorry, I was not trying to be sarcastic - just overstating the obvious!

How it works: (decl.c), for example

03375 match
03376 gfc_match_optional (void)
03377 {
03378 
03379   gfc_clear_attr (&current_attr);
03380   gfc_add_optional (&current_attr, NULL);
03381 
03382   return attr_decl ();
03383 }

line 3380 does nothing, following the previous gfc_clear_attr, that could
not be done with: current_attr.optional = 1;

The checks that are made do nothing because this is the only attribute set.

All the action happens in attr_decl () - this parses the rest of the 
statement.  Adding the check here fixes all these attribute statements and
reduces a the number of spurious calls to check_used, check_conflict
and check_done.

With the checks performed at the end of attr_decl1, your testcase produces:

 In file ext_int.f90:3

  external :: nint
                 1
Error: EXTERNAL attribute conflicts with INTRINSIC attribute at (1)

The patch is attached and regtests OK on Cygwin_NT.  I presume that it fixes
other PRs of the same kind but have not had time to look.

Best regards

Paul

Attachment: attr.diff
Description: attr.diff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]