[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