"Not initialized" warnings in 3.2

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

"Not initialized" warnings in 3.2

Martin Schreiber-2
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
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal