Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Compiler. Optimierung EIN => F2084 Interner Fehler: C1907 (https://www.delphipraxis.net/202835-compiler-optimierung-ein-%3D-f2084-interner-fehler-c1907.html)

Michael II 12. Dez 2019 16:42

Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Hallo und guten Abend...

Wenn ich bei meinem Projekt unter "Delphi Compiler > Compilieren" "Optimierung" einschalte, dann kann ich mein Projekt nicht mehr compilieren: F2084 Interner Fehler: C1907. - Nach dem Abbruch zeigt der Cursor auf ein end; einer Prozedur.

Wenn ich die Optimierung ausschalte, klappt es wieder.

Embarcadero schreibt dazu:
http://docwiki.embarcadero.com/RADSt...s%25d_(Delphi)


Hat jemand weitere Tipps?

Der schöne Günther 12. Dez 2019 16:49

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Projekt bereinigen und/oder Delphi neustarten.

Interne Compiler-Fehler habe ich im Schnitt zehn Stück pro Tag, IDE neustarten oder Projekt bereinigen hat bislang immer geholfen.

Michael II 13. Dez 2019 08:44

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Hallo schöner Günther

besten Dank für deine Tipps. Weder Bereinigung, Neustart von Windows und Delphi lösen das Problem.

Ich habe die Zeile isoliert, welche den Fehler auslöst:

Delphi-Quellcode:
    hbit.Canvas.pen.color := Winapi.Windows.RGB(hh*25, hh*25, hh*25); // ERR
Hingegen funktioniert zum Beispiel:
Delphi-Quellcode:
    hbit.Canvas.pen.color := Winapi.Windows.RGB(hh*20, hh*40, 20); // OK
oder es klappt auch wenn ich in der Fehlerzeile zwei der drei RGB Werte durch Konstanten ersetze:
Delphi-Quellcode:
    hbit.Canvas.pen.color := Winapi.Windows.RGB(25, hh*25, 25);

Das Projekt besteht aus vielen Forms/Units.
Es ist dabei egal in welche Unit und wo in der Unit ich diese Test-procedure reinkopiere:

Delphi-Quellcode:
procedure dummydummy;
var hh : integer;
    hbit : VCL.Graphics.TBitMap;
begin
    hbit := VCL.Graphics.TBitmap.Create;
  try
    hh := 1;
    // hbit.Canvas.pen.color := Winapi.Windows.RGB(hh*20, hh*40, 20); // OK
    hbit.Canvas.pen.color := Winapi.Windows.RGB(hh*25, hh*25, 25); // ERR
  finally
    hbit.free;
  end;
end;
Das Verhalten ist immer gleich.

Rolf Frei 13. Dez 2019 13:24

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Ja, das kann ich auch in 10.2 reproduzieren. Einen Weg das zu umgehen gibt es, wenn du nicht direkt an Canvas.pen.color zuweist, sondern den Umweg über eine Variable machst:
Delphi-Quellcode:
procedure dummydummy;
var hh : Integer;
    RGBColor: Cardinal;
    hbit : VCL.Graphics.TBitMap;
begin
    hbit := VCL.Graphics.TBitmap.Create;
  try
    hh := 1;
    RGBColor := Winapi.Windows.RGB(hh*25, hh*25, 25); // ERR
    hbit.Canvas.pen.color := RGBColor;
  finally
    hbit.free;
  end;
end;
Dieser Code kompiliert fehlerfrei. Ich denke das ist ein Fall für einen Bugreport.

Uwe Raabe 13. Dez 2019 13:55

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Das könnte damit zusammenhängen, daß RGB zum Einen
Delphi-Quellcode:
inline
ist und zum Anderen ein COLORREF (=DWORD) zurückliefert, von
Delphi-Quellcode:
TPen.Color
aber ein
Delphi-Quellcode:
TColor
(-$7FFFFFFF-1..$7FFFFFFF) erwartet wird, was ein vorzeichenbehafteter Typ ist.

Das mit dem Bugreport ist eine gute Idee. Insbesondere da der Testcase relativ einfach ist.

Michael II 14. Dez 2019 08:43

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Besten Dank für die Tests mit 10.2 und für den Hinweis zu TColor, RGB.

Mit "Projektoptionen > Compiler > MSI Build extern...=TRUE" funktioniert's übrigens in allen Fällen.

Ich erwarte, dass der Compiler bei Zuweisung RGB -> TColor höchstens eine Meldung ausgibt.

Konsequent ist anders: Beim Code unten läuft der Compiler (Optimierung=TRUE) nicht in einen F2084.

Delphi-Quellcode:
procedure TForm169.FormCreate(Sender: TObject);
var hh : integer;
begin
  hh := 1;
  color := RGB( hh*25, hh*25, hh*25 );
end;

Uwe Raabe 14. Dez 2019 10:26

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Zitat:

Zitat von Michael II (Beitrag 1453439)
Konsequent ist anders: Beim Code unten läuft der Compiler (Optimierung=TRUE) nicht in einen F2084.

Ich bezweifle, daß der Fehler mit Absicht eingebaut wurde. In sofern ist Konsequenz in diesem Zusammenhang auch nicht zu erwarten.

Das zeigt aber auch wieder mal, wie wichtig konkrete, reproduzierbare Testfälle sind.

Rolf Frei 17. Dez 2019 10:56

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Zitat:

Zitat von Michael II (Beitrag 1453439)
Ich erwarte, dass der Compiler bei Zuweisung RGB -> TColor höchstens eine Meldung ausgibt.

Wie von Uwe schon geschrieben, ist das keine Absicht, dass das nicht geht, sondern ein Fehler im Compiler. Dein originaler Code ist absolut korrekt und muss so ohne Fehler laufen. Das führt hier aber für den Compiler in einen unerwarteten Zustand (vermutlich durch das inline von RGB) und führt daher zu eine internen Fehler des Compilers.

Du solltest dafür unbedingt einen QC Bug-Report erstellen.

Stevie 17. Dez 2019 14:14

AW: Compiler. Optimierung EIN => F2084 Interner Fehler: C1907
 
Ich war mal so frei: https://quality.embarcadero.com/browse/RSP-27251


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz