View Issue Details

IDProjectCategoryView StatusLast Update
0036372FPCCompilerpublic2020-01-20 23:51
ReporterCyraxAssigned ToJonas Maebe 
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
PlatformLinux x86_64OSArchOS Version3.17.4-1
Product Version3.3.1Product Buildr43596 
Target VersionFixed in Version3.3.1 
Summary0036372: Compiler crashes on "EAccessViolation: Access violation" exception when rebuilding Lazarus IDE with certain packages installed
DescriptionI'm running Lazarus trunk and FPC trunk under i386-linux Arch Linux LXC container.

The package to be causing problems is lclextensions, specifically in components/lclextensions/include/generic/independentfunctions.inc source file.
See Additional Information field for more info.
Additional Information
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(16,3) Warning: Expectloc is not set in firstpass: blockn
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -4
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -4
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -8
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -8
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -12
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -12
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -16
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -16
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -20
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -20
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -24
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -24
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -28
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type persistent requested, allocated at offset -28
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -36
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 8 type persistent requested, allocated at offset -36
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -44
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 8 type persistent requested, allocated at offset -44
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(8,27) Note: tgobj: (AllocTemp) lasttemp set to -52
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(8,27) Note: tgobj: (AllocTemp) temp of size 8 type persistent requested, allocated at offset -52
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(8,3) Note: tgobj: (FreeTemp) freeing of temp at pos -52 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(9,25) Note: tgobj: (AllocTemp) temp of size 8 type persistent requested, allocated at offset -52
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(9,3) Note: tgobj: (FreeTemp) freeing of temp at pos -52 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(10,15) Note: tgobj: (FreeTemp) freeing of temp at pos -4 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(10,15) Note: tgobj: (Freetemp) temp at pos -4 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(11,5) Note: tgobj: (FreeTemp) freeing of temp at pos -4 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(11,5) Note: tgobj: (Freetemp) temp at pos -4 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(11,5) Note: tgobj: (FreeTemp) freeing of temp at pos -36 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(11,5) Note: tgobj: (Freetemp) temp at pos -36 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(12,13) Note: tgobj: (FreeTemp) freeing of temp at pos -8 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(12,13) Note: tgobj: (Freetemp) temp at pos -8 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(13,5) Note: tgobj: (FreeTemp) freeing of temp at pos -8 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(13,5) Note: tgobj: (Freetemp) temp at pos -8 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(13,5) Note: tgobj: (FreeTemp) freeing of temp at pos -44 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(13,5) Note: tgobj: (Freetemp) temp at pos -44 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(14,14) Note: tgobj: (FreeTemp) freeing of temp at pos -36 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(14,14) Note: tgobj: (Freetemp) temp at pos -36 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(14,14) Note: tgobj: (FreeTemp) freeing of temp at pos -44 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(14,14) Note: tgobj: (Freetemp) temp at pos -44 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(15,14) Note: tgobj: (FreeTemp) freeing of temp at pos -36 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(15,14) Note: tgobj: (Freetemp) temp at pos -36 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(15,14) Note: tgobj: (FreeTemp) freeing of temp at pos -44 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(15,14) Note: tgobj: (Freetemp) temp at pos -44 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(16,3) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(16,3) Note: tgobj: (Freetemp) temp at pos -20 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(18,60) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(18,60) Note: tgobj: (Freetemp) temp at pos -20 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(18,39) Note: tgobj: (FreeTemp) freeing of temp at pos -24 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(18,39) Note: tgobj: (Freetemp) temp at pos -24 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(18,24) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(18,24) Note: tgobj: (Freetemp) temp at pos -20 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(19,60) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(19,60) Note: tgobj: (Freetemp) temp at pos -20 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(19,39) Note: tgobj: (FreeTemp) freeing of temp at pos -28 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(19,39) Note: tgobj: (Freetemp) temp at pos -28 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(19,24) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(19,24) Note: tgobj: (Freetemp) temp at pos -20 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(16,3) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(16,3) Note: tgobj: (Freetemp) temp at pos -20 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: tgobj: (FreeTemp) freeing of temp at pos -28 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: tgobj: (Freetemp) temp at pos -28 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: tgobj: (FreeTemp) freeing of temp at pos -24 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: tgobj: (Freetemp) temp at pos -24 has different type (persistent), not releasing
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: Location (LOC_REG) not equal to expectloc (LOC_CREG): temprefn
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: Location (LOC_REG) not equal to expectloc (LOC_CREG): blockn
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(21,39) Note: Location (LOC_REG) not equal to expectloc (LOC_CREG): typeconvn
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -20 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -24 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -28 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -36 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -44 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -4 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -8 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -12 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -2147483648 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -16 requested
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) lasttemp set to -56
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(7,1) Note: tgobj: (AllocTemp) temp of size 4 type noreuse requested, allocated at offset -56
/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(22,1) Note: tgobj: (FreeTemp) freeing of temp at pos -56 requested
An unhandled exception occurred at $082AB859:
EAccessViolation: Access violation
  $082AB859  TAOPTOBJ__STRIPDEADLABELS,  line 1683 of aoptobj.pas
  $082ABB46  TAOPTOBJ__OPTIMIZECONDITIONALJUMP,  line 1928 of aoptobj.pas
  $082AC09A  TAOPTOBJ__DOJUMPOPTIMIZATIONS,  line 2198 of aoptobj.pas
  $082AC5C6  TAOPTOBJ__PEEPHOLEOPTPASS1,  line 2426 of aoptobj.pas
  $0828376D  TASMOPTIMIZER__OPTIMIZE,  line 285 of aopt.pas
  $08283BAD  OPTIMIZE,  line 391 of aopt.pas
  $081CB351  TCGPROCINFO__GENERATE_CODE,  line 1965 of psub.pas
  $081C9C93  TCGPROCINFO__GENERATE_CODE_TREE,  line 1310 of psub.pas
  $081CC0F6  READ_PROC_BODY,  line 2337 of psub.pas
  $081CC6DD  READ_PROC,  line 2540 of psub.pas
  $081CD064  READ_DECLARATIONS,  line 2770 of psub.pas
  $081C6943  BLOCK,  line 368 of psub.pas
  $081CBB44  TCGPROCINFO__PARSE_BODY,  line 2163 of psub.pas
  $082D0329  PROC_UNIT,  line 1097 of pmodules.pas
  $081B1032  COMPILE,  line 391 of parser.pas
  $081A239E  TPPUMODULE__LOADPPU,  line 2187 of fppu.pas
  $082CE932  LOADUNITS,  line 518 of pmodules.pas

/mnt/shares/ohjelmointi2/lazarus/i386/trunk/1.9.0/binary/trunk/components/lclextensions/./include/gtk2/../generic/independentfunctions.inc(10,15) Error: (1026) Compilation raised exception internally
Fatal: (1018) Compilation aborted
Error: /mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk/bin/i386-linux/ppc386 returned an error exitcode
TagsNo tags attached.
Fixed in Revision43843
FPCOldBugId
FPCTarget-
Attached Files
  • project1.zip (770 bytes)
  • fix-compiler.diff (1,160 bytes)
    diff --git a/compiler/aoptbase.pas b/compiler/aoptbase.pas
    index 64fb5c3e0c..97f2bf7520 100644
    --- a/compiler/aoptbase.pas
    +++ b/compiler/aoptbase.pas
    @@ -265,6 +265,7 @@ unit aoptbase;
     
       class function TAOptBase.SkipEntryExitMarker(current: tai; out next: tai): boolean;
         begin
    +      next:=nil;
           result:=true;
           if current.typ<>ait_marker then
             exit;
    diff --git a/compiler/aoptobj.pas b/compiler/aoptobj.pas
    index 65b5f53dbf..2553a5226b 100644
    --- a/compiler/aoptobj.pas
    +++ b/compiler/aoptobj.pas
    @@ -1691,7 +1691,7 @@ Unit AoptObj;
             NextValid := hp;
     
             { Stop if hp is an instruction, for example }
    -        while (hp1 <> BlockEnd) and (hp1.typ in [ait_label,ait_align]) do
    +        while Assigned(hp1) and (hp1 <> BlockEnd) and (hp1.typ in [ait_label,ait_align]) do
               begin
                 case hp1.typ of
                   ait_label:
    @@ -2166,6 +2166,8 @@ Unit AoptObj;
             ThisLabel: TAsmLabel;
             ThisPassResult: Boolean;
           begin
    +        hp1 := NIL;
    +        hp2 := NIL;
             Result := False;
             if (p.typ <> ait_instruction) or not IsJumpToLabel(taicpu(p)) then
               Exit;
    
    fix-compiler.diff (1,160 bytes)
  • project2.zip (1,296 bytes)
  • SkipEntryExitMarker-fix.patch (591 bytes)
    Index: compiler/aoptbase.pas
    ===================================================================
    --- compiler/aoptbase.pas	(revision 43826)
    +++ compiler/aoptbase.pas	(working copy)
    @@ -266,9 +266,9 @@
       class function TAOptBase.SkipEntryExitMarker(current: tai; out next: tai): boolean;
         begin
           result:=true;
    +      next:=current;
           if current.typ<>ait_marker then
             exit;
    -      next:=current;
           while GetNextInstruction(next,next) do
             begin
               if (next.typ<>ait_marker) or not(tai_marker(next).Kind in [mark_Position,mark_BlockStart]) then
    

Activities

Cyrax

2019-11-28 00:04

reporter   ~0119530

Attached test project which demonstrates this bug.

project1.zip (770 bytes)

Cyrax

2019-11-28 00:09

reporter   ~0119531

The test project needs to be built with these commands :
-MObjFPC
-Scghi
-O1
-g
-gl
-l
-vewnhibq
-Filib/i386-linux
-Fu.
-FUlib/i386-linux
-FE.
-oproject1


The first level optimization switch needs to be active (-O1)

J. Gareth Moreton

2019-11-29 01:22

developer   ~0119542

Does this patch fix the issue? (Strictly speaking, hp1 should never become nil unless BlockEnd is also nil, so this might be indictive of a phantom bug elsewhere)

Cyrax

2019-12-11 20:46

reporter   ~0119767

Unfortunately your patch doesn't fix it.

An unhandled exception occurred at $082ABB41:
EAccessViolation: Access violation
  $082ABB41  TAOPTOBJ__STRIPDEADLABELS,  line 1694 of aoptobj.pas
  $082ABE06  TAOPTOBJ__OPTIMIZECONDITIONALJUMP,  line 1919 of aoptobj.pas
  $082AC412  TAOPTOBJ__DOJUMPOPTIMIZATIONS,  line 2212 of aoptobj.pas
  $082AC946  TAOPTOBJ__PEEPHOLEOPTPASS1,  line 2440 of aoptobj.pas
  $08283A7D  TASMOPTIMIZER__OPTIMIZE,  line 285 of aopt.pas
  $08283EBD  OPTIMIZE,  line 391 of aopt.pas
  $081CB391  TCGPROCINFO__GENERATE_CODE,  line 1965 of psub.pas
  $082D3D0F  PROC_PROGRAM,  line 2285 of pmodules.pas
  $081B10CB  COMPILE,  line 409 of parser.pas
  $08082BF3  COMPILE,  line 278 of compiler.pas
  $0804948F  main,  line 278 of pp.pas
  $F7D33F29


I'm building FPC trunk with this command:
make clean all install OS_TARGET=linux CPU_TARGET=i386 OPT="-gw2 -godwarfsets -godwarfmethodclassprefix -gl -O- -Xs- -Si- -vbq -Sew- -XX- -CX- -dEXTDEBUG -vh- -vn- -vw- -dDEBUG_NODE_XML -Cit -gt -gv -Cg  -Fl/lib -Fl/usr/lib -Fl/usr/lib/gcc/i686-pc-linux-gnu/9.2.0 -dTEST_WIN32_SEH" FPC=fpc REVSTR=43672 IDE=1 NOWPOCYCLE=1 ALLOW_WARNINGS=1 LINKSMART=0 CREATESMART=0 INSTALL_PREFIX="/mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk"

Cyrax

2019-12-11 21:17

reporter   ~0119770

Call stack:
#0 TAOPTOBJ__STRIPDEADLABELS(0xf7b87840, 0x55555555, 0x55555555) at aoptobj.pas:1694
0000001 TAOPTOBJ__OPTIMIZECONDITIONALJUMP(0xf7b87840, 0xf7b4c330, 0xf7b87480, 0x55555555, true) at aoptobj.pas:1919
0000002 TAOPTOBJ__DOJUMPOPTIMIZATIONS(0xf7b87840, 0xf7b87480, true) at aoptobj.pas:2212
0000003 TAOPTOBJ__PEEPHOLEOPTPASS1(0xf7b87840) at aoptobj.pas:2440
0000004 TASMOPTIMIZER__OPTIMIZE(0xf7b87840) at aopt.pas:285
0000005 OPTIMIZE(0xf7b5c900) at aopt.pas:391
0000006 TCGPROCINFO__GENERATE_CODE(0xf7b42e60) at psub.pas:1965
0000007 PROC_PROGRAM(false) at pmodules.pas:2285
0000008 COMPILE('/mnt/shares/ohjelmointi/3'...) at parser.pas:409
0000009 COMPILE(0x0) at compiler.pas:278
0000010 main at pp.pas:278

Cyrax

2019-12-11 21:32

reporter   ~0119771

Attached patch that may fix this bug.

fix-compiler.diff (1,160 bytes)
diff --git a/compiler/aoptbase.pas b/compiler/aoptbase.pas
index 64fb5c3e0c..97f2bf7520 100644
--- a/compiler/aoptbase.pas
+++ b/compiler/aoptbase.pas
@@ -265,6 +265,7 @@ unit aoptbase;
 
   class function TAOptBase.SkipEntryExitMarker(current: tai; out next: tai): boolean;
     begin
+      next:=nil;
       result:=true;
       if current.typ<>ait_marker then
         exit;
diff --git a/compiler/aoptobj.pas b/compiler/aoptobj.pas
index 65b5f53dbf..2553a5226b 100644
--- a/compiler/aoptobj.pas
+++ b/compiler/aoptobj.pas
@@ -1691,7 +1691,7 @@ Unit AoptObj;
         NextValid := hp;
 
         { Stop if hp is an instruction, for example }
-        while (hp1 <> BlockEnd) and (hp1.typ in [ait_label,ait_align]) do
+        while Assigned(hp1) and (hp1 <> BlockEnd) and (hp1.typ in [ait_label,ait_align]) do
           begin
             case hp1.typ of
               ait_label:
@@ -2166,6 +2166,8 @@ Unit AoptObj;
         ThisLabel: TAsmLabel;
         ThisPassResult: Boolean;
       begin
+        hp1 := NIL;
+        hp2 := NIL;
         Result := False;
         if (p.typ <> ait_instruction) or not IsJumpToLabel(taicpu(p)) then
           Exit;
fix-compiler.diff (1,160 bytes)

J. Gareth Moreton

2019-12-11 23:39

developer   ~0119777

Is it seriously as simple as an uninitialised variable?! This I'll have to check out!

J. Gareth Moreton

2019-12-13 13:28

developer   ~0119816

Last edited: 2019-12-13 13:36

View 2 revisions

On my 32-bit Ubuntu virtual machine, I haven't yet been able to reproduce the issue. Lazarus builds fine for me no matter what valid configuration I use for FPC. In my example:

FPC: sudo make distclean all install OPT="-gw2 -godwarfsets -godwarfmethodclassprefix -gl -O- -Xs- -Si- -vbq -Sew- -XX- -CX- -vh- -vn- -vw- -Cit -gt -gv -Cg -Fl/usr/lib/gcc/i686-linux-gnu/5"

Lazarus: sudo make all install PP=/usr/local/bin/fpc CPU_TARGET=i386 OS_TARGET=linux INSTALL_PREFIX=/usr/local/

Note that specifying "-dEXTDEBUG" caused my build to fail due to a warning raised with one of the nodes ("-Sew-" doesn't stop the warnings from failing the build).

Is there something more specific in the FPC build that is definitely causing a failure with Lazarus? (Sample project builds fine too)

Cyrax

2019-12-13 17:05

reporter   ~0119820

Did you make sure that you have at least optimization level 1 enabled at the test project options?

J. Gareth Moreton

2019-12-13 18:46

developer   ~0119821

Last edited: 2019-12-13 18:46

View 2 revisions

I have, and other than a warning regarding an uninitialised variable, it refuses to break.

Cyrax

2019-12-13 21:02

reporter   ~0119824

Which version of binutils do you have installed? And GCC version?
I have GCC 9.2.0 and binutils 2.33.1.

J. Gareth Moreton

2019-12-14 17:47

developer   ~0119847

I am using older tools, it seems... GCC 5.4.0 and binutils 2.26.1

Cyrax

2019-12-29 21:59

reporter   ~0120135

Last edited: 2019-12-29 22:00

View 2 revisions

FPC trunk 3.3.1 i386-linux r43808

Hint: (11030) Start of reading config file /mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk/bin/i386-linux/fpc.cfg
Hint: (11031) End of reading config file /mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk/bin/i386-linux/fpc.cfg
Hint: (11030) Start of reading config file /mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk/bin/i386-linux/fpc_unit_locations.cfg
Hint: (11031) End of reading config file /mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk/bin/i386-linux/fpc_unit_locations.cfg
Free Pascal Compiler version 3.3.1-r43808 [2019/12/29] for i386
Copyright (c) 1993-2019 by Florian Klaempfl and others
(1002) Target OS: Linux for i386
(3104) Compiling project1.lpr
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(9,18) Warning: (5037) Variable "I" does not seem to be initialized
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(8,1) Note: tgobj: (AllocTemp) lasttemp set to -4
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(8,1) Note: tgobj: (AllocTemp) temp of size 4 type noreuse requested, allocated at offset -4
An unhandled exception occurred at $082B3E49:
EAccessViolation: Access violation
  $082B3E49  TAOPTOBJ__STRIPDEADLABELS,  line 1694 of aoptobj.pas
  $082B40E6  TAOPTOBJ__OPTIMIZECONDITIONALJUMP,  line 1919 of aoptobj.pas
  $082B4692  TAOPTOBJ__DOJUMPOPTIMIZATIONS,  line 2212 of aoptobj.pas
  $082B4BD6  TAOPTOBJ__PEEPHOLEOPTPASS1,  line 2440 of aoptobj.pas
  $0828B90D  TASMOPTIMIZER__OPTIMIZE,  line 285 of aopt.pas
  $0828BD4D  OPTIMIZE,  line 391 of aopt.pas
  $081D1C1F  TCGPROCINFO__GENERATE_CODE,  line 1965 of psub.pas
  $082DEA6F  PROC_PROGRAM,  line 2285 of pmodules.pas
  $081B730B  COMPILE,  line 409 of parser.pas
  $08083D53  COMPILE,  line 278 of compiler.pas
  $0804948F  main,  line 278 of pp.pas

An unhandled exception occurred at $0806D5AE:
EAccessViolation: 
An unhandled exception occurred at $0806D5AE:
EAccessViolation: 
  $0806D5AE
  $0806D74C
  $0806D877
  $0806BFCD
  $080615DC
  $0806184F
  $0807CC40
  $0807D125
  $0807DDA6
  $0807DF61
  $080C725A
  $080655B3
  $080656E1
  $080C76EE
  $0806AF41
  $0806D5AE
  $0806D74C

/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(11,1) Note: tgobj: (FreeTemp) freeing of temp at pos -4 requested
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(10,8) Error: (1026) Compilation raised exception internally
Fatal: (1018) Compilation aborted
Error: /mnt/shares/ohjelmointi2/fpc/i386/trunk/3.3.1/binary/trunk/bin/i386-linux/ppc386 returned an error exitcode


Cyrax

2019-12-29 22:02

reporter   ~0120136

FPC trunk 3.3.1 x86_64-linux r43808

Hint: (11030) Start of reading config file /mnt/shares/ohjelmointi2/fpc/x86_64/trunk/3.3.1/binary/trunk/bin/x86_64-linux/fpc.cfg
Hint: (11031) End of reading config file /mnt/shares/ohjelmointi2/fpc/x86_64/trunk/3.3.1/binary/trunk/bin/x86_64-linux/fpc.cfg
Hint: (11030) Start of reading config file /mnt/shares/ohjelmointi2/fpc/x86_64/trunk/3.3.1/binary/trunk/bin/x86_64-linux/fpc_unit_locations.cfg
Hint: (11031) End of reading config file /mnt/shares/ohjelmointi2/fpc/x86_64/trunk/3.3.1/binary/trunk/bin/x86_64-linux/fpc_unit_locations.cfg
Free Pascal Compiler version 3.3.1-r43808 [2019/12/29] for x86_64
Copyright (c) 1993-2019 by Florian Klaempfl and others
(1002) Target OS: Linux for x86-64
(3104) Compiling project1.lpr
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(9,18) Warning: (5037) Variable "I" does not seem to be initialized
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(8,1) Note: tgobj: (SetFirstTempGen) set to 0
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(8,1) Note: tgobj: (AllocTemp) lasttemp set to -8
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(8,1) Note: tgobj: (AllocTemp) temp of size 8 type noreuse requested, allocated at offset -8
/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(11,1) Note: tgobj: (FreeTemp) freeing of temp at pos -8 requested
An unhandled exception occurred at $00000000006A2FE0:
EAccessViolation: Access violation
  $00000000006A2FE0  TAOPTOBJ__STRIPDEADLABELS,  line 1694 of aoptobj.pas
  $00000000006A332C  TAOPTOBJ__OPTIMIZECONDITIONALJUMP,  line 1919 of aoptobj.pas
  $00000000006A39EA  TAOPTOBJ__DOJUMPOPTIMIZATIONS,  line 2212 of aoptobj.pas
  $00000000006A4014  TAOPTOBJ__PEEPHOLEOPTPASS1,  line 2440 of aoptobj.pas
  $0000000000685E5C  TASMOPTIMIZER__OPTIMIZE,  line 285 of aopt.pas
  $0000000000686344  OPTIMIZE,  line 391 of aopt.pas
  $00000000005AD418  TCGPROCINFO__GENERATE_CODE,  line 1965 of psub.pas
  $00000000006D253A  PROC_PROGRAM,  line 2285 of pmodules.pas
  $0000000000590055  COMPILE,  line 409 of parser.pas
  $000000000043ED91  COMPILE,  line 278 of compiler.pas
  $00000000004014A6  main,  line 278 of pp.pas
  $0000000000434EA0  SYSENTRY,  line 318 of system.pp

An unhandled exception occurred at $0000000000427368:
EAccessViolation: 
An unhandled exception occurred at $0000000000427368:
EAccessViolation: 
  $0000000000427368
  $0000000000427566
  $00000000004276FD
  $000000000042589C
  $000000000041A154
  $000000000041A421
  $00000000004373FF
  $00000000004378F4
  $0000000000438441
  $00000000004385D0
  $0000000000489B6A
  $000000000041EEED
  $000000000041F048
  $000000000048A0B1
  $0000000000424677
  $0000000000427368
  $0000000000427566

/mnt/shares/ohjelmointi/32-bit/kielet/pascal/free_pascal/lazarus/projects/research bugs/fpc/bugs 15/fpc bug internal error 00/project1.lpr(11,1) Error: (1026) Compilation raised exception internally
Fatal: (1018) Compilation aborted
Error: /mnt/shares/ohjelmointi2/fpc/x86_64/trunk/3.3.1/binary/trunk/bin/x86_64-linux/ppcx64 returned an error exitcode

Cyrax

2019-12-29 22:55

reporter   ~0120137

Attached another test project.

project2.zip (1,296 bytes)

Cyrax

2019-12-29 23:22

reporter   ~0120138

Build attached project (project2.zip) with these options
-MObjFPC
-Scghi
-gw2
-godwarfsets
-gl
-l
-vewnhibq
-Filib/i386-linux-Default-30301
-Fu.
-FUlib/i386-linux-Default-30301
-FEbin/i386-linux-Default-30301
-obin/i386-linux-Default-30301/project1
-godwarfmethodclassprefix


Observe test project output:
before test procedure : aobject $0001
after test procedure : aobject $0001


No change.

Now append -gt option to previous options and observe output again

before test procedure : aobject $0001
after test procedure : aobject $55555555


Now instance of tobject (aobject) is pointing to bogus location due to usage of -gt option.

procedure test(current: tobject; out next: tobject);
begin
end;


var
  aobject : tobject;
begin
  aobject := tobject(1);
  writeln('before test procedure : aobject $', IntToHex(PtrUInt(aobject), SizeOf(Pointer)));
  test(aobject, aobject);
  writeln('after test procedure : aobject $', IntToHex(PtrUInt(aobject), SizeOf(Pointer)));
end.


We are calling test procedure with same variable in both parameters. It will retain its value when not using -gt option.

Let's see the compiler sources.

compiler/aoptbase.pas:
class function TAOptBase.SkipEntryExitMarker(current: tai; out next: tai): boolean;
    begin
      result:=true;
      if current.typ<>ait_marker then
        exit;
      next:=current;
      while GetNextInstruction(next,next) do
        begin
          if (next.typ<>ait_marker) or not(tai_marker(next).Kind in [mark_Position,mark_BlockStart]) then
            exit;
        end;
      result:=false;
    end;


compiler/aoptobj.pas:
...
          if GetNextInstruction(p, hp1) and (hp1 <> BlockEnd) then
            begin
              SkipEntryExitMarker(hp1,hp1);
              if (hp1 = BlockEnd) then
                Exit;
     ...


Same here, hp1 will retain its value when not using -gt option. If compiler itself is built with -gt option, then hp1 will get default trash value and thus compilation of first test project fails with compiler quitting due to exception.

Summary : -gt is the problem, not optimization switch as I thought at the beginning.

Jonas Maebe

2019-12-30 12:41

manager   ~0120145

Last edited: 2019-12-30 15:57

View 2 revisions

"out" means that the callee must assign a value to the parameter. If it may keep its old value, then it has to be "var" instead. -gt is correct, the code is buggy.

J. Gareth Moreton

2019-12-31 18:30

developer   ~0120172

I'm surprised that a compiler warning didn't trap this one, since "next" was uninitialised if the initial current instruction is not of type ait_marker.

Does this patch fix the issue, or at the very least this part of it?

SkipEntryExitMarker-fix.patch (591 bytes)
Index: compiler/aoptbase.pas
===================================================================
--- compiler/aoptbase.pas	(revision 43826)
+++ compiler/aoptbase.pas	(working copy)
@@ -266,9 +266,9 @@
   class function TAOptBase.SkipEntryExitMarker(current: tai; out next: tai): boolean;
     begin
       result:=true;
+      next:=current;
       if current.typ<>ait_marker then
         exit;
-      next:=current;
       while GetNextInstruction(next,next) do
         begin
           if (next.typ<>ait_marker) or not(tai_marker(next).Kind in [mark_Position,mark_BlockStart]) then

Jonas Maebe

2020-01-02 20:15

manager   ~0120188

Thanks, applied.

Issue History

Date Modified Username Field Change
2019-11-27 23:55 Cyrax New Issue
2019-11-28 00:04 Cyrax File Added: project1.zip
2019-11-28 00:04 Cyrax Note Added: 0119530
2019-11-28 00:09 Cyrax Note Added: 0119531
2019-11-29 01:20 J. Gareth Moreton Assigned To => J. Gareth Moreton
2019-11-29 01:20 J. Gareth Moreton Status new => assigned
2019-11-29 01:22 J. Gareth Moreton File Added: StripDeadLabelsSafety.patch
2019-11-29 01:22 J. Gareth Moreton Note Added: 0119542
2019-11-29 01:22 J. Gareth Moreton Assigned To J. Gareth Moreton =>
2019-11-29 01:22 J. Gareth Moreton Status assigned => feedback
2019-11-29 01:22 J. Gareth Moreton FPCTarget => -
2019-12-11 20:46 Cyrax Note Added: 0119767
2019-12-11 20:46 Cyrax Status feedback => new
2019-12-11 21:17 Cyrax Note Added: 0119770
2019-12-11 21:32 Cyrax File Added: fix-compiler.diff
2019-12-11 21:32 Cyrax Note Added: 0119771
2019-12-11 23:39 J. Gareth Moreton Note Added: 0119777
2019-12-13 13:28 J. Gareth Moreton Note Added: 0119816
2019-12-13 13:36 J. Gareth Moreton Note Edited: 0119816 View Revisions
2019-12-13 17:05 Cyrax Note Added: 0119820
2019-12-13 18:46 J. Gareth Moreton Note Added: 0119821
2019-12-13 18:46 J. Gareth Moreton Note Edited: 0119821 View Revisions
2019-12-13 21:02 Cyrax Note Added: 0119824
2019-12-14 17:47 J. Gareth Moreton Note Added: 0119847
2019-12-29 21:59 Cyrax Note Added: 0120135
2019-12-29 22:00 Cyrax Note Edited: 0120135 View Revisions
2019-12-29 22:02 Cyrax Note Added: 0120136
2019-12-29 22:55 Cyrax File Added: project2.zip
2019-12-29 22:55 Cyrax Note Added: 0120137
2019-12-29 23:22 Cyrax Note Added: 0120138
2019-12-30 12:41 Jonas Maebe Note Added: 0120145
2019-12-30 12:42 Jonas Maebe Assigned To => J. Gareth Moreton
2019-12-30 12:42 Jonas Maebe Status new => assigned
2019-12-30 15:57 Jonas Maebe Note Edited: 0120145 View Revisions
2019-12-31 18:30 J. Gareth Moreton File Added: SkipEntryExitMarker-fix.patch
2019-12-31 18:30 J. Gareth Moreton Note Added: 0120172
2019-12-31 18:30 J. Gareth Moreton Assigned To J. Gareth Moreton =>
2019-12-31 18:30 J. Gareth Moreton Status assigned => feedback
2019-12-31 18:31 J. Gareth Moreton File Deleted: StripDeadLabelsSafety.patch
2020-01-02 20:15 Jonas Maebe Assigned To => Jonas Maebe
2020-01-02 20:15 Jonas Maebe Status feedback => resolved
2020-01-02 20:15 Jonas Maebe Resolution open => fixed
2020-01-02 20:15 Jonas Maebe Fixed in Version => 3.3.1
2020-01-02 20:15 Jonas Maebe Fixed in Revision => 43843
2020-01-02 20:15 Jonas Maebe Note Added: 0120188
2020-01-20 23:51 Cyrax Status resolved => closed