On 03.07.2018 22:08, Florian Klämpfl wrote:
Am 03.07.2018 um 21:30 schrieb Ondrej Pokorny:
On 03.07.2018 20:54, Florian Klämpfl wrote:
program Project1;
type
TMyArray = array[0..10] of Integer;
procedure Init2(var A: TMyArray);
begin
A[2] := 1;
end;
var
A: TMyArray;
begin
Init2(A);
end.
should not emit the warning because A is not being read in Init2.
(please note it throws only a hint in this case as A *is* initialized
as it is a global variable).
FPC has no global data flow analysis (and I do not plan to do so yet),
so this is warning is currently far out of reach.
Doing it for SetLength/FillChar would be a good start.
IMPORTANT: the compiler knows that SetLength and FillChar don't
read/use the data so no warning is appropriate there.
SetLength does somehow :), as the examples showed.
Not really. It keeps the "read/used" data within the variable - the
possibly uninitialized data is not written or used outside the variable
itself.
What you achieved with SetLength and FillChar emitting a warning is
that you made the compiler more stupid instead of making it more clever.
The compiler has not to be clever, it has to follow rules. And the
rules which need to be followed is the meaning of the var parameter.
It means: data in/data out.
It's hard to argue like this with all the different hints/warnings/notes
being emitted on the notification side and different optimizations being
done on the compiler side. To me it looks more like this: "the compiler
may be clever only when we want it to be".
---
Probably I am the only one who thinks that the code below is ridiculous...
procedure TExternalAssemblerOutputFile.AsmWriteFiltered(p: pchar;
len: longint);
var
s: ansistring;
begin
MaybeAddLinePrefix;
s:=''; // <<< ????
setlength(s,len);
move(p^,s[1],len);
AsmWriteAnsiStringUnfiltered(decorator.LineFilter(s));
end;
---
I have split feelings: I really like to get the warning/hint at places
where it makes sense so I don't want to disable it globally. But the
amount of false positives increased significantly :/
Ondrej
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel