Thorsten Ohl wrote:
> Until today, I have used the following hack to declare PARAMETER
> arrays with DIMENSION(N), where N can be 0.
>
> module foo
> integer, dimension(0), parameter :: bar0 = reshape ((/ 0 /), (/ 0 /))
> integer, dimension(1), parameter :: bar1 = reshape ((/ 1, 0 /), (/ 1 /))
> end module foo
> This is done by an automatic code generator, where uniformly adding
> the sentinel 0 is more convenient than treating the special case.
>
> Today I have learned that Compaq has recently `fixed' their compiler
> (Compaq Fortran X5.3-1155) and that my users can't compile their code
> anymore. E.g.:
We would appreciate your reporting such problems to us first - we'd be glad
to give you our prompt opinion on such matters. For our UNIX compiler, you
may use [log in to unmask] for such reports.
My interpretation of this is that the behavior you note is a bug, which we
shall fix at the earliest opportunity. I have to say that the wording of
the standard isn't explicit, in my reading, about what happens if SOURCE has
more elements than are necessary to accomodate SHAPE, but I think that the
strong implication is that the excess elements are discarded. I also note
that this appears to be an issue with us for PARAMETERs only - if you use
such a RESHAPE elsewhere, even as an initialization expression for a
variable, it works as you expect.
Again, in the future, if you believe you have found an error in a vendor's
implementation, please contact the vendor first. We, and I know most other
vendors, are more than happy to receive and respond to such reports.
Steve Lionel
Compaq Fortran Engineering
http://www.compaq.com/fortran
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|