marked as inline is not inlined

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
six1
Beiträge: 782
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) 2596 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: 825
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: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
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.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Benutzeravatar
six1
Beiträge: 782
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: 782
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) 2543 mal betrachtet
Ich kann die Meldung wegklicken und Lazarus läuft danach unauffällig.
Gruß, Michael

PascalDragon
Beiträge: 825
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: 782
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) 2242 mal betrachtet
Gruß, Michael

PascalDragon
Beiträge: 825
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: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
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) 2198 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) 2194 mal betrachtet
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Re: marked as inline is not inlined

Beitrag von alfware17 »

Hallo, da ich dasselbe Problem habe, hatte ich hier zwar gelesen, mich aber gewundert? Es gibt schon über zwei Jahre einen FPC 3.3? Wie kann ich den ausprobieren? (ggf. nur batch, ohne Lazarus). Ich finde den nirgends zum Download.

In meinem Thread hatte ich auch geschrieben, dass das {$warn 6058 off} seltsamerweise nicht immer wirkt. Warum?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: marked as inline is not inlined

Beitrag von af0815 »

alfware17 hat geschrieben:
So 25. Jun 2023, 21:00
Hallo, da ich dasselbe Problem habe, hatte ich hier zwar gelesen, mich aber gewundert? Es gibt schon über zwei Jahre einen FPC 3.3? Wie kann ich den ausprobieren? (ggf. nur batch, ohne Lazarus). Ich finde den nirgends zum Download.

In meinem Thread hatte ich auch geschrieben, dass das {$warn 6058 off} seltsamerweise nicht immer wirkt. Warum?
Wenn du schon in einem alten Thread postes, welches Problem ? Es geht hier im Thread um mehrere Probleme.

Wenn es das mit dem inline ist, so ist das kein Problem, da es ein bekanntes "warnig" ist. Das ausblenden geht am besten wenn man nach dem kompilieren (wo es auftritt) mit rechts auf das Warning klickt und dort dies Anweisung zum deaktivieren ausführen lässt (Hide with Projectoption -vm6058) . Damit wird in den Projektoptionen die Anzeige abgeschalten (Seite Compilermessages)

Den FPC 3.3.x solltest du dir selbst bauen, nur dann muss auch der Lazarus dazu passen. Und du kannst dich auf eventuelle Probleme beim Compilieren einstellen, weil nicht alles ist zu 100% kompatibel bzw. sind manchmal Abstimmung Probleme zwischen Lazarus, seinem Paketen und dem FPC möglich. Wie im Thread schon erwähnt, kann man für das den fpcupdeluxe sehr gut verwenden, das dessen Installation immer komplett unabhängig ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

alfware17
Beiträge: 134
Registriert: Di 14. Dez 2010, 23:27

Re: marked as inline is not inlined

Beitrag von alfware17 »

Ja das Hint war mein Problem... Wie ich das Hint 6058 in der Lazarus IDE ausblende, habe ich gefunden - mir ging es aber um den Batch FPC und hier speziell um den Unterschied, daß der 32bit FPC das {$warn 6058 off}nicht immer akzeptiert. Egal.

Aber interessehalber: wie genau baue ich mir einen 3.3x FPC? Ich finde hier im Forum keine Informationen oder Links zu den Sourcen dazu?

PascalDragon
Beiträge: 825
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 »

alfware17 hat geschrieben:
Mo 26. Jun 2023, 10:14
Aber interessehalber: wie genau baue ich mir einen 3.3x FPC? Ich finde hier im Forum keine Informationen oder Links zu den Sourcen dazu?
Siehe hier.
FPC Compiler Entwickler

Antworten