marked as inline is not inlined

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
six1
Beiträge: 315
Registriert: Do 1. Jul 2010, 19:01

marked as inline is not inlined

Beitrag von six1 »

Hi,
in einem bestehenden Projekt Win32 ist folgende Zeile:

Code: Alles auswählen

unit unitMain;

{$mode objfpc} {$H+}

interface             

...
var
 s:string;
begin
   ...
   s:=floattostrf(ZQuery2.FieldByName('liter1').AsFloat,fffixed,6,2)+' l';
   ...
end;
Mit Lazarus 2.0.8 FPC 3.0.4 funktioniert alles wie erwartet. In s wäre dann z.B. '123.45 l'

Mit Lazarus 2.0.10 FPC 3.2.0 wird die Zeile mit einem Symbol markiert mit Hinweis:
Image1.png
Image1.png (3.47 KiB) 580 mal betrachtet

und s ist '123'

Kann mich jemand aufklären, woran das liegt und wie ich das Problem lösen kann?
Gruß, Michael

PascalDragon
Beiträge: 223
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: marked as inline is not inlined

Beitrag von PascalDragon »

six1 hat geschrieben:
Mi 11. Nov 2020, 09:52
Kann mich jemand aufklären, woran das liegt
FPC 3.2.0 gibt nun aus, wenn er eine Funktion nicht inlinen konnte, obwohl sie als inline markiert war. Ältere Versionen haben dann einfach nicht geinlined.
six1 hat geschrieben:
Mi 11. Nov 2020, 09:52
und wie ich das Problem lösen kann?
In dem speziellen Fall müsstest du mit {$warn 6058 off} die Notiz abschalten, da das Nicht-Inlinen des Operators daran liegt, dass der Operator intern eine implementation-Variable (der Variant Manager) verwendet.

Dies wurde in FPC 3.3.1 verbessert und da kommt die Notiz nicht mehr.

In anderen Fällen (vor allem bei eigenem Code innerhalb der gleichen Unit) kann es daran liegen, dass der Körper der Routine noch nicht geparst wurde (z.B. wenn du Routinen A und B (in der Reihenfolge) hast und in A die Routine B nutzt).
FPC Compiler Entwickler

sstvmaster
Beiträge: 415
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.0.12
CPU-Target: 32+64bit
Wohnort: Dresden

Re: marked as inline is not inlined

Beitrag von sstvmaster »

Hallo Michael,

bei mir kommt keine Meldung/Hinweis.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  s:string;
begin
  s:=floattostrf(123.4567,fffixed,6,2)+' l';
  ShowMessage(s);
end;
Win10 Lazarus 2.0.10 / fpc 3.2.0
Zuletzt geändert von sstvmaster am Mi 11. Nov 2020, 16:26, insgesamt 1-mal geändert.
Windows 10, Lazarus 2.0.12 + Lazarus Trunk
LG Maik

Benutzeravatar
six1
Beiträge: 315
Registriert: Do 1. Jul 2010, 19:01

Re: marked as inline is not inlined

Beitrag von six1 »

@PascalDragon
Vielen Dank! Ich denke, das bekomme ich geregelt ;-)

@sstvmaster
Ich war evtl. nicht konkret genug: Mein System ist WIN10 X86_64 und Crosscompile WIN32 X86
Gruß, Michael

Benutzeravatar
six1
Beiträge: 315
Registriert: Do 1. Jul 2010, 19:01

Re: marked as inline is not inlined

Beitrag von six1 »

@PascalDragon
Ich habe jetzt LAZ 2.0.11 mit FPC 3-3-1 installiert.
Damit läuft meine Software wieder. ..

Irgendwie ist das für mich so, dass LAZ 2-0-10 und fpc 3-2-0 da irgend etwas "falsch" behandelt.

Lazarus 2-0-11 hat noch einen "kleinen" Schönheitsfehler.
Nach dem Start kommt dies:
Image2.png
Image2.png (10.75 KiB) 527 mal betrachtet
Ich kann die Meldung wegklicken und Lazarus läuft danach unauffällig.
Gruß, Michael

PascalDragon
Beiträge: 223
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: marked as inline is not inlined

Beitrag von PascalDragon »

six1 hat geschrieben:
Mi 11. Nov 2020, 17:03
@PascalDragon
Ich habe jetzt LAZ 2.0.11 mit FPC 3-3-1 installiert.
Damit läuft meine Software wieder. ..
Was heißt hier „läuft ... wieder”? Die erwähnte Notiz sollte keinen Einfluss darauf haben, ob deine Anwendung richtig läuft oder nicht. Und das Erstellen wird dadurch auch nicht blockiert. Du müsstest also noch andere Probleme haben. In dem Fall wäre es sinnvoll zu schauen, ob diese in den folgenden Kombinationen ebenfalls auftreten:
  • Lazarus 2.0.10 mit FPC 3.3.1
  • Lazarus 2.0.11 mit FPC 3.2.0
  • Lazarus 2.0.10 mit FPC 3.2.1 (die Fixes Version von 3.2.0, welche die aktuelle Basis für das kommende 3.2.2 ist)
six1 hat geschrieben:
Mi 11. Nov 2020, 17:03
Irgendwie ist das für mich so, dass LAZ 2-0-10 und fpc 3-2-0 da irgend etwas "falsch" behandelt.
Nein, FPC 3.2.0 behandelt da nichts falsch. Er teilt dir nun eben auch mit, wenn er etwas nicht inlinen kann, was ältere Versionen einfach stillschweigend gemacht haben. Dadurch können wir als Compiler Entwickler nun leichter sehen, wo das Inlining noch verbessert werden muss. Eben der Usecase, der bei dir aufgetreten ist, ist einer, der dadurch verbessert wurde.
six1 hat geschrieben:
Mi 11. Nov 2020, 17:03
Lazarus 2-0-11 hat noch einen "kleinen" Schönheitsfehler.
Lazarus selbst nutzt die C++ Runtime nicht. Da ist also irgendein Package oder eine Dll, welche die C++ Runtime initialisieren möchte. Da müsstest du nachschauen was hier der Übeltäter ist.
FPC Compiler Entwickler

Benutzeravatar
six1
Beiträge: 315
Registriert: Do 1. Jul 2010, 19:01

Re: marked as inline is not inlined

Beitrag von six1 »

@PascalDragon
Beim Erstellen von Laz2.1 mit fpc 3.2.1 kommt ähnliche Fehlermeldung.
Mein System ist WIN10 64Bit.
Ich verwende fpcupdeluxe 32 Bit.
fpcupdeluxe.png
fpcupdeluxe.png (104.65 KiB) 226 mal betrachtet
Gruß, Michael

PascalDragon
Beiträge: 223
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: marked as inline is not inlined

Beitrag von PascalDragon »

six1 hat geschrieben:
Di 19. Jan 2021, 10:58
Ich verwende fpcupdeluxe 32 Bit.
Das solltest du dann beim Entwickler von fpcupdeluxe melden. Wie gesagt: Weder FPC noch Lazarus nutzen die C Runtime von Microsoft. Wenn ein Programm eine solche Meldung bringt, dann musst du dich auch an dessen Entwickler wenden.
FPC Compiler Entwickler

sstvmaster
Beiträge: 415
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.0.12
CPU-Target: 32+64bit
Wohnort: Dresden

Re: marked as inline is not inlined

Beitrag von sstvmaster »

@six1

Leider sieht man den Text hinter der Fehlermeldung nicht ganz. Aber ich vermute das der Fehler auf ein fehlerhafte/fehlende Visual C++ Runtime herkommt.

Entweder kommt die Meldung von Powershell oder WinInet wie im Bild noch zu erkennen.
rt_error.jpg
rt_error.jpg (44.75 KiB) 182 mal betrachtet


Oder kommt die Fehlermeldung gleich nach dem start von fpcupdeluxe?

[Edit]

Diese MS VC++ Redist pakete sind bei mir installiert.
msvc-resdist-installed.jpg
msvc-resdist-installed.jpg (86.66 KiB) 178 mal betrachtet
Windows 10, Lazarus 2.0.12 + Lazarus Trunk
LG Maik

Antworten