Print

Print


> Date: Mon, 29 Mar 1999 08:01:27 -0800 (PST)
> From: Richard Maine <[log in to unmask]>
> 
> Klaus Ramstoeck writes:
>  > Agreed. And I am aware of at least one f90 compiler which works nicely for me. 
>  > Alas not NAG, it choked on s.th. like
>  >   select case
>  >   case default
>  >     print *, 'fails to compile'
>  >   end select
>  > as I compiled my program elsewhere (reported earlier here).
>  > There were other problems as well which I however failed to nail down like this 
>  > one.
> 
> Two things.
> 
> 1. If you have a nice short sample like that, I'd suggest sending a
>    bug report.  I've found NAG to be quite good about responding to
>    well-written bug reports with concise samples.
> 
> 2. But the above sample is not legal Fortran.  Even if you can get
>    some compilers to accept it, I advise against doing something
>    so clearly non-standard that has so little obvious need for the
>    non-standard feature.  I'll do non-standard things when it
>    fills a real need, but I don't see this particular syntax as
>    falling in that category.
> 
>    Yes, I can imagine some reasons why one might want a SELECT
>    statement that has nothing except for a CASE DEFAULT; for one
>    example, one might be planning to add some other cases at some
>    later time.
> 
>    But this isn't a legal syntax for doing so.  The parens and
>    select-expression on the SELECT CASE statement are not optional;
>    even though they don't do much useful in this degenerate case, the
>    syntax requires them.  The minimum change that occurs to me is to
>    make your select statement
> 
>        select case (0)
> 
>    With that change, the copy of the NAG compiler that I tried
>    (v2.2(303) for Sun Solaris 2 with gcc) worked fine.  If you have
>    a version that doesn't work with the standard-conforming syntax,
>    then send a bug report to NAG.
> 
>    I could perhaps see merit to making the parens and the
>    select-expression optional in this degenerate case where they don't
>    really do anything useful.  But since that isn't how the standard
>    reads, I'd advise against coding that way.
> 
> -- 
> Richard Maine
> [log in to unmask]

Richard,

One place I have used SELECT constructs with nothing between the
SELECT and END SELECT statements, or just a default clause, is in code
that was automatically generated by another program.  In any case, earlier
versions of the NAG compiler had a bug as follows.  If the case-expr in
the SELECT CASE statement was of type character, and the block was either
empty or contained only a CASE DEFAULT, the compiler would generate
incorrect C code.  There was no problem for integer or logical case-exprs
because those constructs were translated to C "switch" blocks, whereas
for characters, the C code generated was if--else if--else.  These bugs
have been fixed in the latest versions.

Ron


Ronald Sverdlove               Computing Systems Research
[log in to unmask]                 Sarnoff Corporation
Tel. 609-734-2517              CN 5300
FAX  609-734-2662              Princeton, NJ 08543-5300


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%