Crash if trying to write a parameter or a constant in a Fortran application
Rob Latham
robl at mcs.anl.gov
Tue Jul 9 16:54:02 CDT 2013
On Tue, Jul 09, 2013 at 04:23:37PM -0500, Wei-keng Liao wrote:
> One problem is Fortran allows ones to define a parameter array.
> Such as
> integer, dimension(8192), parameter :: varp=0
>
> I am not aware of a way to tell a subroutine argument is
> parameter or not in Fortran or C. In the above case, segmentation
> fault will still occur if writing the entire 8192 elements, though
> I wonder if it is rare to see one using large parameter variables
> in Fortran.
>
> If we want to document this, we might want to generate an error
> code corresponding to it.
>
> One possible solution to forbidding parameter buffers is to declare
> the intent of I/O buffer as inout
> <type>, intent(inout) :: buf
> but it works only for F90.
I think that's a great solution. I hope Philippe Wautelet can let us
know if that is OK for him.
==rob
> Wei-keng
>
> On Jul 9, 2013, at 3:40 PM, Rob Latham wrote:
>
> > On Tue, Jul 09, 2013 at 11:17:15AM -0500, Wei-keng Liao wrote:
> >> NetCDF 3 and 4 pass the test, because they do internal caching. So
> >> byte-swap is done on the cache buffer and the memory contents of
> >> Fortran parameters are not touched.
> >
> > Ah, right, thank you for reminding me about the netcdf internal cache.
> >
> > I'm tempted to just document this in the release notes, unless there's
> > a reasonably small threshold: for example, "if number of items is less
> > than 1024, make a copy for byteswapping in case it's a parameter"
> >
> > ==rob
> >
> >> Wei-keng
> >>
> >> On Jul 9, 2013, at 10:14 AM, Rob Latham wrote:
> >>
> >>> On Tue, Jul 09, 2013 at 08:53:24AM -0500, Rob Latham wrote:
> >>>> Does serial netcdf exhibit this behavior?
> >>>
> >>> Here's my serial netcdf-f90 version of your test case, but it's buggy:
> >>> I am apparently trying to write to a variable that does not exist?
> >>> Our policy is to be as netcdf-like as possible, or have a good reason
> >>> not to be, and I'd like to know how serial netcdf handles the case of
> >>> byte swapping data passed to it in this un-modifiable parameter form.
> >>>
> >>> ==rob
> >>>
> >>> --
> >>> Rob Latham
> >>> Mathematics and Computer Science Division
> >>> Argonne National Lab, IL USA
> >>> <netcdf_parameter.f90>
> >>
> >
> > --
> > Rob Latham
> > Mathematics and Computer Science Division
> > Argonne National Lab, IL USA
>
--
Rob Latham
Mathematics and Computer Science Division
Argonne National Lab, IL USA
More information about the parallel-netcdf
mailing list