[fpc-devel] Wrong docs: not initialized global variables

Alexander Grotewohl alex at dcclost.com
Wed Apr 4 20:33:32 CEST 2018


https://www.freepascal.org/docs-html/ref/refse20.html#x50-680003.9


On 04/04/2018 01:32 PM, Ondrej Pokorny wrote:
> On 04.04.2018 18:53, Jonas Maebe wrote:
>> On 04/04/18 18:44, Ondrej Pokorny wrote:
>>> I want to stress that the compiler emits a warning on code that does 
>>> not have (and also cannot have) an error
>>
>> An error is wrong code behaviour. If you do not initialise a variable 
>> with the correct value, then you can have an error.
>
> No, no, no and again no. Do you try to convince me that I cannot rely 
> on well documented compiler behavior? Even Sven stated earlier in this 
> thread that the FPC docs are correct in case of managed variables: 
> "Managed types are an exception to this rule: Managed types are always 
> initialized: in general this means setting the reference count to 
> zero, or setting the pointer value of the type to Nil." and "It should 
> be stressed that initialized variables are initialized when they come 
> into scope" https://www.freepascal.org/docs-html/ref/refse24.html
>
> Again, the code
> procedure Test;
> var S: string; I: Integer;
> begin
>   for I := 0 to 1 do
>     S := S + '1';
>   Writeln(S);
> end;
>
> does not have an error, cannot have an error and the behavior is 
> guaranteed and well documented => no warning should be here.
>
> + Do you try to convince me that the code below can have an error and 
> should emit a warning as well because it does not initialize the FS 
> and FI fields?
>
> program Project1;
> type
>   TMyObject = class
>   private
>     FS: string;
>     FI: Integer;
>   public
>     property S: string read FS write FS;
>     property I: Integer read FI write FI;
>   end;
>
> begin
>   with TMyObject.Create do
>   begin
>     Writeln(S);
>     Writeln(I);
>     Free;
>   end;
> end.
>
> It's the same case - object fields are documented to be initialized. 
> You mean I should not rely on this feature and it is an error that I 
> did not initialize them with the correct values?
>
>> This correct value can be different from "empty string" or "nil". 
>
> If I want to have a different value from "empty string" or "nil" I 
> know I have to initialize it by myself. I don't need a warning for it.
>
>> For the same reason, we also warn about uninitialised global 
>> variables (if this can be detected without interprocedural analysis, 
>> i.e., if they are only used in the main program code; but that is 
>> merely due to a limitation of the analysis).
>
> Uninitialised global variables are the same case: the compiler should 
> not emit a warning here because again, it is well documented that they 
> are implicitely initialized (at least in the Object Pascal Language 
> Guide from Borland from 2002 it is documented).
>
> Ondrej
>
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20180404/cc71768a/attachment.html>


More information about the fpc-devel mailing list