Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2018-09

"Not initialized" warnings in 3.2

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Martin Schreiber

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

Reply by email