[fpc-pascal] SetLength warnings - request
Jonas Maebe
jonas at freepascal.org
Sat Dec 29 22:35:52 CET 2018
On 2018-12-29 22:00, Derek Edson wrote:
> Would it not be simpler to have the compiler initialize all dynamic
> array variables to nil, like for string variables, which should prevent
> the uninitialized warning/hint without requiring special treatment for
> handling the SetLength function.
>
> It does require that the compiler recognizes its own initialization of
> dynamic array variables.
1) Dynamic arrays are initialised with nil, but that is an
implementation detail (required by the fact that they are reference
counted: if they would contain random data, that would cause crashes)
2) Passing a reference-counted variable as a var-parameter without
explicitly initialising it first triggers a hint in all cases.
Suppressing this hint specifically for SetLength would require treating
it specially.
There is a hint for such parameters even though the compiler knows they
always contain a valid value, because valid in the sense of "won't crash
the program" is not the same as "this is what the programmer intended".
The only way for the programmer to indicate to the compiler what they
want is by writing code.
The hints about the fact that managed parameters have not been
explicitly initialised by the programmer are different from the hints
you get for other types. This means you can selectively disable these
hints in case you do not wish to be notified about the fact that the
program contains no explicit initialisation of these variables. See the
-vq and -vm command line parameters.
You don't need to typecast dynamic arrays to pointer to initialise them
with nil. Simply "arr:=nil;" works. Ideally, the compiler would remove
this extra initialisation if you add it before it got a different value,
but it does not yet do that.
Jonas
More information about the fpc-pascal
mailing list