[fpc-pascal] "Not initialized" warnings in 3.2
Martin Schreiber
mse00000 at gmail.com
Mon Sep 24 18:35:09 CEST 2018
I don't see this mail in archive so I send it again:
Hi
MSEide+MSEgui must compile without warnings and notes with Free Pascal
default settings. In 3.2 there now are many new warnings because of
setlength().
"
procedure test();
var
s1: string;
ar1: array of integer;
begin
setlength(s1,10);
setlength(ar1,11);
end;
"
compiled with -O- or -O2 produces the warnings
"
main.pas(48,14) Warning: Local variable "s1" of a managed type does not
seem to be initialized
main.pas(49,15) Warning: Local variable "ar1" of a managed type does not
seem to be initialized
"
compiled with -O- produces the code
"
MAIN_$$_TEST:
.Lc1:
.Ll1:
leaq -120(%rsp),%rsp
.Lc3:
.Ll2:
movq $0,(%rsp)
movq $0,8(%rsp)
leaq 16(%rsp),%rdx
leaq 40(%rsp),%rsi
movl $1,%edi
call fpc_pushexceptaddr
movq %rax,%rdi
call fpc_setjmp
movslq %eax,%rdx
movq %rdx,104(%rsp)
testl %eax,%eax
jne .Lj6
.Ll3:
movq %rsp,%rdi
xorl %edx,%edx
movl $10,%esi
call fpc_ansistr_setlength
.Ll4:
movq $11,112(%rsp)
movq $RTTI_$MSETYPES_$$_INTEGERARTY,%rsi
leaq 112(%rsp),%rcx
leaq 8(%rsp),%rdi
movl $1,%edx
call fpc_dynarray_setlength
"
-O3 has no warnings but but doesn't work well for debugging and is not
the Free Pascal default.
"
procedure test();
var
s1: string = '';
ar1: array of integer = nil;
begin
setlength(s1,10);
setlength(ar1,11);
end;
"
with -O3 (or -O-) produces redundant code:
"
MAIN_$$_TEST:
.Lc1:
.Ll1:
leaq -120(%rsp),%rsp
.Lc3:
.Ll2:
movq $0,(%rsp)
movq $0,8(%rsp)
leaq 16(%rsp),%rdx
leaq 40(%rsp),%rsi
movl $1,%edi
call fpc_pushexceptaddr
movq %rax,%rdi
call fpc_setjmp
movslq %eax,%rdx
movq %rdx,104(%rsp)
testl %eax,%eax
jne .Lj6
.Ll3:
movq $RTTI_$MSETYPES_$$_INTEGERARTY,%rdx ----redundant
movq TC_$MAIN$_$TEST_$$_defaultar1,%rsi
leaq 8(%rsp),%rdi
call fpc_dynarray_assign
movq TC_$MAIN$_$TEST_$$_defaults1,%rsi
movq %rsp,%rdi
call fpc_ansistr_assign ----redundant
.Ll4:
movq %rsp,%rdi
xorl %edx,%edx
movl $10,%esi
call fpc_ansistr_setlength
.Ll5:
movq $11,112(%rsp)
movq $RTTI_$MSETYPES_$$_INTEGERARTY,%rsi
leaq 112(%rsp),%rcx
leaq 8(%rsp),%rdi
movl $1,%edx
call fpc_dynarray_setlength
"
I don't like to initialize the variables in user code anyway because it
misleadingly implies that the initial values of the variables will be used.
In order to suppress the unwanted messages I added
"
{$ifndef mse_allwarnings}
{$if fpc_fullversion >= 030100}
{$warn 5089 off}
{$warn 5090 off}
{$warn 5093 off}
{$warn 6058 off}
{$endif}
{$endif}
"
on top of the units but that does not work for compiling with -B. I was
not able to make a simple testcase, compiling MSEide with -B shows
the suppressed warnings. The code is here:
https://gitlab.com/mseide-msegui/mseide-msegui/tree/fpc_3_2
I do not dare to open a bug report with such a testcase.
Suggestions?
Thanks, Martin
More information about the fpc-pascal
mailing list