public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "sgk at troutmask dot apl.washington.edu" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/46152] [F03] ALLOCATE with type-spec fails for intrinsic types
Date: Fri, 29 Oct 2010 21:51:00 -0000	[thread overview]
Message-ID: <20101029215100.exhEPSeQa7GoaClAMP_AXkZEq3x6Biq0V6XkpQ0OhFk@z> (raw)
In-Reply-To: <bug-46152-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #16 from Steve Kargl <sgk at troutmask dot apl.washington.edu> 2010-10-29 21:51:20 UTC ---
On Fri, Oct 29, 2010 at 02:51:33PM +0000, janus at gcc dot gnu.org wrote:
> > 
> >   program hmm
> >   doubleprecision, allocatable :: x
> >   allocate(doubleprecicion :: x)
> >   end program hmm 
> > 
> > saying 'doubleprecicion' is inaccessible derived type seems odd.
> > 
> > match_type_spec() now simply looks at 'tx' and asks if is a
> > derived type.  If yes, match_type_spec() returns MATCH_YES.  If no,
> > then 'tx' is compared against the intrinsic types.  'tx' clearly
> > is not an intrinsic to match_type_spec() returns MATCH_NO.
> 
> Agreed so far. So maybe one should add another error message there,i
> saying that there is an error in the type spec?!?

The code in gfc_match_allocate() checks for '::' only if
match_type_spec() return MATCH_YES.  On MATCH_NO or MATCH_ERROR,
then gfc_match_allocate() assumes the first argument is an
allocatable pointer or variable.

> Currently the line you commented out in allocate_derived_1 gives:
> 
> allocate_derived_1.f90:35.13:
> 
>  allocate(tx :: x(5))  ! { dg-error "is not an accessible derived type" }
>              1
> Fehler: Allocate-object at (1) is not a nonprocedure pointer or an allocatable
> variable
> 
> I think this error message is much more misleading than the previous one.

It looks like the locus pointer '1' is not handled correctly.
I've updated my patch to point at 'tx'

laptop:kargl[206] gfc4x -o z df.f90
df.f90:2.9:

allocate(tx :: x(5))
         1
Error: Allocate-object at (1) is not a nonprocedure pointer or an allocatable
variable

At this point, gfortran has never looked beyond 'tx', so 
it does not know the '::' is the next token.  

> > Now, match_type_spec() can never return a MATCH_ERROR
> > condition, which may mean the "is not an accessible derived type"
> > message may never triggered. Yes, I think it may be dead code.  
> 
> Not sure. Will check.
> 

I'll look at the patch again.  I think a less invasive
patch would be to replace gfc_match_symbol() in
match_derived_type_spec() with

  char name[GFC_MAX_SYMBOL_LEN + 1];

  if (gfc_match ("%n", name) != MATCH_YES)
    {
       gfc_current_locus = old_locus;
       return MATCH_NO;
    }

  gfc_find_symbol (name, NULL, 1, &derived);

Here, derived will be either NULL or point at a symbol
in the current name space, including parent name spaces.

The issue that really concerns me is that gfc_match_type_is()
and gfc_match_class_is() both call match_derived_type_spec()
directly.  I do not know the details of your OO work, and
simply don't want to break it.


  parent reply	other threads:[~2010-10-29 21:51 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-23 18:50 [Bug fortran/46152] New: " burnus at gcc dot gnu.org
2010-10-23 19:04 ` [Bug fortran/46152] " dominiq at lps dot ens.fr
2010-10-23 19:10 ` burnus at gcc dot gnu.org
2010-10-23 19:25 ` sgk at troutmask dot apl.washington.edu
2010-10-23 19:51 ` burnus at gcc dot gnu.org
2010-10-23 20:18 ` sgk at troutmask dot apl.washington.edu
2010-10-23 21:37 ` janus at gcc dot gnu.org
2010-10-24  7:01 ` burnus at gcc dot gnu.org
2010-10-25  0:25 ` sgk at troutmask dot apl.washington.edu
2010-10-25  0:34 ` sgk at troutmask dot apl.washington.edu
2010-10-25  0:48 ` sgk at troutmask dot apl.washington.edu
2010-10-25  4:33 ` sgk at troutmask dot apl.washington.edu
2010-10-26  4:21 ` sgk at troutmask dot apl.washington.edu
2010-10-26 19:44 ` burnus at gcc dot gnu.org
2010-10-26 21:02 ` sgk at troutmask dot apl.washington.edu
2010-10-29 14:51 ` [Bug fortran/46152] [F03] " janus at gcc dot gnu.org
2010-10-29 21:51 ` sgk at troutmask dot apl.washington.edu [this message]
2010-10-31  3:34 ` kargl at gcc dot gnu.org
2010-11-01 19:30 ` kargl at gcc dot gnu.org
2010-11-02 22:02 ` kargl at gcc dot gnu.org
2010-11-02 22:04 ` kargl at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101029215100.exhEPSeQa7GoaClAMP_AXkZEq3x6Biq0V6XkpQ0OhFk@z \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).