• Welcome to Vampyre Imaging Library Forum. Please login or sign up.
 

Internal Error 20060521 with latest Lazarus build

Started by eny, 23 July 2010, 23:18:44

Previous topic - Next topic

eny

VIL 264; lazarus daily snapshot 26788 (July 23rd) with FPC 2.4.3 on WinXP SP3.
When adding some units to the uses list (Imaging, ImagingTypes, ImagingClasses, ImagingCanvases) an internal error is raised on line 705 of ImagingPSD.

Galfar

Report internal compiler error to FPC bug tracker please, there's not much I can do about this.
Or could you try some other FPC versions too?

eny

I've found a surprisinlgy simple workaround for this problem.
It seems the compiler is confused by the TLongWordRec usage in SwapEndianLongWord (ImagingUtility.pas) together with a call to this function with a pure constant value parameter:
      LongVal := SwapEndianLongWord(16);               // Extra data size (4 (mask size) + 4 (ranges size) + 8 (name))

It's perfectly good syntax, but the compiler gets confused and raises an internal error.

I've found 2 different ways of implementing a quick fix that both work (as far as I can see):
1. Create a simple variant record type and use that as a typecast instead of TLongWordRec.
TSimpleLWRec = packed record
  B0, B1, B2, B3: byte;
end;
...
  // In SwapEndianLongWord:
  TSimpleLWRec(Result).B0 = TSimpleLWRec(Value).B3;
  TSimpleLWRec(Result).B1 = TSimpleLWRec(Value).B2;
  //etc...


2. Cheat on the compiler by not passing '16' as an argument, but use a local variable instead:
      LongVal := 16;
      LongVal := SwapEndianLongWord(LongVal);               // Extra data size (4 (mask size) + 4 (ranges size) + 8 (name))

LongVal is already there and the assignment introduces little overhead.

Galfar

Thanks for the tip for avoiding internal error.
Have you reported it to FPC bug tracker?

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Name:
Email:

Shortcuts: ALT+S save/post or ALT+P preview

SMF spam blocked by CleanTalk