Browse Source

* factored out check to determine whether a variable can be subscripted in
inline assembly, and fixed check after r35959 (mantis #32318)
o can also subscript parameters passed by value on the stack
o can also subscript local variables, the parameters passed by reference
that are subsequently copied into a local

git-svn-id: trunk@37886 -

Jonas Maebe 7 years ago
parent
commit
1b66995754

+ 1 - 0
.gitattributes

@@ -15907,6 +15907,7 @@ tests/webtbs/tw3222.pp svneol=native#text/plain
 tests/webtbs/tw3226.pp svneol=native#text/plain
 tests/webtbs/tw3226.pp svneol=native#text/plain
 tests/webtbs/tw3227.pp svneol=native#text/plain
 tests/webtbs/tw3227.pp svneol=native#text/plain
 tests/webtbs/tw3227a.pp svneol=native#text/plain
 tests/webtbs/tw3227a.pp svneol=native#text/plain
+tests/webtbs/tw32318.pp svneol=native#text/plain
 tests/webtbs/tw3235.pp svneol=native#text/plain
 tests/webtbs/tw3235.pp svneol=native#text/plain
 tests/webtbs/tw3235a.pp svneol=native#text/plain
 tests/webtbs/tw3235a.pp svneol=native#text/plain
 tests/webtbs/tw3241a.pp svneol=native#text/plain
 tests/webtbs/tw3241a.pp svneol=native#text/plain

+ 2 - 7
compiler/aarch64/racpugas.pas

@@ -607,13 +607,8 @@ Unit racpugas;
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                    checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l)
                   inc(oper.opr.localsymofs,l)
                 end;
                 end;
               OPR_CONSTANT :
               OPR_CONSTANT :

+ 2 - 7
compiler/arm/raarmgas.pas

@@ -634,13 +634,8 @@ Unit raarmgas;
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                     checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l)
                   inc(oper.opr.localsymofs,l)
                 end;
                 end;
               OPR_CONSTANT :
               OPR_CONSTANT :

+ 2 - 7
compiler/avr/raavrgas.pas

@@ -256,13 +256,8 @@ Unit raavrgas;
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                     checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l)
                   inc(oper.opr.localsymofs,l)
                 end;
                 end;
               OPR_CONSTANT :
               OPR_CONSTANT :

+ 2 - 7
compiler/mips/racpugas.pas

@@ -167,13 +167,8 @@ Interface
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                     checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l)
                   inc(oper.opr.localsymofs,l)
                 end;
                 end;
               OPR_CONSTANT :
               OPR_CONSTANT :

+ 1 - 1
compiler/msg/errore.msg

@@ -2652,7 +2652,7 @@ asmr_w_32bit_const_for_address=07079_W_32bit constant created for address
 asmr_n_align_is_target_specific=07080_N_.align is target specific, use .balign or .p2align
 asmr_n_align_is_target_specific=07080_N_.align is target specific, use .balign or .p2align
 % Using the .align directive is platform specific, and its meaning will vary
 % Using the .align directive is platform specific, and its meaning will vary
 % from one platform to another.
 % from one platform to another.
-asmr_e_cannot_access_field_directly_for_parameters=07081_E_Can't access fields directly for parameters
+asmr_e_cannot_access_field_directly_for_parameters=07081_E_Cannot directly access fields of pointer-based parameters
 % You should load the parameter first into a register and then access the
 % You should load the parameter first into a register and then access the
 % fields using that register.
 % fields using that register.
 asmr_e_cannot_access_object_field_directly=07082_E_Can't access fields of objects/classes directly
 asmr_e_cannot_access_object_field_directly=07082_E_Can't access fields of objects/classes directly

+ 1 - 1
compiler/msgidx.inc

@@ -1091,7 +1091,7 @@ const
   option_info=11024;
   option_info=11024;
   option_help_pages=11025;
   option_help_pages=11025;
 
 
-  MsgTxtSize = 81026;
+  MsgTxtSize = 81040;
 
 
   MsgIdxMax : array[1..20] of longint=(
   MsgIdxMax : array[1..20] of longint=(
     27,105,347,124,96,58,139,33,221,67,
     27,105,347,124,96,58,139,33,221,67,

+ 229 - 228
compiler/msgtxt.inc

@@ -933,191 +933,192 @@ const msgtxt : array[0..000337,1..240] of char=(
   '07078_E_Dollar token is used without an identifier'#000+
   '07078_E_Dollar token is used without an identifier'#000+
   '07079_W_32bit constant created for address'#000+
   '07079_W_32bit constant created for address'#000+
   '07080_N_.align is target specific, use .balign or .p2align'#000+
   '07080_N_.align is target specific, use .balign or .p2align'#000+
-  '07081_E_Can'#039't access fields directly for parameters'#000+
-  '07082_E_Can'#039't access fields of',' objects/classes directly'#000+
+  '07081_E_Cannot directly access fields of pointer-based parameters'#000+
+  '07082_E_Can'#039't ac','cess fields of objects/classes directly'#000+
   '07083_E_No size specified and unable to determine the size of the oper'+
   '07083_E_No size specified and unable to determine the size of the oper'+
   'ands'#000+
   'ands'#000+
   '07084_E_Cannot use RESULT in this function'#000+
   '07084_E_Cannot use RESULT in this function'#000+
   '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
   '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+
-  '07087_W_"$1 %st(n)" translated into',' "$1 %st,%st(n)"'#000+
+  '07087_W_"$1 %st(n)" t','ranslated into "$1 %st,%st(n)"'#000+
   '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
   '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+
   '07089_E_Char < not allowed here'#000+
   '07089_E_Char < not allowed here'#000+
   '07090_E_Char > not allowed here'#000+
   '07090_E_Char > not allowed here'#000+
   '07093_W_ALIGN not supported'#000+
   '07093_W_ALIGN not supported'#000+
   '07094_E_Inc and Dec cannot be together'#000+
   '07094_E_Inc and Dec cannot be together'#000+
-  '07095_E_Invalid register list for MOVEM ','or FMOVEM'#000+
+  '07095_E_Invalid register l','ist for MOVEM or FMOVEM'#000+
   '07096_E_Reglist invalid for opcode'#000+
   '07096_E_Reglist invalid for opcode'#000+
   '07097_E_Higher cpu mode required ($1)'#000+
   '07097_E_Higher cpu mode required ($1)'#000+
   '07098_W_No size specified and unable to determine the size of the oper'+
   '07098_W_No size specified and unable to determine the size of the oper'+
   'ands, using DWORD as default'#000+
   'ands, using DWORD as default'#000+
-  '07099_E_Syntax error while trying to parse a shifter opera','nd'#000+
+  '07099_E_Syntax error while trying to parse a',' shifter operand'#000+
   '07100_E_Address of packed component is not at a byte boundary'#000+
   '07100_E_Address of packed component is not at a byte boundary'#000+
   '07101_W_No size specified and unable to determine the size of the oper'+
   '07101_W_No size specified and unable to determine the size of the oper'+
   'ands, using BYTE as default'#000+
   'ands, using BYTE as default'#000+
   '07102_W_Use of +offset(%ebp) for parameters invalid here'#000+
   '07102_W_Use of +offset(%ebp) for parameters invalid here'#000+
-  '07103_W_Use of +offs','et(%ebp) is not compatible with regcall conventi'+
+  '07103_','W_Use of +offset(%ebp) is not compatible with regcall conventi'+
   'on'#000+
   'on'#000+
   '07104_W_Use of -offset(%ebp) is not recommended for local variable acc'+
   '07104_W_Use of -offset(%ebp) is not recommended for local variable acc'+
   'ess'#000+
   'ess'#000+
   '07105_W_Use of -offset(%esp), access may cause a crash or value may be'+
   '07105_W_Use of -offset(%esp), access may cause a crash or value may be'+
   ' lost'#000+
   ' lost'#000+
-  '07106_E_VMTOffset must be used in combi','nation with a virtual method,'+
+  '07106_E_VMTOffset must be',' used in combination with a virtual method,'+
   ' and "$1" is not virtual'#000+
   ' and "$1" is not virtual'#000+
   '07107_E_Generating PIC, but reference is not PIC-safe'#000+
   '07107_E_Generating PIC, but reference is not PIC-safe'#000+
   '07108_E_All registers in a register set must be of the same kind and w'+
   '07108_E_All registers in a register set must be of the same kind and w'+
   'idth'#000+
   'idth'#000+
   '07109_E_A register set cannot be empty'#000+
   '07109_E_A register set cannot be empty'#000+
-  '07110_W_@GOTPCREL ','is useless and potentially dangerous for local sym'+
+  '0711','0_W_@GOTPCREL is useless and potentially dangerous for local sym'+
   'bols'#000+
   'bols'#000+
   '07111_W_Constant with general purpose segment register'#000+
   '07111_W_Constant with general purpose segment register'#000+
   '07112_E_Invalid offset value for $1'#000+
   '07112_E_Invalid offset value for $1'#000+
   '07113_E_Invalid register for $1'#000+
   '07113_E_Invalid register for $1'#000+
-  '07114_E_SEH directives are allowed only in pure assembler proc','edures'+
+  '07114_E_SEH directives are allowed only in pure ','assembler procedures'+
   #000+
   #000+
   '07115_E_Directive "$1" is not supported for the current target'#000+
   '07115_E_Directive "$1" is not supported for the current target'#000+
   '07116_E_This function'#039's result location cannot be encoded directly'+
   '07116_E_This function'#039's result location cannot be encoded directly'+
   ' in a single operand when "nostackframe" is used'#000+
   ' in a single operand when "nostackframe" is used'#000+
-  '07117_E_GOTPCREL references in Intel assembler syntax c','annot contain'+
+  '07117_E_GOTPCREL references in Intel asse','mbler syntax cannot contain'+
   ' a base or index register, and their offset must 0.'#000+
   ' a base or index register, and their offset must 0.'#000+
   '07118_E_The current target does not support GOTPCREL relocations'#000+
   '07118_E_The current target does not support GOTPCREL relocations'#000+
   '07119_W_Exported/global symbols should be accessed via the GOT'#000+
   '07119_W_Exported/global symbols should be accessed via the GOT'#000+
-  '07120_W_Check size of memory operand "$1"'#000+
-  '07121','_W_Check size of memory operand "$1: memory-operand-size is $2 '+
-  'bits, but expected [$3 bits]"'#000+
+  '07120_W_Check size of memory oper','and "$1"'#000+
+  '07121_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
+  'ts, but expected [$3 bits]"'#000+
   '07122_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
   '07122_W_Check size of memory operand "$1: memory-operand-size is $2 bi'+
   'ts, but expected [$3 bits + $4 byte offset]"'#000+
   'ts, but expected [$3 bits + $4 byte offset]"'#000+
-  '07123_W_Check "$1: offset of mem','ory operand is negative "$2 byte"'#000+
+  '07123_W_Check "$1:',' offset of memory operand is negative "$2 byte"'#000+
   '07124_W_Check "$1: size of memory operand is empty, but es exists diff'+
   '07124_W_Check "$1: size of memory operand is empty, but es exists diff'+
   'erent definitions of the memory size =>> map to $2 (smallest option)"'#000+
   'erent definitions of the memory size =>> map to $2 (smallest option)"'#000+
-  '07125_E_Invalid register used in memory reference expression: "$1"',#000+
+  '07125_E_Invalid register used in memory reference ex','pression: "$1"'#000+
   '07126_E_SEG used without identifier'#000+
   '07126_E_SEG used without identifier'#000+
   '07127_E_@CODE and @DATA can only be used with the SEG operator'#000+
   '07127_E_@CODE and @DATA can only be used with the SEG operator'#000+
   '07128_E_Not enough space (16 bits required) for the segment constant o'+
   '07128_E_Not enough space (16 bits required) for the segment constant o'+
   'f symbol $1'#000+
   'f symbol $1'#000+
-  '07129_E_Invalid value of .code directive constant'#000+
-  '07130_W_','No size specified and unable to determine the size of the co'+
-  'nstant, using BYTE as default'#000+
+  '07129_E_Invalid value of .code directive con','stant'#000+
+  '07130_W_No size specified and unable to determine the size of the cons'+
+  'tant, using BYTE as default'#000+
   '07131_W_No size specified and unable to determine the size of the cons'+
   '07131_W_No size specified and unable to determine the size of the cons'+
   'tant, using WORD as default'#000+
   'tant, using WORD as default'#000+
   '07132_E_Cannot override ES segment'#000+
   '07132_E_Cannot override ES segment'#000+
-  '07133_W_Reference',' is not valid here (expected "$1")'#000+
+  '071','33_W_Reference is not valid here (expected "$1")'#000+
   '07134_E_Address sizes do not match'#000+
   '07134_E_Address sizes do not match'#000+
   '07135_E_Instruction "POP CS" is not valid for the current target'#000+
   '07135_E_Instruction "POP CS" is not valid for the current target'#000+
   '07136_W_Instruction "POP CS" is not portable (it only works on 8086 an'+
   '07136_W_Instruction "POP CS" is not portable (it only works on 8086 an'+
   'd 8088 CPUs)'#000+
   'd 8088 CPUs)'#000+
-  '07137_E_Label $1 can o','nly be declared public before it'#039's defined'+
+  '07137_E_','Label $1 can only be declared public before it'#039's defined'+
   #000+
   #000+
   '07138_E_Local label $1 cannot be declared public'#000+
   '07138_E_Local label $1 cannot be declared public'#000+
   '08000_F_Too many assembler files'#000+
   '08000_F_Too many assembler files'#000+
   '08001_F_Selected assembler output not supported'#000+
   '08001_F_Selected assembler output not supported'#000+
   '08002_F_Comp not supported'#000+
   '08002_F_Comp not supported'#000+
-  '08003_F_Direct not support for binary wr','iters'#000+
+  '08003_F_Direct not support',' for binary writers'#000+
   '08004_E_Allocating of data is only allowed in bss section'#000+
   '08004_E_Allocating of data is only allowed in bss section'#000+
   '08005_F_No binary writer selected'#000+
   '08005_F_No binary writer selected'#000+
   '08006_E_Asm: Opcode $1 not in table'#000+
   '08006_E_Asm: Opcode $1 not in table'#000+
   '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
   '08007_E_Asm: $1 invalid combination of opcode and operands'#000+
-  '08008_E_Asm: 16 Bit references not supported'#000+
-  '08','009_E_Asm: Invalid effective address'#000+
+  '08008_E_Asm: 16 Bit references no','t supported'#000+
+  '08009_E_Asm: Invalid effective address'#000+
   '08010_E_Asm: Immediate or reference expected'#000+
   '08010_E_Asm: Immediate or reference expected'#000+
   '08011_E_Asm: $1 value exceeds bounds $2'#000+
   '08011_E_Asm: $1 value exceeds bounds $2'#000+
   '08012_E_Asm: Short jump is out of range $1'#000+
   '08012_E_Asm: Short jump is out of range $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
   '08013_E_Asm: Undefined label $1'#000+
-  '08014_E_Asm: Comp type not supported for th','is target'#000+
+  '08014_E_Asm: Comp type not su','pported for this target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
   '08015_E_Asm: Extended type not supported for this target'#000+
   '08016_E_Asm: Duplicate label $1'#000+
   '08016_E_Asm: Duplicate label $1'#000+
   '08017_E_Asm: Redefined label $1'#000+
   '08017_E_Asm: Redefined label $1'#000+
   '08018_E_Asm: First defined here'#000+
   '08018_E_Asm: First defined here'#000+
   '08019_E_Asm: Invalid register $1'#000+
   '08019_E_Asm: Invalid register $1'#000+
-  '08020_E_Asm: 16 or 32 Bit references not sup','ported'#000+
+  '08020_E_Asm: 16 or 32 Bit refe','rences not supported'#000+
   '08021_E_Asm: 64 Bit operands not supported'#000+
   '08021_E_Asm: 64 Bit operands not supported'#000+
   '08022_E_Asm: AH,BH,CH or DH cannot be used in an instruction requiring'+
   '08022_E_Asm: AH,BH,CH or DH cannot be used in an instruction requiring'+
   ' REX prefix'#000+
   ' REX prefix'#000+
   '08023_E_Missing .seh_endprologue directive'#000+
   '08023_E_Missing .seh_endprologue directive'#000+
   '08024_E_Function prologue exceeds 255 bytes'#000+
   '08024_E_Function prologue exceeds 255 bytes'#000+
-  '08025_E_.seh_handlerd','ata directive without preceding .seh_handler'#000+
+  '08025_E','_.seh_handlerdata directive without preceding .seh_handler'#000+
   '08026_F_Relocation count for section $1 exceeds 65535'#000+
   '08026_F_Relocation count for section $1 exceeds 65535'#000+
   '08027_N_Change of bind type of symbol $1 from $2 to $3 after use'#000+
   '08027_N_Change of bind type of symbol $1 from $2 to $3 after use'#000+
-  '08028_H_Change of bind type of symbol $1 from $2 to $3 after use'#000+
-  '08029_E_Asm',': 32 Bit references not supported'#000+
+  '08028_H_Change of bind type of symbol $1 from $2 to $3 after u','se'#000+
+  '08029_E_Asm: 32 Bit references not supported'#000+
   '08030_F_Code segment too large'#000+
   '08030_F_Code segment too large'#000+
   '08031_F_Data segment too large'#000+
   '08031_F_Data segment too large'#000+
   '08032_E_Instruction not supported by the selected instruction set'#000+
   '08032_E_Instruction not supported by the selected instruction set'#000+
   '09000_W_Source operating system redefined'#000+
   '09000_W_Source operating system redefined'#000+
-  '09001_I_Assembling (pipe) $1'#000+
-  '09002_E','_Can'#039't create assembler file: $1'#000+
+  '09001_I_Assembling (pi','pe) $1'#000+
+  '09002_E_Can'#039't create assembler file: $1'#000+
   '09003_E_Can'#039't create object file: $1 (error code: $2)'#000+
   '09003_E_Can'#039't create object file: $1 (error code: $2)'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
   '09004_E_Can'#039't create archive file: $1'#000+
   '09005_E_Assembler $1 not found, switching to external assembling'#000+
   '09005_E_Assembler $1 not found, switching to external assembling'#000+
   '09006_T_Using assembler: $1'#000+
   '09006_T_Using assembler: $1'#000+
-  '09007_E_Error while as','sembling exitcode $1'#000+
+  '09007_E_','Error while assembling exitcode $1'#000+
   '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
   '09008_E_Can'#039't call the assembler, error $1 switching to external a'+
   'ssembling'#000+
   'ssembling'#000+
   '09009_I_Assembling $1'#000+
   '09009_I_Assembling $1'#000+
   '09010_I_Assembling with smartlinking $1'#000+
   '09010_I_Assembling with smartlinking $1'#000+
   '09011_W_Object $1 not found, Linking may fail !'#000+
   '09011_W_Object $1 not found, Linking may fail !'#000+
-  '09012_W_Library $1 not found, Lin','king may fail !'#000+
+  '09012_W_Library $1 ','not found, Linking may fail !'#000+
   '09013_E_Error while linking'#000+
   '09013_E_Error while linking'#000+
   '09014_E_Can'#039't call the linker, switching to external linking'#000+
   '09014_E_Can'#039't call the linker, switching to external linking'#000+
   '09015_I_Linking $1'#000+
   '09015_I_Linking $1'#000+
   '09016_E_Util $1 not found, switching to external linking'#000+
   '09016_E_Util $1 not found, switching to external linking'#000+
   '09017_T_Using util $1'#000+
   '09017_T_Using util $1'#000+
-  '09018_E_Creation of Executables not s','upported'#000+
+  '09018_E_Creation of Exe','cutables not supported'#000+
   '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+
   '09035_E_Creation of Static Libraries not supported'#000+
   '09035_E_Creation of Static Libraries not supported'#000+
   '09020_I_Closing script $1'#000+
   '09020_I_Closing script $1'#000+
   '09021_E_resource compiler "$1" not found, switching to external mode'#000+
   '09021_E_resource compiler "$1" not found, switching to external mode'#000+
-  '09022_I_Compiling resource',' $1'#000+
+  '09022_I_Comp','iling resource $1'#000+
   '09023_T_unit $1 cannot be statically linked, switching to smart linkin'+
   '09023_T_unit $1 cannot be statically linked, switching to smart linkin'+
   'g'#000+
   'g'#000+
   '09024_T_unit $1 cannot be smart linked, switching to static linking'#000+
   '09024_T_unit $1 cannot be smart linked, switching to static linking'#000+
   '09025_T_unit $1 cannot be shared linked, switching to static linking'#000+
   '09025_T_unit $1 cannot be shared linked, switching to static linking'#000+
-  '09026_E_unit $1 cannot be s','mart or static linked'#000+
+  '09026_E_unit ','$1 cannot be smart or static linked'#000+
   '09027_E_unit $1 cannot be shared or static linked'#000+
   '09027_E_unit $1 cannot be shared or static linked'#000+
   '09028_D_Calling resource compiler "$1" with "$2" as command line'#000+
   '09028_D_Calling resource compiler "$1" with "$2" as command line'#000+
   '09029_E_Error while compiling resources'#000+
   '09029_E_Error while compiling resources'#000+
-  '09030_E_Can'#039't call the resource compiler "$1", switching to ext','e'+
+  '09030_E_Can'#039't call the resource compiler "$1", sw','itching to exte'+
   'rnal mode'#000+
   'rnal mode'#000+
   '09031_E_Can'#039't open resource file "$1"'#000+
   '09031_E_Can'#039't open resource file "$1"'#000+
   '09032_E_Can'#039't write resource file "$1"'#000+
   '09032_E_Can'#039't write resource file "$1"'#000+
   '09033_N_File "$1" not found for backquoted cat command'#000+
   '09033_N_File "$1" not found for backquoted cat command'#000+
   '09034_W_"$1" not found, this will probably cause a linking failure'#000+
   '09034_W_"$1" not found, this will probably cause a linking failure'#000+
-  '09128_F_Can'#039't post process exe','cutable $1'#000+
+  '09128_F_Can'#039't po','st process executable $1'#000+
   '09129_F_Can'#039't open executable $1'#000+
   '09129_F_Can'#039't open executable $1'#000+
   '09130_X_Size of Code: $1 bytes'#000+
   '09130_X_Size of Code: $1 bytes'#000+
   '09131_X_Size of initialized data: $1 bytes'#000+
   '09131_X_Size of initialized data: $1 bytes'#000+
   '09132_X_Size of uninitialized data: $1 bytes'#000+
   '09132_X_Size of uninitialized data: $1 bytes'#000+
   '09133_X_Stack space reserved: $1 bytes'#000+
   '09133_X_Stack space reserved: $1 bytes'#000+
-  '09134_X_Stack space committed: $1 byte','s'#000+
+  '09134_X_Stack space comm','itted: $1 bytes'#000+
   '09200_F_Executable image size is too big for $1 target.'#000+
   '09200_F_Executable image size is too big for $1 target.'#000+
   '09201_W_Object file "$1" contains 32-bit absolute relocation to symbol'+
   '09201_W_Object file "$1" contains 32-bit absolute relocation to symbol'+
   ' "$2".'#000+
   ' "$2".'#000+
   '09202_E_Program segment too large (exceeds 64k by $1 bytes)'#000+
   '09202_E_Program segment too large (exceeds 64k by $1 bytes)'#000+
-  '09203_E_Code segment "$1" too large (exceeds ','64k by $2 bytes)'#000+
+  '09203_E_Code segment "$1" too l','arge (exceeds 64k by $2 bytes)'#000+
   '09204_E_Data segment "$1" too large (exceeds 64k by $2 bytes)'#000+
   '09204_E_Data segment "$1" too large (exceeds 64k by $2 bytes)'#000+
   '09205_E_Segment "$1" too large (exceeds 64k by $2 bytes)'#000+
   '09205_E_Segment "$1" too large (exceeds 64k by $2 bytes)'#000+
   '09206_E_Group "$1" too large (exceeds 64k by $2 bytes)'#000+
   '09206_E_Group "$1" too large (exceeds 64k by $2 bytes)'#000+
-  '09207_E_Cannot create a .COM file, because the pr','ogram contains segm'+
+  '09207_E_Cannot create a .COM file, ','because the program contains segm'+
   'ent relocations'#000+
   'ent relocations'#000+
   '09208_W_Program "$1" uses experimental CheckPointer option'#000+
   '09208_W_Program "$1" uses experimental CheckPointer option'#000+
   '09209_E_Multiple defined symbol "$1"'#000+
   '09209_E_Multiple defined symbol "$1"'#000+
   '09210_E_COMDAT selection mode $1 not supported (section: "$1")'#000+
   '09210_E_COMDAT selection mode $1 not supported (section: "$1")'#000+
-  '09211_E_Associative section expected for COMDA','T section "$1"'#000+
+  '09211_E_Associative section expe','cted for COMDAT section "$1"'#000+
   '09212_E_COMDAT section selection mode doesn'#039't match for section "$'+
   '09212_E_COMDAT section selection mode doesn'#039't match for section "$'+
   '1" and symbol "$2"'#000+
   '1" and symbol "$2"'#000+
   '09213_E_Associative COMDAT section for section "$1" not found'#000+
   '09213_E_Associative COMDAT section for section "$1" not found'#000+
-  '09214_D_Discarding duplicate symbol "$1" due to COMDAT selection mode'#000+
-  '09215_D_','Discarding duplicate symbol "$1" with same size due to COMDA'+
-  'T selection mode'#000+
+  '09214_D_Discarding duplicate symbol "$1" due to COMDAT selection',' mod'+
+  'e'#000+
+  '09215_D_Discarding duplicate symbol "$1" with same size due to COMDAT '+
+  'selection mode'#000+
   '09216_D_Discarding duplicate symbol "$1" with same content due to COMD'+
   '09216_D_Discarding duplicate symbol "$1" with same content due to COMD'+
   'AT selection mode'#000+
   'AT selection mode'#000+
-  '09217_D_Replacing duplicate symbol "$1" with smaller size due to COMDA'+
-  'T sel','ection mode'#000+
+  '09217_D_Replacing duplicate symbol "$1" with smaller size due',' to COM'+
+  'DAT selection mode'#000+
   '09218_E_Size of duplicate COMDAT symbol "$1" differs'#000+
   '09218_E_Size of duplicate COMDAT symbol "$1" differs'#000+
   '09219_E_Content of duplicate COMDAT symbol "$1" differs'#000+
   '09219_E_Content of duplicate COMDAT symbol "$1" differs'#000+
   '09220_E_COMDAT selection mode for symbol "$1" differs'#000+
   '09220_E_COMDAT selection mode for symbol "$1" differs'#000+
   '10000_T_Unitsearch: $1'#000+
   '10000_T_Unitsearch: $1'#000+
   '10001_T_PPU Loading $1'#000+
   '10001_T_PPU Loading $1'#000+
-  '10002_U_PPU Name: $','1'#000+
+  '10002','_U_PPU Name: $1'#000+
   '10003_U_PPU Flags: $1'#000+
   '10003_U_PPU Flags: $1'#000+
   '10004_U_PPU Crc: $1'#000+
   '10004_U_PPU Crc: $1'#000+
   '10005_U_PPU Time: $1'#000+
   '10005_U_PPU Time: $1'#000+
@@ -1125,7 +1126,7 @@ const msgtxt : array[0..000337,1..240] of char=(
   '10007_U_PPU Invalid Header (no PPU at the begin)'#000+
   '10007_U_PPU Invalid Header (no PPU at the begin)'#000+
   '10008_U_PPU Invalid Version $1'#000+
   '10008_U_PPU Invalid Version $1'#000+
   '10009_U_PPU is compiled for another processor'#000+
   '10009_U_PPU is compiled for another processor'#000+
-  '10010_U_PPU is compile','d for another target'#000+
+  '10010_U_','PPU is compiled for another target'#000+
   '10011_U_PPU Source: $1'#000+
   '10011_U_PPU Source: $1'#000+
   '10012_U_Writing $1'#000+
   '10012_U_Writing $1'#000+
   '10013_F_Can'#039't Write PPU-File'#000+
   '10013_F_Can'#039't Write PPU-File'#000+
@@ -1133,202 +1134,202 @@ const msgtxt : array[0..000337,1..240] of char=(
   '10015_F_unexpected end of PPU-File'#000+
   '10015_F_unexpected end of PPU-File'#000+
   '10016_F_Invalid PPU-File entry: $1'#000+
   '10016_F_Invalid PPU-File entry: $1'#000+
   '10017_F_PPU Dbx count problem'#000+
   '10017_F_PPU Dbx count problem'#000+
-  '10018_E_Illegal u','nit name: $1 (expecting $2)'#000+
+  '100','18_E_Illegal unit name: $1 (expecting $2)'#000+
   '10019_F_Too much units'#000+
   '10019_F_Too much units'#000+
   '10020_F_Circular unit reference between $1 and $2'#000+
   '10020_F_Circular unit reference between $1 and $2'#000+
   '10021_F_Can'#039't compile unit $1, no sources available'#000+
   '10021_F_Can'#039't compile unit $1, no sources available'#000+
   '10022_F_Can'#039't find unit $1 used by $2'#000+
   '10022_F_Can'#039't find unit $1 used by $2'#000+
-  '10023_W_Unit $1 was not found but $2 exists'#000+
-  '10024','_F_Unit $1 searched but $2 found'#000+
+  '10023_W_Unit $1 was not found but $','2 exists'#000+
+  '10024_F_Unit $1 searched but $2 found'#000+
   '10025_W_Compiling the system unit requires the -Us switch'#000+
   '10025_W_Compiling the system unit requires the -Us switch'#000+
   '10026_F_There were $1 errors compiling module, stopping'#000+
   '10026_F_There were $1 errors compiling module, stopping'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
   '10027_U_Load from $1 ($2) unit $3'#000+
-  '10028_U_Recompiling $1, checksum changed for $2'#000+
-  '10029_U_Rec','ompiling $1, source found only'#000+
+  '10028_U_Recompiling $1, checksum changed for ','$2'#000+
+  '10029_U_Recompiling $1, source found only'#000+
   '10030_U_Recompiling unit, static lib is older than ppufile'#000+
   '10030_U_Recompiling unit, static lib is older than ppufile'#000+
   '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
   '10031_U_Recompiling unit, shared lib is older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
   '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
-  '10033_U_Recompiling unit, obj ','is older than asm'#000+
+  '10033_U_Recompil','ing unit, obj is older than asm'#000+
   '10034_U_Parsing interface of $1'#000+
   '10034_U_Parsing interface of $1'#000+
   '10035_U_Parsing implementation of $1'#000+
   '10035_U_Parsing implementation of $1'#000+
   '10036_U_Second load for unit $1'#000+
   '10036_U_Second load for unit $1'#000+
   '10037_U_PPU Check file $1 time $2'#000+
   '10037_U_PPU Check file $1 time $2'#000+
   '10040_W_Can'#039't recompile unit $1, but found modified include files'#000+
   '10040_W_Can'#039't recompile unit $1, but found modified include files'#000+
-  '10041_U_File $1 is ne','wer than the one used for creating PPU file $2'#000+
+  '10041_U','_File $1 is newer than the one used for creating PPU file $2'#000+
   '10042_U_Trying to use a unit which was compiled with a different FPU m'+
   '10042_U_Trying to use a unit which was compiled with a different FPU m'+
   'ode'#000+
   'ode'#000+
   '10043_U_Loading interface units from $1'#000+
   '10043_U_Loading interface units from $1'#000+
   '10044_U_Loading implementation units from $1'#000+
   '10044_U_Loading implementation units from $1'#000+
-  '10045_U_Interface CRC changed for ','unit $1'#000+
+  '10045_U_Interface CR','C changed for unit $1'#000+
   '10046_U_Implementation CRC changed for unit $1'#000+
   '10046_U_Implementation CRC changed for unit $1'#000+
   '10047_U_Finished compiling unit $1'#000+
   '10047_U_Finished compiling unit $1'#000+
   '10048_U_Adding dependency: $1 depends on $2'#000+
   '10048_U_Adding dependency: $1 depends on $2'#000+
   '10049_U_No reload, is caller: $1'#000+
   '10049_U_No reload, is caller: $1'#000+
   '10050_U_No reload, already in second compile: $1'#000+
   '10050_U_No reload, already in second compile: $1'#000+
-  '10051_U_Flag for reload:',' $1'#000+
+  '10051_U_Fl','ag for reload: $1'#000+
   '10052_U_Forced reloading'#000+
   '10052_U_Forced reloading'#000+
   '10053_U_Previous state of $1: $2'#000+
   '10053_U_Previous state of $1: $2'#000+
   '10054_U_Already compiling $1, setting second compile'#000+
   '10054_U_Already compiling $1, setting second compile'#000+
   '10055_U_Loading unit $1'#000+
   '10055_U_Loading unit $1'#000+
   '10056_U_Finished loading unit $1'#000+
   '10056_U_Finished loading unit $1'#000+
   '10057_U_Registering new unit $1'#000+
   '10057_U_Registering new unit $1'#000+
-  '10058_U_Re-resolving unit $1'#000+
-  '10059_U','_Skipping re-resolving unit $1, still loading used units'#000+
+  '10058_U_Re-resolving u','nit $1'#000+
+  '10059_U_Skipping re-resolving unit $1, still loading used units'#000+
   '10060_U_Unloading resource unit $1 (not needed)'#000+
   '10060_U_Unloading resource unit $1 (not needed)'#000+
   '10061_E_Unit $1 was compiled using a different whole program optimizat'+
   '10061_E_Unit $1 was compiled using a different whole program optimizat'+
-  'ion feedback input ($2, $3); recompile it without wpo or use the ','sam'+
+  'ion feedback input ($2, $3); recompile it without w','po or use the sam'+
   'e wpo feedback input file for this compilation invocation'#000+
   'e wpo feedback input file for this compilation invocation'#000+
   '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+
   '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+
   '10063_U_PPU is compiled for another i8086 memory model'#000+
   '10063_U_PPU is compiled for another i8086 memory model'#000+
   '10064_U_Loading unit $1 from package $2'#000+
   '10064_U_Loading unit $1 from package $2'#000+
-  '10065_F_Interna','l type "$1" was not found. Check if you use the corre'+
+  '1','0065_F_Internal type "$1" was not found. Check if you use the corre'+
   'ct run time library.'#000+
   'ct run time library.'#000+
   '10066_F_Internal type "$1" does not look as expected. Check if you use'+
   '10066_F_Internal type "$1" does not look as expected. Check if you use'+
   ' the correct run time library.'#000+
   ' the correct run time library.'#000+
   '11000_O_$1 [options] <inputfile> [options]'#000+
   '11000_O_$1 [options] <inputfile> [options]'#000+
-  '11001_W_Only one sourc','e file supported, changing source file to comp'+
+  '11001_W_','Only one source file supported, changing source file to comp'+
   'ile from "$1" into "$2"'#000+
   'ile from "$1" into "$2"'#000+
   '11002_W_DEF file can be created only for OS/2'#000+
   '11002_W_DEF file can be created only for OS/2'#000+
   '11003_E_nested response files are not supported'#000+
   '11003_E_nested response files are not supported'#000+
   '11004_F_No source file name in command line'#000+
   '11004_F_No source file name in command line'#000+
-  '11005_N_No option inside $1 conf','ig file'#000+
+  '11005_N_No option ','inside $1 config file'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11006_E_Illegal parameter: $1'#000+
   '11007_H_-? writes help pages'#000+
   '11007_H_-? writes help pages'#000+
   '11008_F_Too many config files nested'#000+
   '11008_F_Too many config files nested'#000+
   '11009_F_Unable to open file $1'#000+
   '11009_F_Unable to open file $1'#000+
   '11010_D_Reading further options from $1'#000+
   '11010_D_Reading further options from $1'#000+
   '11011_W_Target is already set to: $1'#000+
   '11011_W_Target is already set to: $1'#000+
-  '11012_W_Shared libs not supp','orted on DOS platform, reverting to stat'+
+  '11012_W_Shared',' libs not supported on DOS platform, reverting to stat'+
   'ic'#000+
   'ic'#000+
   '11013_F_In options file $1 at line $2 too many #IF(N)DEFs encountered'#000+
   '11013_F_In options file $1 at line $2 too many #IF(N)DEFs encountered'#000+
   '11014_F_In options file $1 at line $2 unexpected #ENDIFs encountered'#000+
   '11014_F_In options file $1 at line $2 unexpected #ENDIFs encountered'#000+
-  '11015_F_Open conditional at the end of the options file'#000+
-  '11','016_W_Debug information generation is not supported by this execut'+
-  'able'#000+
+  '11015_F_Open conditional at the end of the o','ptions file'#000+
+  '11016_W_Debug information generation is not supported by this executab'+
+  'le'#000+
   '11017_H_Try recompiling with -dGDB'#000+
   '11017_H_Try recompiling with -dGDB'#000+
   '11018_W_You are using the obsolete switch $1'#000+
   '11018_W_You are using the obsolete switch $1'#000+
   '11019_W_You are using the obsolete switch $1, please use $2'#000+
   '11019_W_You are using the obsolete switch $1, please use $2'#000+
-  '11020_N_Switching assembler t','o default source writing assembler'#000+
+  '11020_N_Switchi','ng assembler to default source writing assembler'#000+
   '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
   '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+
   '11022_W_"$1" assembler use forced'#000+
   '11022_W_"$1" assembler use forced'#000+
   '11026_T_Reading options from file $1'#000+
   '11026_T_Reading options from file $1'#000+
   '11027_T_Reading options from environment $1'#000+
   '11027_T_Reading options from environment $1'#000+
-  '11028_D_Handling option',' "$1"'#000+
+  '11028_D_H','andling option "$1"'#000+
   '11029_O_*** press enter ***'#000+
   '11029_O_*** press enter ***'#000+
   '11030_H_Start of reading config file $1'#000+
   '11030_H_Start of reading config file $1'#000+
   '11031_H_End of reading config file $1'#000+
   '11031_H_End of reading config file $1'#000+
   '11032_D_interpreting option "$1"'#000+
   '11032_D_interpreting option "$1"'#000+
   '11036_D_interpreting firstpass option "$1"'#000+
   '11036_D_interpreting firstpass option "$1"'#000+
-  '11033_D_interpreting file option "$1"'#000+
-  '11034_D_Readin','g config file "$1"'#000+
+  '11033_D_interpreting file option "$1"'#000,
+  '11034_D_Reading config file "$1"'#000+
   '11035_D_found source file name "$1"'#000+
   '11035_D_found source file name "$1"'#000+
   '11039_E_Unknown codepage "$1"'#000+
   '11039_E_Unknown codepage "$1"'#000+
   '11040_F_Config file $1 is a directory'#000+
   '11040_F_Config file $1 is a directory'#000+
   '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
   '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+
   'ugging disabled'#000+
   'ugging disabled'#000+
-  '11042_W_Use of ppc386.cfg is de','precated, please use fpc.cfg instead'#000+
+  '11042_W_Use of pp','c386.cfg is deprecated, please use fpc.cfg instead'#000+
   '11043_F_In options file $1 at line $2 #ELSE directive without #IF(N)DE'+
   '11043_F_In options file $1 at line $2 #ELSE directive without #IF(N)DE'+
   'F found'#000+
   'F found'#000+
   '11044_F_Option "$1" is not, or not yet, supported on the current targe'+
   '11044_F_Option "$1" is not, or not yet, supported on the current targe'+
   't platform'#000+
   't platform'#000+
-  '11045_F_The feature "$1" is not, or not yet,',' supported on the select'+
+  '11045_F_The feature "$1" is no','t, or not yet, supported on the select'+
   'ed target platform'#000+
   'ed target platform'#000+
   '11046_N_DWARF debug information cannot be used with smart linking on t'+
   '11046_N_DWARF debug information cannot be used with smart linking on t'+
   'his target, switching to static linking'#000+
   'his target, switching to static linking'#000+
   '11047_W_Option "$1" is ignored for the current target platform.'#000+
   '11047_W_Option "$1" is ignored for the current target platform.'#000+
-  '11048_W_Disabling exter','nal debug information because it is unsupport'+
+  '11048_W_D','isabling external debug information because it is unsupport'+
   'ed for the selected target/debug format combination.'#000+
   'ed for the selected target/debug format combination.'#000+
   '11049_N_DWARF debug information cannot be used with smart linking with'+
   '11049_N_DWARF debug information cannot be used with smart linking with'+
   ' external assembler, disabling static library creation.'#000+
   ' external assembler, disabling static library creation.'#000+
-  '11050_E_Invalid ','value for MACOSX_DEPLOYMENT_TARGET environment varia'+
+  '11','050_E_Invalid value for MACOSX_DEPLOYMENT_TARGET environment varia'+
   'ble: $1'#000+
   'ble: $1'#000+
   '11051_E_Invalid value for IPHONEOS_DEPLOYMENT_TARGET environment varia'+
   '11051_E_Invalid value for IPHONEOS_DEPLOYMENT_TARGET environment varia'+
   'ble: $1'#000+
   'ble: $1'#000+
   '11052_E_You must use a FPU type of VFPV2, VFPV3 or VFPV3_D16 when usin'+
   '11052_E_You must use a FPU type of VFPV2, VFPV3 or VFPV3_D16 when usin'+
-  'g the EABIHF ABI target'#000+
-  '11053_W_','The selected debug format is not supported on the current ta'+
-  'rget, not changing the current setting'#000+
+  'g the EABIHF ABI t','arget'#000+
+  '11053_W_The selected debug format is not supported on the current targ'+
+  'et, not changing the current setting'#000+
   '11054_E_argument to "$1" is missing'#000+
   '11054_E_argument to "$1" is missing'#000+
   '11055_E_malformed parameter: $1'#000+
   '11055_E_malformed parameter: $1'#000+
   '11056_W_Smart linking requires external linker'#000+
   '11056_W_Smart linking requires external linker'#000+
-  '11057_E_Creating .COM file','s is not supported in the current memory m'+
+  '11057_E_Crea','ting .COM files is not supported in the current memory m'+
   'odel. Only the tiny memory model supports making .COM files.'#000+
   'odel. Only the tiny memory model supports making .COM files.'#000+
   '11058_W_Experimental CheckPointer option not enabled because it is inc'+
   '11058_W_Experimental CheckPointer option not enabled because it is inc'+
   'omptatible with -Ur option.'#000+
   'omptatible with -Ur option.'#000+
-  '11059_E_Unsupported target architecture',' -P$1, invoke the "fpc" compi'+
+  '11059_E_Unsupported targe','t architecture -P$1, invoke the "fpc" compi'+
   'ler driver instead.'#000+
   'ler driver instead.'#000+
   '11060_E_Feature switches are only supported while compiling the system'+
   '11060_E_Feature switches are only supported while compiling the system'+
   ' unit.'#000+
   ' unit.'#000+
   '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
   '12000_F_Cannot open whole program optimization feedback file "$1"'#000+
-  '12001_D_Processing whole program optimization in','formation in wpo fee'+
+  '12001_D_Processing whole program o','ptimization information in wpo fee'+
   'dback file "$1"'#000+
   'dback file "$1"'#000+
   '12002_D_Finished processing the whole program optimization information'+
   '12002_D_Finished processing the whole program optimization information'+
   ' in wpo feedback file "$1"'#000+
   ' in wpo feedback file "$1"'#000+
   '12003_E_Expected section header, but got "$2" at line $1 of wpo feedba'+
   '12003_E_Expected section header, but got "$2" at line $1 of wpo feedba'+
   'ck file'#000+
   'ck file'#000+
-  '12004_W_No handler registered',' for whole program optimization section'+
+  '12004_W_No hand','ler registered for whole program optimization section'+
   ' "$2" at line $1 of wpo feedback file, ignoring'#000+
   ' "$2" at line $1 of wpo feedback file, ignoring'#000+
   '12005_D_Found whole program optimization section "$1" with information'+
   '12005_D_Found whole program optimization section "$1" with information'+
   ' about "$2"'#000+
   ' about "$2"'#000+
-  '12006_F_The selected whole program optimizations require a previously '+
-  'g','enerated feedback file (use -Fw to specify)'#000+
+  '12006_F_The selected whole program optimizations require ','a previousl'+
+  'y generated feedback file (use -Fw to specify)'#000+
   '12007_E_No collected information necessary to perform "$1" whole progr'+
   '12007_E_No collected information necessary to perform "$1" whole progr'+
   'am optimization found'#000+
   'am optimization found'#000+
   '12008_F_Specify a whole program optimization feedback file to store th'+
   '12008_F_Specify a whole program optimization feedback file to store th'+
-  'e generated info in (using -FW)'#000+
-  '12','009_E_Not generating any whole program optimization information, y'+
-  'et a feedback file was specified (using -FW)'#000+
+  'e generated info in ','(using -FW)'#000+
+  '12009_E_Not generating any whole program optimization information, yet'+
+  ' a feedback file was specified (using -FW)'#000+
   '12010_E_Not performing any whole program optimizations, yet an input f'+
   '12010_E_Not performing any whole program optimizations, yet an input f'+
   'eedback file was specified (using -Fw)'#000+
   'eedback file was specified (using -Fw)'#000+
-  '12011_D_Skipping who','le program optimization section "$1", because no'+
+  '12011_','D_Skipping whole program optimization section "$1", because no'+
   't needed by the requested optimizations'#000+
   't needed by the requested optimizations'#000+
   '12012_W_Overriding previously read information for "$1" from feedback '+
   '12012_W_Overriding previously read information for "$1" from feedback '+
   'input file using information in section "$2"'#000+
   'input file using information in section "$2"'#000+
-  '12013_E_Cannot extract symbol livenes','s information from program when'+
+  '12013_E_Cannot extract ','symbol liveness information from program when'+
   ' stripping symbols, use -Xs-'#000+
   ' stripping symbols, use -Xs-'#000+
   '12014_E_Cannot extract symbol liveness information from program when w'+
   '12014_E_Cannot extract symbol liveness information from program when w'+
   'hen not linking'#000+
   'hen not linking'#000+
   '12015_F_Cannot find "$1" or "$2" to extract symbol liveness informatio'+
   '12015_F_Cannot find "$1" or "$2" to extract symbol liveness informatio'+
-  'n from linked program'#000+
-  '12','016_E_Error during reading symbol liveness information produced by'+
-  ' "$1"'#000+
+  'n from lin','ked program'#000+
+  '12016_E_Error during reading symbol liveness information produced by "'+
+  '$1"'#000+
   '12017_F_Error executing "$1" (exitcode: $2) to extract symbol informat'+
   '12017_F_Error executing "$1" (exitcode: $2) to extract symbol informat'+
   'ion from linked program'#000+
   'ion from linked program'#000+
-  '12018_E_Collection of symbol liveness information can only help when u'+
-  'sing',' smart linking, use -CX -XX'#000+
+  '12018_E_Collection of symbol liveness information can only h','elp when'+
+  ' using smart linking, use -CX -XX'#000+
   '12019_E_Cannot create specified whole program optimisation feedback fi'+
   '12019_E_Cannot create specified whole program optimisation feedback fi'+
   'le "$1"'#000+
   'le "$1"'#000+
   '13001_F_Can'#039't find package $1'#000+
   '13001_F_Can'#039't find package $1'#000+
   '13002_U_PCP file for package $1 found'#000+
   '13002_U_PCP file for package $1 found'#000+
   '13003_E_Duplicate package $1'#000+
   '13003_E_Duplicate package $1'#000+
-  '13004_E_Unit $1 can not be part of a ','package'#000+
+  '13004_E_Unit $1 can not',' be part of a package'#000+
   '13005_N_Unit $1 is implicitely imported into package $2'#000+
   '13005_N_Unit $1 is implicitely imported into package $2'#000+
   '13006_F_Failed to create PCP file $2 for package $1'#000+
   '13006_F_Failed to create PCP file $2 for package $1'#000+
   '13007_F_Failed to read PCP file for package $1'#000+
   '13007_F_Failed to read PCP file for package $1'#000+
   '13008_T_PCP loading $1'#000+
   '13008_T_PCP loading $1'#000+
   '13009_U_PCP Name: $1'#000+
   '13009_U_PCP Name: $1'#000+
-  '13010_U_PCP Flags: $1'#000+
-  '13011_U_PCP',' Crc: $1'#000+
+  '13010_U_PCP Flags: ','$1'#000+
+  '13011_U_PCP Crc: $1'#000+
   '13012_U_PCP Time: $1'#000+
   '13012_U_PCP Time: $1'#000+
   '13013_U_PCP File too short'#000+
   '13013_U_PCP File too short'#000+
   '13014_U_PCP Invalid Header (no PCP at the begin)'#000+
   '13014_U_PCP Invalid Header (no PCP at the begin)'#000+
   '13015_U_PCP Invalid Version $1'#000+
   '13015_U_PCP Invalid Version $1'#000+
   '13016_U_PCP is compiled for another processor'#000+
   '13016_U_PCP is compiled for another processor'#000+
-  '13017_U_PCP is compiled for another target'#000+
-  '13018_U_Writin','g $1'#000+
+  '13017_U_PCP is compiled for another target'#000,
+  '13018_U_Writing $1'#000+
   '13019_F_Can'#039't Write PCP-File'#000+
   '13019_F_Can'#039't Write PCP-File'#000+
   '13020_F_Error reading PCP-File'#000+
   '13020_F_Error reading PCP-File'#000+
   '13021_F_unexpected end of PCP-File'#000+
   '13021_F_unexpected end of PCP-File'#000+
   '13022_F_Invalid PCP-File entry: $1'#000+
   '13022_F_Invalid PCP-File entry: $1'#000+
   '13023_U_Trying to use a unit which was compiled with a different FPU m'+
   '13023_U_Trying to use a unit which was compiled with a different FPU m'+
   'ode'#000+
   'ode'#000+
-  '13024_T_Packagesearch: $1'#000+
-  '13025','_U_Required package $1'#000+
+  '13024_T_Packagese','arch: $1'#000+
+  '13025_U_Required package $1'#000+
   '13026_U_Contained unit $1'#000+
   '13026_U_Contained unit $1'#000+
   '13027_E_Unit $1 is already contained in package $2'#000+
   '13027_E_Unit $1 is already contained in package $2'#000+
   '13028_W_Unit $1 is imported from indirectly required package $2'#000+
   '13028_W_Unit $1 is imported from indirectly required package $2'#000+
   '13029_U_PPL filename $1'#000+
   '13029_U_PPL filename $1'#000+
-  '11023_Free Pascal Compiler version $FPCFULLVERSION [','$FPCDATE] for $F'+
+  '11023_Free Pascal Compiler version $FP','CFULLVERSION [$FPCDATE] for $F'+
   'PCCPU'#010+
   'PCCPU'#010+
   'Copyright (c) 1993-2017 by Florian Klaempfl and others'#000+
   'Copyright (c) 1993-2017 by Florian Klaempfl and others'#000+
   '11024_Free Pascal Compiler version $FPCVERSION'#010+
   '11024_Free Pascal Compiler version $FPCVERSION'#010+
@@ -1336,7 +1337,7 @@ const msgtxt : array[0..000337,1..240] of char=(
   'Compiler date      : $FPCDATE'#010+
   'Compiler date      : $FPCDATE'#010+
   'Compiler CPU target: $FPCCPU'#010+
   'Compiler CPU target: $FPCCPU'#010+
   #010+
   #010+
-  'Supported targets (targets marked with '#039'{*}'#039' are under ','devel'+
+  'Supported targets (targets marked with '#039'{','*}'#039' are under devel'+
   'opment):'#010+
   'opment):'#010+
   '  $OSTARGETS'#010+
   '  $OSTARGETS'#010+
   #010+
   #010+
@@ -1350,9 +1351,9 @@ const msgtxt : array[0..000337,1..240] of char=(
   '  $ASMMODES'#010+
   '  $ASMMODES'#010+
   #010+
   #010+
   'Recognized compiler and RTL features:'#010+
   'Recognized compiler and RTL features:'#010+
-  '  $FEATURELIST'#010+
+  '  $FEA','TURELIST'#010+
   #010+
   #010+
-  'Supp','orted ABI targets:'#010+
+  'Supported ABI targets:'#010+
   '  $ABITARGETS'#010+
   '  $ABITARGETS'#010+
   #010+
   #010+
   'Supported Optimizations:'#010+
   'Supported Optimizations:'#010+
@@ -1363,308 +1364,308 @@ const msgtxt : array[0..000337,1..240] of char=(
   '  $WPOPTIMIZATIONS'#010+
   '  $WPOPTIMIZATIONS'#010+
   #010+
   #010+
   'Supported Microcontroller types:$\n  $CONTROLLERTYPES$\n'#010+
   'Supported Microcontroller types:$\n  $CONTROLLERTYPES$\n'#010+
-  'This program comes under the GNU General ','Public Licence'#010+
+  'This program comes under th','e GNU General Public Licence'#010+
   'For more information read COPYING.v2'#010+
   'For more information read COPYING.v2'#010+
   #010+
   #010+
   'Please report bugs in our bug tracker on:'#010+
   'Please report bugs in our bug tracker on:'#010+
   '                 http://bugs.freepascal.org'#010+
   '                 http://bugs.freepascal.org'#010+
   #010+
   #010+
   'More information may be found on our WWW pages (including directions'#010+
   'More information may be found on our WWW pages (including directions'#010+
-  'for mailing lists useful for as','king questions or discussing potentia'+
+  'for mailing lists',' useful for asking questions or discussing potentia'+
   'l'#010+
   'l'#010+
   'new features, etc.):'#010+
   'new features, etc.):'#010+
   '                 http://www.freepascal.org'#000+
   '                 http://www.freepascal.org'#000+
   '11025_F*0*_Only options valid for the default or selected platform are'+
   '11025_F*0*_Only options valid for the default or selected platform are'+
   ' listed.'#010+
   ' listed.'#010+
-  '**0*_Put + after a boolean switch option to enable it, - t','o disable '+
+  '**0*_Put + after a boolean switch option to ','enable it, - to disable '+
   'it.'#010+
   'it.'#010+
   '**1@<x>_Read compiler options from <x> in addition to the default fpc.'+
   '**1@<x>_Read compiler options from <x> in addition to the default fpc.'+
   'cfg'#010+
   'cfg'#010+
   '**1a_The compiler does not delete the generated assembler file'#010+
   '**1a_The compiler does not delete the generated assembler file'#010+
   '**2a5_Don'#039't generate Big Obj COFF files for GNU Binutils older tha'+
   '**2a5_Don'#039't generate Big Obj COFF files for GNU Binutils older tha'+
-  'n 2.25 (Windows, Native','NT)'#010+
+  'n 2.25 (W','indows, NativeNT)'#010+
   '**2al_List sourcecode lines in assembler file'#010+
   '**2al_List sourcecode lines in assembler file'#010+
   '**2an_List node info in assembler file (-dEXTDEBUG compiler)'#010+
   '**2an_List node info in assembler file (-dEXTDEBUG compiler)'#010+
   '**2ao_Add an extra option to external assembler call (ignored for inte'+
   '**2ao_Add an extra option to external assembler call (ignored for inte'+
   'rnal)'#010+
   'rnal)'#010+
-  '*L2ap_Use pipes instead of creating temporary assembl','er files'#010+
+  '*L2ap_Use pipes instead of creating tem','porary assembler files'#010+
   '**2ar_List register allocation/release info in assembler file'#010+
   '**2ar_List register allocation/release info in assembler file'#010+
   '**2at_List temp allocation/release info in assembler file'#010+
   '**2at_List temp allocation/release info in assembler file'#010+
   '**1A<x>_Output format:'#010+
   '**1A<x>_Output format:'#010+
   '**2Adefault_Use default assembler'#010+
   '**2Adefault_Use default assembler'#010+
   '3*2Aas_Assemble using GNU AS'#010+
   '3*2Aas_Assemble using GNU AS'#010+
-  '3*2Amacho_Mach-O (Darwin,',' Intel 32 bit) using internal writer'#010+
+  '3*2Amacho_M','ach-O (Darwin, Intel 32 bit) using internal writer'#010+
   '8*2Anasm_Assemble using Nasm'#010+
   '8*2Anasm_Assemble using Nasm'#010+
   '8*2Anasmobj_Assemble using Nasm'#010+
   '8*2Anasmobj_Assemble using Nasm'#010+
   '3*2Anasm_Assemble using Nasm'#010+
   '3*2Anasm_Assemble using Nasm'#010+
   '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
   '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+
   '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
   '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+
-  '3*2Anasmwin32_Win32 object f','ile using Nasm'#010+
+  '3*2Anasmwin32_','Win32 object file using Nasm'#010+
   '3*2Anasmwdosx_Win32/WDOSX object file using Nasm'#010+
   '3*2Anasmwdosx_Win32/WDOSX object file using Nasm'#010+
   '3*2Anasmdarwin_macho32 object file using Nasm (experimental)'#010+
   '3*2Anasmdarwin_macho32 object file using Nasm (experimental)'#010+
   '3*2Awasm_Obj file using Wasm (Watcom)'#010+
   '3*2Awasm_Obj file using Wasm (Watcom)'#010+
   '3*2Anasmobj_Obj file using Nasm'#010+
   '3*2Anasmobj_Obj file using Nasm'#010+
-  '3*2Amasm_Obj file using Masm (Microsoft)'#010+
-  '3*2A','tasm_Obj file using Tasm (Borland)'#010+
+  '3*2Amasm_Obj file using Masm (M','icrosoft)'#010+
+  '3*2Atasm_Obj file using Tasm (Borland)'#010+
   '3*2Aelf_ELF (Linux) using internal writer'#010+
   '3*2Aelf_ELF (Linux) using internal writer'#010+
   '3*2Acoff_COFF (Go32v2) using internal writer'#010+
   '3*2Acoff_COFF (Go32v2) using internal writer'#010+
   '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
   '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+
   '3*2Ayasm_Assemble using Yasm (experimental)'#010+
   '3*2Ayasm_Assemble using Yasm (experimental)'#010+
-  '4*2Aas_Assemble using GNU',' AS'#010+
+  '4*2Aas_Asse','mble using GNU AS'#010+
   '4*2Agas_Assemble using GNU GAS'#010+
   '4*2Agas_Assemble using GNU GAS'#010+
   '4*2Agas-darwin_Assemble darwin Mach-O64 using GNU GAS'#010+
   '4*2Agas-darwin_Assemble darwin Mach-O64 using GNU GAS'#010+
   '4*2Amasm_Win64 object file using ml64 (Microsoft)'#010+
   '4*2Amasm_Win64 object file using ml64 (Microsoft)'#010+
   '4*2Apecoff_PE-COFF (Win64) using internal writer'#010+
   '4*2Apecoff_PE-COFF (Win64) using internal writer'#010+
-  '4*2Aelf_ELF (Linux-64bit) using internal writer'#010+
-  '4*2A','yasm_Assemble using Yasm (experimental)'#010+
+  '4*2Aelf_ELF (Linux-64bit) using intern','al writer'#010+
+  '4*2Ayasm_Assemble using Yasm (experimental)'#010+
   '4*2Anasm_Assemble  using Nasm (experimental)'#010+
   '4*2Anasm_Assemble  using Nasm (experimental)'#010+
   '4*2Anasmwin64_Assemble Win64 object file using Nasm (experimental)'#010+
   '4*2Anasmwin64_Assemble Win64 object file using Nasm (experimental)'#010+
   '4*2Anasmelf_Assemble Linux-64bit object file using Nasm (experimental)'+
   '4*2Anasmelf_Assemble Linux-64bit object file using Nasm (experimental)'+
   #010+
   #010+
-  '4*2Anasmdarwin_As','semble darwin macho64 object file using Nasm (exper'+
+  '4*2','Anasmdarwin_Assemble darwin macho64 object file using Nasm (exper'+
   'imental)'#010+
   'imental)'#010+
   '6*2Aas_Unix o-file using GNU AS'#010+
   '6*2Aas_Unix o-file using GNU AS'#010+
   '6*2Agas_GNU Motorola assembler'#010+
   '6*2Agas_GNU Motorola assembler'#010+
   '6*2Amit_MIT Syntax (old GAS)'#010+
   '6*2Amit_MIT Syntax (old GAS)'#010+
   '6*2Amot_Standard Motorola assembler'#010+
   '6*2Amot_Standard Motorola assembler'#010+
   'A*2Aas_Assemble using GNU AS'#010+
   'A*2Aas_Assemble using GNU AS'#010+
-  'P*2Aas_Assemble using G','NU AS'#010+
+  'P*2Aas_As','semble using GNU AS'#010+
   'S*2Aas_Assemble using GNU AS'#010+
   'S*2Aas_Assemble using GNU AS'#010+
   '**1b_Generate browser info'#010+
   '**1b_Generate browser info'#010+
   '**2bl_Generate local symbol info'#010+
   '**2bl_Generate local symbol info'#010+
   '**1B_Build all modules'#010+
   '**1B_Build all modules'#010+
   '**1C<x>_Code generation options:'#010+
   '**1C<x>_Code generation options:'#010+
   '**2C3_Turn on ieee error checking for constants'#010+
   '**2C3_Turn on ieee error checking for constants'#010+
-  '**2Ca<x>_Select ABI; see fpc -i or fpc -i','a for possible values'#010+
+  '**2Ca<x>_Select ABI; see fp','c -i or fpc -ia for possible values'#010+
   '**2Cb_Generate code for a big-endian variant of the target architectur'+
   '**2Cb_Generate code for a big-endian variant of the target architectur'+
   'e'#010+
   'e'#010+
   '**2Cc<x>_Set default calling convention to <x>'#010+
   '**2Cc<x>_Set default calling convention to <x>'#010+
   '**2CD_Create also dynamic library (not supported)'#010+
   '**2CD_Create also dynamic library (not supported)'#010+
-  '**2Ce_Compilation with emulated floating point op','codes'#010+
+  '**2Ce_Compilation with emulated flo','ating point opcodes'#010+
   '**2Cf<x>_Select fpu instruction set to use; see fpc -i or fpc -if for '+
   '**2Cf<x>_Select fpu instruction set to use; see fpc -i or fpc -if for '+
   'possible values'#010+
   'possible values'#010+
   '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
   '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+
   '**2Cg_Generate PIC code'#010+
   '**2Cg_Generate PIC code'#010+
-  '**2Ch<n>[,m]_<n> bytes min heap size (between 1023 and ','67107840) and'+
+  '**2Ch<n>[,m]_<n> bytes min heap size (bet','ween 1023 and 67107840) and'+
   ' optionally [m] max heap size'#010+
   ' optionally [m] max heap size'#010+
   '**2Ci_IO-checking'#010+
   '**2Ci_IO-checking'#010+
   'A*2CI<x>_Select instruction set on ARM: ARM or THUMB'#010+
   'A*2CI<x>_Select instruction set on ARM: ARM or THUMB'#010+
   '**2Cn_Omit linking stage'#010+
   '**2Cn_Omit linking stage'#010+
   'P*2CN_Generate nil-pointer checks (AIX-only)'#010+
   'P*2CN_Generate nil-pointer checks (AIX-only)'#010+
-  '**2Co_Check overflow of integer operations'#010+
-  '**2CO_Check f','or possible overflow of integer operations'#010+
+  '**2Co_Check overflow of integer operations',#010+
+  '**2CO_Check for possible overflow of integer operations'#010+
   '**2Cp<x>_Select instruction set; see fpc -i or fpc -ic for possible va'+
   '**2Cp<x>_Select instruction set; see fpc -i or fpc -ic for possible va'+
   'lues'#010+
   'lues'#010+
   '**2CP<x>=<y>_ packing settings'#010+
   '**2CP<x>=<y>_ packing settings'#010+
   '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
   '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+
   'and 8'#010+
   'and 8'#010+
-  '**3CPPACKENUM=<','y>_ <y> enum packing: 0, 1, 2 and 4 or DEFAULT or NOR'+
+  '*','*3CPPACKENUM=<y>_ <y> enum packing: 0, 1, 2 and 4 or DEFAULT or NOR'+
   'MAL'#010+
   'MAL'#010+
   '**3CPPACKRECORD=<y>_ <y> record packing: 0 or DEFAULT or NORMAL, 1, 2,'+
   '**3CPPACKRECORD=<y>_ <y> record packing: 0 or DEFAULT or NORMAL, 1, 2,'+
   ' 4, 8, 16 and 32'#010+
   ' 4, 8, 16 and 32'#010+
   '**2Cr_Range checking'#010+
   '**2Cr_Range checking'#010+
   '**2CR_Verify object method call validity'#010+
   '**2CR_Verify object method call validity'#010+
-  '**2Cs<n>_Set stack checking size t','o <n>'#010+
+  '**2Cs<n>_Set stack c','hecking size to <n>'#010+
   '**2Ct_Stack checking (for testing only, see manual)'#010+
   '**2Ct_Stack checking (for testing only, see manual)'#010+
   '8*2CT<x>_Target-specific code generation options'#010+
   '8*2CT<x>_Target-specific code generation options'#010+
   '3*2CT<x>_Target-specific code generation options'#010+
   '3*2CT<x>_Target-specific code generation options'#010+
   '4*2CT<x>_Target-specific code generation options'#010+
   '4*2CT<x>_Target-specific code generation options'#010+
-  'p*2CT<x>_Target-specific code gener','ation options'#010+
+  'p*2CT<x>_Target-speci','fic code generation options'#010+
   'P*2CT<x>_Target-specific code generation options'#010+
   'P*2CT<x>_Target-specific code generation options'#010+
   'J*2CT<x>_Target-specific code generation options'#010+
   'J*2CT<x>_Target-specific code generation options'#010+
   'A*2CT<x>_Target-specific code generation options'#010+
   'A*2CT<x>_Target-specific code generation options'#010+
-  'p*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
-  ' (AIX)'#010+
-  'P*','3CTsmalltoc_ Generate smaller TOCs at the expense of execution spe'+
+  'p*3CTsmalltoc_ Generate smaller TOCs at the expense of execution ','spe'+
   'ed (AIX)'#010+
   'ed (AIX)'#010+
+  'P*3CTsmalltoc_ Generate smaller TOCs at the expense of execution speed'+
+  ' (AIX)'#010+
   'J*3CTautogetterprefix=X_  Automatically create getters for properties '+
   'J*3CTautogetterprefix=X_  Automatically create getters for properties '+
   'with prefix X (empty string disables)'#010+
   'with prefix X (empty string disables)'#010+
-  'J*3CTautosetterprefix=X_  Automatically create setters fo','r propertie'+
+  'J*3CTautosetterprefix=X_  Automatically cre','ate setters for propertie'+
   's with prefix X (empty string disables)'#010+
   's with prefix X (empty string disables)'#010+
   '8*3CTcld_                 Emit a CLD instruction before using the x86 '+
   '8*3CTcld_                 Emit a CLD instruction before using the x86 '+
   'string instructions'#010+
   'string instructions'#010+
   '3*3CTcld_                 Emit a CLD instruction before using the x86 '+
   '3*3CTcld_                 Emit a CLD instruction before using the x86 '+
+  'string instruct','ions'#010+
+  '4*3CTcld_                 Emit a CLD instruction before using the x86 '+
   'string instructions'#010+
   'string instructions'#010+
-  '4*3CTcld_','                 Emit a CLD instruction before using the x8'+
-  '6 string instructions'#010+
   '8*3CTfarprocspushoddbp_       Increment BP before pushing it in the pr'+
   '8*3CTfarprocspushoddbp_       Increment BP before pushing it in the pr'+
   'ologue of far functions'#010+
   'ologue of far functions'#010+
-  'J*3CTcompactintarrayinit_ Generate smaller (but potentially slowe','r) '+
+  'J*3CTcompactintarrayinit_ Generate smaller (but pot','entially slower) '+
   'code for initializing integer array constants'#010+
   'code for initializing integer array constants'#010+
   'J*3CTenumfieldinit_       Initialize enumeration fields in constructor'+
   'J*3CTenumfieldinit_       Initialize enumeration fields in constructor'+
   's to enumtype(0), after calling inherited constructors'#010+
   's to enumtype(0), after calling inherited constructors'#010+
-  'J*3CTinitlocals_          Initialize local variables that trigger ','a '+
+  'J*3CTinitlocals_          Initialize local variables',' that trigger a '+
   'JVM bytecode verification error if used uninitialized (slows down code'+
   'JVM bytecode verification error if used uninitialized (slows down code'+
   ')'#010+
   ')'#010+
   'J*3CTlowercaseprocstart_  Lowercase the first character of procedure/f'+
   'J*3CTlowercaseprocstart_  Lowercase the first character of procedure/f'+
   'unction/method names'#010+
   'unction/method names'#010+
-  'A*3CTthumbinterworking_ Generate Thumb interworking-safe code if possi'+
-  'ble'#010+
-  'J','*2Cv_Var/out parameter copy-out checking'#010+
+  'A*3CTthumbinterworking_ Generate Thumb interworking-safe code',' if pos'+
+  'sible'#010+
+  'J*2Cv_Var/out parameter copy-out checking'#010+
   '**2CX_Create also smartlinked library'#010+
   '**2CX_Create also smartlinked library'#010+
   '**1d<x>_Defines the symbol <x>'#010+
   '**1d<x>_Defines the symbol <x>'#010+
   '**1D_Generate a DEF file'#010+
   '**1D_Generate a DEF file'#010+
   '**2Dd<x>_Set description to <x>'#010+
   '**2Dd<x>_Set description to <x>'#010+
   '**2Dv<x>_Set DLL version to <x>'#010+
   '**2Dv<x>_Set DLL version to <x>'#010+
   '*O2Dw_PM application'#010+
   '*O2Dw_PM application'#010+
-  '**1e<x>_Set path to ','executable'#010+
+  '**1e<x','>_Set path to executable'#010+
   '**1E_Same as -Cn'#010+
   '**1E_Same as -Cn'#010+
   '**1fPIC_Same as -Cg'#010+
   '**1fPIC_Same as -Cg'#010+
   '**1F<x>_Set file names and paths:'#010+
   '**1F<x>_Set file names and paths:'#010+
   '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
   '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+
   'sed'#010+
   'sed'#010+
   '**2Fc<x>_Set input codepage to <x>'#010+
   '**2Fc<x>_Set input codepage to <x>'#010+
-  '**2FC<x>_Set RC compiler binary name to <x>'#010+
-  '**2Fd','_Disable the compiler'#039's internal directory cache'#010+
+  '**2FC<x>_Set RC compiler binary nam','e to <x>'#010+
+  '**2Fd_Disable the compiler'#039's internal directory cache'#010+
   '**2FD<x>_Set the directory where to search for compiler utilities'#010+
   '**2FD<x>_Set the directory where to search for compiler utilities'#010+
   '**2Fe<x>_Redirect error output to <x>'#010+
   '**2Fe<x>_Redirect error output to <x>'#010+
   '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
   '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+
-  '**2FE<x>_Set exe/unit output path to <','x>'#010+
+  '**2FE<x>_Set exe/unit ou','tput path to <x>'#010+
   '**2Fi<x>_Add <x> to include path'#010+
   '**2Fi<x>_Add <x> to include path'#010+
   '**2Fl<x>_Add <x> to library path'#010+
   '**2Fl<x>_Add <x> to library path'#010+
   '**2FL<x>_Use <x> as dynamic linker'#010+
   '**2FL<x>_Use <x> as dynamic linker'#010+
   '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
   '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+
   'r'#010+
   'r'#010+
-  '**2FM<x>_Set the directory where to search for unicode binary fi','les'#010+
+  '**2FM<x>_Set the directory where to search for uni','code binary files'#010+
   '**2Fo<x>_Add <x> to object path'#010+
   '**2Fo<x>_Add <x> to object path'#010+
   '**2Fr<x>_Load error message file <x>'#010+
   '**2Fr<x>_Load error message file <x>'#010+
   '**2FR<x>_Set resource (.res) linker to <x>'#010+
   '**2FR<x>_Set resource (.res) linker to <x>'#010+
   '**2Fu<x>_Add <x> to unit path'#010+
   '**2Fu<x>_Add <x> to unit path'#010+
   '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
   '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+
-  '**2FW<x>_Store generated whole-program opt','imization feedback in <x>'#010+
+  '**2FW<x>_Store generated who','le-program optimization feedback in <x>'#010+
   '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
   '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+
   'om <x>'#010+
   'om <x>'#010+
   '*g1g_Generate debug information (default format for target)'#010+
   '*g1g_Generate debug information (default format for target)'#010+
-  '*g2gc_Generate checks for pointers (experimental, only available on so'+
-  'me targ','ets, might generate false positive)'#010+
+  '*g2gc_Generate checks for pointers (experimental, only availabl','e on '+
+  'some targets, might generate false positive)'#010+
   '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
   '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+
   '*g2gl_Use line info unit (show more info with backtraces)'#010+
   '*g2gl_Use line info unit (show more info with backtraces)'#010+
   '*g2go<x>_Set debug information options'#010+
   '*g2go<x>_Set debug information options'#010+
-  '*g3godwarfsets_ Enable DWARF '#039'set'#039' type deb','ug information (b'+
-  'reaks gdb < 6.5)'#010+
+  '*g3godwarfsets_ Enable DWARF ',#039'set'#039' type debug information (bre'+
+  'aks gdb < 6.5)'#010+
   '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
   '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+
   #010+
   #010+
   '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+
   '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+
   'ame'#010+
   'ame'#010+
-  '*g3godwarfcpp_ Simulate C++ debug information in DWARF'#010+
-  '*g2gp_','Preserve case in stabs symbol names'#010+
+  '*g3godwarfcpp_ Simulate C++ debug information i','n DWARF'#010+
+  '*g2gp_Preserve case in stabs symbol names'#010+
   '*g2gs_Generate Stabs debug information'#010+
   '*g2gs_Generate Stabs debug information'#010+
   '*g2gt_Trash local variables (to detect uninitialized uses; multiple '#039+
   '*g2gt_Trash local variables (to detect uninitialized uses; multiple '#039+
   't'#039' changes the trashing value)'#010+
   't'#039' changes the trashing value)'#010+
   '*g2gv_Generates programs traceable with Valgrind'#010+
   '*g2gv_Generates programs traceable with Valgrind'#010+
-  '*g2gw_Generate D','WARFv2 debug information (same as -gw2)'#010+
+  '*g','2gw_Generate DWARFv2 debug information (same as -gw2)'#010+
   '*g2gw2_Generate DWARFv2 debug information'#010+
   '*g2gw2_Generate DWARFv2 debug information'#010+
   '*g2gw3_Generate DWARFv3 debug information'#010+
   '*g2gw3_Generate DWARFv3 debug information'#010+
   '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+
   '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+
   '**1i_Information'#010+
   '**1i_Information'#010+
   '**2iD_Return compiler date'#010+
   '**2iD_Return compiler date'#010+
-  '**2iSO_Return c','ompiler OS'#010+
+  '*','*2iSO_Return compiler OS'#010+
   '**2iSP_Return compiler host processor'#010+
   '**2iSP_Return compiler host processor'#010+
   '**2iTO_Return target OS'#010+
   '**2iTO_Return target OS'#010+
   '**2iTP_Return target processor'#010+
   '**2iTP_Return target processor'#010+
   '**2iV_Return short compiler version'#010+
   '**2iV_Return short compiler version'#010+
   '**2iW_Return full compiler version'#010+
   '**2iW_Return full compiler version'#010+
   '**2ia_Return list of supported ABI targets'#010+
   '**2ia_Return list of supported ABI targets'#010+
-  '**2ic_Return list of s','upported CPU instruction sets'#010+
+  '**2ic_Re','turn list of supported CPU instruction sets'#010+
   '**2if_Return list of supported FPU instruction sets'#010+
   '**2if_Return list of supported FPU instruction sets'#010+
   '**2ii_Return list of supported inline assembler modes'#010+
   '**2ii_Return list of supported inline assembler modes'#010+
   '**2io_Return list of supported optimizations'#010+
   '**2io_Return list of supported optimizations'#010+
-  '**2ir_Return list of recognized compiler and RTL features'#010+
-  '*','*2it_Return list of supported targets'#010+
+  '**2ir_Return list of recognized compiler and ','RTL features'#010+
+  '**2it_Return list of supported targets'#010+
   '**2iu_Return list of supported microcontroller types'#010+
   '**2iu_Return list of supported microcontroller types'#010+
   '**2iw_Return list of supported whole program optimizations'#010+
   '**2iw_Return list of supported whole program optimizations'#010+
   '**1I<x>_Add <x> to include path'#010+
   '**1I<x>_Add <x> to include path'#010+
   '**1k<x>_Pass <x> to the linker'#010+
   '**1k<x>_Pass <x> to the linker'#010+
-  '**1l_Write logo'#010+
-  '**1M<x>_Set',' language mode to <x>'#010+
+  '**1l_Write lo','go'#010+
+  '**1M<x>_Set language mode to <x>'#010+
   '**2Mfpc_Free Pascal dialect (default)'#010+
   '**2Mfpc_Free Pascal dialect (default)'#010+
   '**2Mobjfpc_FPC mode with Object Pascal support'#010+
   '**2Mobjfpc_FPC mode with Object Pascal support'#010+
   '**2Mdelphi_Delphi 7 compatibility mode'#010+
   '**2Mdelphi_Delphi 7 compatibility mode'#010+
   '**2Mtp_TP/BP 7.0 compatibility mode'#010+
   '**2Mtp_TP/BP 7.0 compatibility mode'#010+
-  '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+
-  '**','2Miso_ISO 7185 mode'#010+
+  '**2Mmacpas_Macintosh Pascal dialects compati','bility mode'#010+
+  '**2Miso_ISO 7185 mode'#010+
   '**2Mextendedpascal_ISO 10206 mode'#010+
   '**2Mextendedpascal_ISO 10206 mode'#010+
   '**2Mdelphiunicode_Delphi 2009 and later compatibility mode'#010+
   '**2Mdelphiunicode_Delphi 2009 and later compatibility mode'#010+
   '**1n_Do not read the default config files'#010+
   '**1n_Do not read the default config files'#010+
   '**1o<x>_Change the name of the executable produced to <x>'#010+
   '**1o<x>_Change the name of the executable produced to <x>'#010+
-  '**1O<x>_Optimizations:'#010+
-  '**2O','-_Disable optimizations'#010+
+  '**1O<x>_Optim','izations:'#010+
+  '**2O-_Disable optimizations'#010+
   '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
   '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+
   '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
   '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+
   '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
   '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+
-  '**2O4_Level 4 optimizations (-O3 + optimization','s which might have un'+
+  '**2O4_Level 4 optimizations (-O3 ','+ optimizations which might have un'+
   'expected side effects)'#010+
   'expected side effects)'#010+
   '**2Oa<x>=<y>_Set alignment'#010+
   '**2Oa<x>=<y>_Set alignment'#010+
   '**2Oo[NO]<x>_Enable or disable optimizations; see fpc -i or fpc -io fo'+
   '**2Oo[NO]<x>_Enable or disable optimizations; see fpc -i or fpc -io fo'+
   'r possible values'#010+
   'r possible values'#010+
-  '**2Op<x>_Set target cpu for optimizing; see fpc -i or fpc -ic for poss'+
-  'ible values',#010+
+  '**2Op<x>_Set target cpu for optimizing; see fpc -i or fpc -ic for p','o'+
+  'ssible values'#010+
   '**2OW<x>_Generate whole-program optimization feedback for optimization'+
   '**2OW<x>_Generate whole-program optimization feedback for optimization'+
   ' <x>; see fpc -i or fpc -iw for possible values'#010+
   ' <x>; see fpc -i or fpc -iw for possible values'#010+
   '**2Ow<x>_Perform whole-program optimization <x>; see fpc -i or fpc -iw'+
   '**2Ow<x>_Perform whole-program optimization <x>; see fpc -i or fpc -iw'+
   ' for possible values'#010+
   ' for possible values'#010+
-  '**2Os_Optimize for size rather',' than speed'#010+
+  '**2Os_Optimize f','or size rather than speed'#010+
   '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
   '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+
   'F*1P<x>_Target CPU / compiler related options:'#010+
   'F*1P<x>_Target CPU / compiler related options:'#010+
   'F*2PB_Show default compiler binary'#010+
   'F*2PB_Show default compiler binary'#010+
   'F*2PP_Show default target cpu'#010+
   'F*2PP_Show default target cpu'#010+
-  'F*2P<x>_Set target CPU (aarch64,arm,avr,i386,i8086,jvm,m','68k,mips,mip'+
+  'F*2P<x>_Set target CPU (aarch64,arm,avr,i3','86,i8086,jvm,m68k,mips,mip'+
   'sel,powerpc,powerpc64,sparc,x86_64)'#010+
   'sel,powerpc,powerpc64,sparc,x86_64)'#010+
   '**1R<x>_Assembler reading style:'#010+
   '**1R<x>_Assembler reading style:'#010+
   '**2Rdefault_Use default assembler for target'#010+
   '**2Rdefault_Use default assembler for target'#010+
   '3*2Ratt_Read AT&T style assembler'#010+
   '3*2Ratt_Read AT&T style assembler'#010+
   '3*2Rintel_Read Intel style assembler'#010+
   '3*2Rintel_Read Intel style assembler'#010+
-  '4*2Ratt_Read AT&T style assembler'#010+
-  '4*2Rintel','_Read Intel style assembler'#010+
+  '4*2Ratt_Read AT&T style assem','bler'#010+
+  '4*2Rintel_Read Intel style assembler'#010+
   '8*2Ratt_Read AT&T style assembler'#010+
   '8*2Ratt_Read AT&T style assembler'#010+
   '8*2Rintel_Read Intel style assembler'#010+
   '8*2Rintel_Read Intel style assembler'#010+
   '6*2RMOT_Read Motorola style assembler'#010+
   '6*2RMOT_Read Motorola style assembler'#010+
   '**1S<x>_Syntax options:'#010+
   '**1S<x>_Syntax options:'#010+
   '**2S2_Same as -Mobjfpc'#010+
   '**2S2_Same as -Mobjfpc'#010+
-  '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+
-  '**2Sa_T','urn on assertions'#010+
+  '**2Sc_Support operators like C (*=,+=,/= a','nd -=)'#010+
+  '**2Sa_Turn on assertions'#010+
   '**2Sd_Same as -Mdelphi'#010+
   '**2Sd_Same as -Mdelphi'#010+
   '**2Se<x>_Error options. <x> is a combination of the following:'#010+
   '**2Se<x>_Error options. <x> is a combination of the following:'#010+
   '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
   '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+
   '**3*_w : Compiler also halts after warnings'#010+
   '**3*_w : Compiler also halts after warnings'#010+
-  '**3*_n : Compiler also halts a','fter notes'#010+
+  '**3*_n : Compile','r also halts after notes'#010+
   '**3*_h : Compiler also halts after hints'#010+
   '**3*_h : Compiler also halts after hints'#010+
   '**2Sf_Enable certain features in compiler and RTL; see fpc -i or fpc -'+
   '**2Sf_Enable certain features in compiler and RTL; see fpc -i or fpc -'+
   'ir for possible values)'#010+
   'ir for possible values)'#010+
   '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
   '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+
-  '**2Sh_Use reference counted strings',' (ansistring by default) instead '+
+  '**2Sh_Use reference c','ounted strings (ansistring by default) instead '+
   'of shortstrings'#010+
   'of shortstrings'#010+
   '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
   '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+
   '**2Sj_Allows typed constants to be writeable (default in all modes)'#010+
   '**2Sj_Allows typed constants to be writeable (default in all modes)'#010+
   '**2Sk_Load fpcylix unit'#010+
   '**2Sk_Load fpcylix unit'#010+
-  '**2SI<x>_Set interface style to',' <x>'#010+
+  '**2SI<x>_Set inte','rface style to <x>'#010+
   '**3SIcom_COM compatible interface (default)'#010+
   '**3SIcom_COM compatible interface (default)'#010+
   '**3SIcorba_CORBA compatible interface'#010+
   '**3SIcorba_CORBA compatible interface'#010+
   '**2Sm_Support macros like C (global)'#010+
   '**2Sm_Support macros like C (global)'#010+
   '**2So_Same as -Mtp'#010+
   '**2So_Same as -Mtp'#010+
   '**2Sr_Transparent file names in ISO mode'#010+
   '**2Sr_Transparent file names in ISO mode'#010+
-  '**2Ss_Constructor name must be init (destructor must be ','done)'#010+
+  '**2Ss_Constructor name must be init (destr','uctor must be done)'#010+
   '**2Sv_Support vector processing (use CPU vector extensions if availabl'+
   '**2Sv_Support vector processing (use CPU vector extensions if availabl'+
   'e)'#010+
   'e)'#010+
   '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
   '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+
   '**2Sy_@<pointer> returns a typed pointer, same as $T+'#010+
   '**2Sy_@<pointer> returns a typed pointer, same as $T+'#010+
-  '**1s_Do not call assembler and linker'#010+
-  '**2s','h_Generate script to link on host'#010+
+  '**1s_Do not call assembler a','nd linker'#010+
+  '**2sh_Generate script to link on host'#010+
   '**2st_Generate script to link on target'#010+
   '**2st_Generate script to link on target'#010+
   '**2sr_Skip register allocation phase (use with -alr)'#010+
   '**2sr_Skip register allocation phase (use with -alr)'#010+
   '**1T<x>_Target operating system:'#010+
   '**1T<x>_Target operating system:'#010+
   '3*2Tandroid_Android'#010+
   '3*2Tandroid_Android'#010+
   '3*2Taros_AROS'#010+
   '3*2Taros_AROS'#010+
   '3*2Tbeos_BeOS'#010+
   '3*2Tbeos_BeOS'#010+
-  '3*2Tdarwin_Darwin/Mac OS X'#010+
-  '3*2Te','mbedded_Embedded'#010+
+  '3*2Tdarwin_Darwin/','Mac OS X'#010+
+  '3*2Tembedded_Embedded'#010+
   '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
   '3*2Tfreebsd_FreeBSD'#010+
   '3*2Tfreebsd_FreeBSD'#010+
   '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
   '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
   '3*2Thaiku_Haiku'#010+
   '3*2Thaiku_Haiku'#010+
   '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
   '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+
-  'rwin)'#010+
-  '3*2Tlinux_Lin','ux'#010+
+  'rwin)',#010+
+  '3*2Tlinux_Linux'#010+
   '3*2Tnativent_Native NT API (experimental)'#010+
   '3*2Tnativent_Native NT API (experimental)'#010+
   '3*2Tnetbsd_NetBSD'#010+
   '3*2Tnetbsd_NetBSD'#010+
   '3*2Tnetware_Novell Netware Module (clib)'#010+
   '3*2Tnetware_Novell Netware Module (clib)'#010+
@@ -1672,8 +1673,8 @@ const msgtxt : array[0..000337,1..240] of char=(
   '3*2Topenbsd_OpenBSD'#010+
   '3*2Topenbsd_OpenBSD'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
   '3*2Tos2_OS/2 / eComStation'#010+
   '3*2Tsymbian_Symbian OS'#010+
   '3*2Tsymbian_Symbian OS'#010+
-  '3*2Tsolaris_Solaris'#010+
-  '3*2T','watcom_Watcom compatible DOS extender'#010+
+  '3*2Tsolari','s_Solaris'#010+
+  '3*2Twatcom_Watcom compatible DOS extender'#010+
   '3*2Twdosx_WDOSX DOS extender'#010+
   '3*2Twdosx_WDOSX DOS extender'#010+
   '3*2Twin32_Windows 32 Bit'#010+
   '3*2Twin32_Windows 32 Bit'#010+
   '3*2Twince_Windows CE'#010+
   '3*2Twince_Windows CE'#010+
@@ -1682,7 +1683,7 @@ const msgtxt : array[0..000337,1..240] of char=(
   '4*2Tiphonesim_ iPhoneSimulator'#010+
   '4*2Tiphonesim_ iPhoneSimulator'#010+
   '4*2Tlinux_Linux'#010+
   '4*2Tlinux_Linux'#010+
   '4*2Tnetbsd_NetBSD'#010+
   '4*2Tnetbsd_NetBSD'#010+
-  '4*2Topenbsd_Ope','nBSD'#010+
+  '4','*2Topenbsd_OpenBSD'#010+
   '4*2Tsolaris_Solaris'#010+
   '4*2Tsolaris_Solaris'#010+
   '4*2Twin64_Win64 (64 bit Windows systems)'#010+
   '4*2Twin64_Win64 (64 bit Windows systems)'#010+
   '6*2Tamiga_Commodore Amiga'#010+
   '6*2Tamiga_Commodore Amiga'#010+
@@ -1692,7 +1693,7 @@ const msgtxt : array[0..000337,1..240] of char=(
   '6*2Tmacos_Mac OS'#010+
   '6*2Tmacos_Mac OS'#010+
   '6*2Tpalmos_PalmOS'#010+
   '6*2Tpalmos_PalmOS'#010+
   '8*2Tmsdos_MS-DOS (and compatible)'#010+
   '8*2Tmsdos_MS-DOS (and compatible)'#010+
-  '8*2Twin16_Windows 1','6 Bit'#010+
+  '8*2Tw','in16_Windows 16 Bit'#010+
   'A*2Tandroid_Android'#010+
   'A*2Tandroid_Android'#010+
   'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
   'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+
   'A*2Tembedded_Embedded'#010+
   'A*2Tembedded_Embedded'#010+
@@ -1703,8 +1704,8 @@ const msgtxt : array[0..000337,1..240] of char=(
   'A*2Twince_Windows CE'#010+
   'A*2Twince_Windows CE'#010+
   'a*2Tdarwin_Darwin/iOS'#010+
   'a*2Tdarwin_Darwin/iOS'#010+
   'a*2Tlinux_Linux'#010+
   'a*2Tlinux_Linux'#010+
-  'J*2Tandroid_Android'#010+
-  'J','*2Tjava_Java'#010+
+  'J*2Tand','roid_Android'#010+
+  'J*2Tjava_Java'#010+
   'm*2Tandroid_Android'#010+
   'm*2Tandroid_Android'#010+
   'm*2Tembedded_Embedded'#010+
   'm*2Tembedded_Embedded'#010+
   'm*2Tlinux_Linux'#010+
   'm*2Tlinux_Linux'#010+
@@ -1715,8 +1716,8 @@ const msgtxt : array[0..000337,1..240] of char=(
   'P*2Tdarwin_Darwin/Mac OS X'#010+
   'P*2Tdarwin_Darwin/Mac OS X'#010+
   'P*2Tlinux_Linux'#010+
   'P*2Tlinux_Linux'#010+
   'P*2Tmacos_Mac OS (classic)'#010+
   'P*2Tmacos_Mac OS (classic)'#010+
-  'P*2Tmorphos_MorphOS'#010+
-  'P*2Tnetbsd_','NetBSD'#010+
+  'P*2Tmorphos_Morph','OS'#010+
+  'P*2Tnetbsd_NetBSD'#010+
   'P*2Twii_Wii'#010+
   'P*2Twii_Wii'#010+
   'p*2Taix_AIX'#010+
   'p*2Taix_AIX'#010+
   'p*2Tdarwin_Darwin/Mac OS X'#010+
   'p*2Tdarwin_Darwin/Mac OS X'#010+
@@ -1727,141 +1728,141 @@ const msgtxt : array[0..000337,1..240] of char=(
   'V*2Tembedded_Embedded'#010+
   'V*2Tembedded_Embedded'#010+
   '**1u<x>_Undefines the symbol <x>'#010+
   '**1u<x>_Undefines the symbol <x>'#010+
   '**1U_Unit options:'#010+
   '**1U_Unit options:'#010+
-  '**2Un_Do not check where the unit name m','atches the file name'#010+
+  '**2Un_Do not check where t','he unit name matches the file name'#010+
   '**2Ur_Generate release unit files (never automatically recompiled)'#010+
   '**2Ur_Generate release unit files (never automatically recompiled)'#010+
   '**2Us_Compile a system unit'#010+
   '**2Us_Compile a system unit'#010+
   '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
   '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
-  '**2*_e : Show errors (default)       0 : Show nothing (ex','cept errors'+
+  '**2*_e : Show errors (default)       0 : Sh','ow nothing (except errors'+
   ')'#010+
   ')'#010+
   '**2*_w : Show warnings               u : Show unit info'#010+
   '**2*_w : Show warnings               u : Show unit info'#010+
   '**2*_n : Show notes                  t : Show tried/used files'#010+
   '**2*_n : Show notes                  t : Show tried/used files'#010+
   '**2*_h : Show hints                  c : Show conditionals'#010+
   '**2*_h : Show hints                  c : Show conditionals'#010+
-  '**2*_i : Show general info           d : Show deb','ug info'#010+
+  '**2*_i : Show general info         ','  d : Show debug info'#010+
   '**2*_l : Show linenumbers            r : Rhide/GCC compatibility mode'#010+
   '**2*_l : Show linenumbers            r : Rhide/GCC compatibility mode'#010+
   '**2*_s : Show time stamps            q : Show message numbers'#010+
   '**2*_s : Show time stamps            q : Show message numbers'#010+
   '**2*_a : Show everything             x : Show info about invoked tools'+
   '**2*_a : Show everything             x : Show info about invoked tools'+
   #010+
   #010+
-  '**2*_b : Write file names mes','sages   p : Write tree.log with parse t'+
+  '**2*_b : Write ','file names messages   p : Write tree.log with parse t'+
   'ree'#010+
   'ree'#010+
   '**2*_    with full path              v : Write fpcdebug.txt with'#010+
   '**2*_    with full path              v : Write fpcdebug.txt with'#010+
   '**2*_z : Write output to stderr          lots of debugging info'#010+
   '**2*_z : Write output to stderr          lots of debugging info'#010+
-  '**2*_m<x>,<y> : Do not show messages numbered <x> and <y>'#010+
-  'F*1V<x>_Ap','pend '#039'-<x>'#039' to the used compiler binary name (e.g.'+
-  ' for version)'#010+
+  '**2*_m<x>,<y> : Do not show messages numbered <x> and ','<y>'#010+
+  'F*1V<x>_Append '#039'-<x>'#039' to the used compiler binary name (e.g. f'+
+  'or version)'#010+
   '**1W<x>_Target-specific options (targets)'#010+
   '**1W<x>_Target-specific options (targets)'#010+
   '3*2WA_Specify native type application (Windows)'#010+
   '3*2WA_Specify native type application (Windows)'#010+
   '4*2WA_Specify native type application (Windows)'#010+
   '4*2WA_Specify native type application (Windows)'#010+
-  'A*2WA_Specify native type application ','(Windows)'#010+
+  'A*2WA_Specify native typ','e application (Windows)'#010+
   '3*2Wb_Create a bundle instead of a library (Darwin)'#010+
   '3*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'P*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'P*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'p*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'a*2Wb_Create a bundle instead of a library (Darwin)'#010+
   'a*2Wb_Create a bundle instead of a library (Darwin)'#010+
-  'A*2Wb_Create a bundle ','instead of a library (Darwin)'#010+
+  'A*2Wb_Cr','eate a bundle instead of a library (Darwin)'#010+
   '4*2Wb_Create a bundle instead of a library (Darwin)'#010+
   '4*2Wb_Create a bundle instead of a library (Darwin)'#010+
   '3*2WB_Create a relocatable image (Windows, Symbian)'#010+
   '3*2WB_Create a relocatable image (Windows, Symbian)'#010+
   '3*2WB<x>_Set image base to <x> (Windows, Symbian)'#010+
   '3*2WB<x>_Set image base to <x> (Windows, Symbian)'#010+
-  '4*2WB_Create a relocatable image (Windows)'#010+
-  '4*2WB<x>_Set ','image base to <x> (Windows)'#010+
+  '4*2WB_Create a relocatable image (Windows)',#010+
+  '4*2WB<x>_Set image base to <x> (Windows)'#010+
   'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
   'A*2WB_Create a relocatable image (Windows, Symbian)'#010+
   'A*2WB<x>_Set image base to <x> (Windows, Symbian)'#010+
   'A*2WB<x>_Set image base to <x> (Windows, Symbian)'#010+
   '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
   '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+
-  '4*2WC_Specify console type application (Windows)'#010+
-  'A','*2WC_Specify console type application (Windows)'#010+
+  '4*2WC_Specify console type applicati','on (Windows)'#010+
+  'A*2WC_Specify console type application (Windows)'#010+
   'P*2WC_Specify console type application (Classic Mac OS)'#010+
   'P*2WC_Specify console type application (Classic Mac OS)'#010+
   '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
   '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
-  '4*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
-  'A*2WD_Use DE','FFILE to export functions of DLL or EXE (Windows)'#010+
+  '4*2WD_Use DEFFILE to export functions of DLL or EXE (Windows',')'#010+
+  'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+
   '3*2We_Use external resources (Darwin)'#010+
   '3*2We_Use external resources (Darwin)'#010+
   '4*2We_Use external resources (Darwin)'#010+
   '4*2We_Use external resources (Darwin)'#010+
   'a*2We_Use external resources (Darwin)'#010+
   'a*2We_Use external resources (Darwin)'#010+
   'A*2We_Use external resources (Darwin)'#010+
   'A*2We_Use external resources (Darwin)'#010+
-  'P*2We_Use external resources (Darwin)'#010,
+  'P*2We_Use external resou','rces (Darwin)'#010+
   'p*2We_Use external resources (Darwin)'#010+
   'p*2We_Use external resources (Darwin)'#010+
   '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
   '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+
   '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
   '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+
   '4*2WG_Specify graphic type application (Windows)'#010+
   '4*2WG_Specify graphic type application (Windows)'#010+
-  'A*2WG_Specify graphic type application',' (Windows)'#010+
+  'A*2WG_Specify graphic ty','pe application (Windows)'#010+
   'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
   'P*2WG_Specify graphic type application (Classic Mac OS)'#010+
   '3*2Wi_Use internal resources (Darwin)'#010+
   '3*2Wi_Use internal resources (Darwin)'#010+
   '4*2Wi_Use internal resources (Darwin)'#010+
   '4*2Wi_Use internal resources (Darwin)'#010+
   'a*2Wi_Use internal resources (Darwin)'#010+
   'a*2Wi_Use internal resources (Darwin)'#010+
   'A*2Wi_Use internal resources (Darwin)'#010+
   'A*2Wi_Use internal resources (Darwin)'#010+
-  'P*2Wi_Use internal re','sources (Darwin)'#010+
+  'P*2Wi_U','se internal resources (Darwin)'#010+
   'p*2Wi_Use internal resources (Darwin)'#010+
   'p*2Wi_Use internal resources (Darwin)'#010+
   '3*2WI_Turn on/off the usage of import sections (Windows)'#010+
   '3*2WI_Turn on/off the usage of import sections (Windows)'#010+
   '4*2WI_Turn on/off the usage of import sections (Windows)'#010+
   '4*2WI_Turn on/off the usage of import sections (Windows)'#010+
-  'A*2WI_Turn on/off the usage of import sections (Windows)'#010+
-  '8*2Wh_Use huge',' code for units (ignored for models with CODE in a uni'+
-  'que segment)'#010+
+  'A*2WI_Turn on/off the usage of import sections (Windows)'#010,
+  '8*2Wh_Use huge code for units (ignored for models with CODE in a uniqu'+
+  'e segment)'#010+
   '8*2Wm<x>_Set memory model'#010+
   '8*2Wm<x>_Set memory model'#010+
   '8*3WmTiny_Tiny memory model'#010+
   '8*3WmTiny_Tiny memory model'#010+
   '8*3WmSmall_Small memory model (default)'#010+
   '8*3WmSmall_Small memory model (default)'#010+
   '8*3WmMedium_Medium memory model'#010+
   '8*3WmMedium_Medium memory model'#010+
-  '8*3WmCompact_Compact memory model'#010+
-  '8*3WmLarge_La','rge memory model'#010+
+  '8*3WmCompact_Compact memory model',#010+
+  '8*3WmLarge_Large memory model'#010+
   '8*3WmHuge_Huge memory model'#010+
   '8*3WmHuge_Huge memory model'#010+
   '3*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   '3*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
   'n)'#010+
   '4*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   '4*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
   'n)'#010+
-  'p*2WM<x>_Minimum Mac OS X deployment version: 10.','4, 10.5.1, ... (Dar'+
+  'p*2WM<x>_Minimum Mac OS X deploymen','t version: 10.4, 10.5.1, ... (Dar'+
   'win)'#010+
   'win)'#010+
   'P*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'P*2WM<x>_Minimum Mac OS X deployment version: 10.4, 10.5.1, ... (Darwi'+
   'n)'#010+
   'n)'#010+
   '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
   '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
-  '4*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
-  'A*2','WN_Do not generate relocation code, needed for debugging (Windows'+
+  '4*2WN_Do not generate relocation code, needed for debugging',' (Windows'+
   ')'#010+
   ')'#010+
+  'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+
   'A*2Wp<x>_Specify the controller type; see fpc -i or fpc -iu for possib'+
   'A*2Wp<x>_Specify the controller type; see fpc -i or fpc -iu for possib'+
   'le values'#010+
   'le values'#010+
   'm*2Wp<x>_Specify the controller type; see fpc -i or fpc -iu for possib'+
   'm*2Wp<x>_Specify the controller type; see fpc -i or fpc -iu for possib'+
+  'le values',#010+
+  'V*2Wp<x>_Specify the controller type; see fpc -i or fpc -iu for possib'+
   'le values'#010+
   'le values'#010+
-  'V*2Wp<x>_Spec','ify the controller type; see fpc -i or fpc -iu for poss'+
-  'ible values'#010+
   '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+
   '3*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (iphonesim)'#010+
   '4*2WP<x>_Minimum iOS deployment version: 8.0, 8.0.2, ... (iphonesim)'#010+
   '4*2WP<x>_Minimum iOS deployment version: 8.0, 8.0.2, ... (iphonesim)'#010+
-  'a*2WP<x>_Minimum iOS deployment ver','sion: 7.0, 7.1.2, ... (Darwin)'#010+
+  'a*2WP<x>_Minimum iOS ','deployment version: 7.0, 7.1.2, ... (Darwin)'#010+
   'A*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+
   'A*2WP<x>_Minimum iOS deployment version: 3.0, 5.0.1, ... (Darwin)'#010+
   '3*2WR_Generate relocation code (Windows)'#010+
   '3*2WR_Generate relocation code (Windows)'#010+
   '4*2WR_Generate relocation code (Windows)'#010+
   '4*2WR_Generate relocation code (Windows)'#010+
   'A*2WR_Generate relocation code (Windows)'#010+
   'A*2WR_Generate relocation code (Windows)'#010+
-  '8*2Wt<x>_Set the tar','get executable format'#010+
+  '8*2Wt<','x>_Set the target executable format'#010+
   '8*3Wtexe_Create a DOS .EXE file (default)'#010+
   '8*3Wtexe_Create a DOS .EXE file (default)'#010+
   '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+
   '8*3Wtcom_Create a DOS .COM file (requires tiny memory model)'#010+
   'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
   'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+
   '**2WX_Enable executable stack (Linux)'#010+
   '**2WX_Enable executable stack (Linux)'#010+
-  '**1X_Executable opti','ons:'#010+
+  '**1X_E','xecutable options:'#010+
   '**2X9_Generate linkerscript for GNU Binutils ld older than version 2.1'+
   '**2X9_Generate linkerscript for GNU Binutils ld older than version 2.1'+
   '9.1 (Linux)'#010+
   '9.1 (Linux)'#010+
   '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
   '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+
   'ux)'#010+
   'ux)'#010+
-  '**2Xd_Do not search default library path (sometimes required for cross'+
-  '-compilin','g when not using -XR)'#010+
+  '**2Xd_Do not search default library path (sometimes required for ','cro'+
+  'ss-compiling when not using -XR)'#010+
   '**2Xe_Use external linker'#010+
   '**2Xe_Use external linker'#010+
   '**2Xf_Substitute pthread library name for linking (BSD)'#010+
   '**2Xf_Substitute pthread library name for linking (BSD)'#010+
   '**2Xg_Create debuginfo in a separate file and add a debuglink section '+
   '**2Xg_Create debuginfo in a separate file and add a debuglink section '+
   'to executable'#010+
   'to executable'#010+
-  '**2XD_Try to link units dynamically      (defines FP','C_LINK_DYNAMIC)'#010+
+  '**2XD_Try to link units dynamically   ','   (defines FPC_LINK_DYNAMIC)'#010+
   '**2Xi_Use internal linker'#010+
   '**2Xi_Use internal linker'#010+
   '**2XLA_Define library substitutions for linking'#010+
   '**2XLA_Define library substitutions for linking'#010+
   '**2XLO_Define order of library linking'#010+
   '**2XLO_Define order of library linking'#010+
   '**2XLD_Exclude default order of standard libraries'#010+
   '**2XLD_Exclude default order of standard libraries'#010+
   '**2Xm_Generate link map'#010+
   '**2Xm_Generate link map'#010+
-  '**2XM<x>_Set the name of the '#039'main'#039' ','program routine (default'+
+  '**2XM<x>_Set the name ','of the '#039'main'#039' program routine (default'+
   ' is '#039'main'#039')'#010+
   ' is '#039'main'#039')'#010+
   '**2Xn_Use target system native linker instead of GNU ld (Solaris, AIX)'+
   '**2Xn_Use target system native linker instead of GNU ld (Solaris, AIX)'+
   #010+
   #010+
   'F*2Xp<x>_First search for the compiler binary in the directory <x>'#010+
   'F*2Xp<x>_First search for the compiler binary in the directory <x>'#010+
-  '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+
-  '**2Xr<x>_S','et the linker'#039's rlink-path to <x> (needed for cross co'+
-  'mpile, see the ld manual for more information) (BeOS, Linux)'#010+
+  '**2XP<x>_Prepend the binutils names with the prefix ','<x>'#010+
+  '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+
+  'ile, see the ld manual for more information) (BeOS, Linux)'#010+
   '**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
   '**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+
   ', Linux, Mac OS, Solaris)'#010+
   ', Linux, Mac OS, Solaris)'#010+
-  '**2Xs_Strip all symbols from ','executable'#010+
+  '**2Xs_Strip all',' symbols from executable'#010+
   '**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+
   '**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+
   '**2Xt_Link with static libraries (-static is passed to linker)'#010+
   '**2Xt_Link with static libraries (-static is passed to linker)'#010+
   '**2Xv_Generate table for Virtual Entry calls'#010+
   '**2Xv_Generate table for Virtual Entry calls'#010+
-  '**2XV_Use VLink as external linker       (default o','n Amiga, MorphOS)'+
+  '**2XV_Use VLink as external linker   ','    (default on Amiga, MorphOS)'+
   #010+
   #010+
   '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
   '**2XX_Try to smartlink units             (defines FPC_LINK_SMART)'#010+
   '**1*_'#010+
   '**1*_'#010+

+ 2 - 7
compiler/powerpc/rappcgas.pas

@@ -339,13 +339,8 @@ Unit rappcgas;
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                     checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l)
                   inc(oper.opr.localsymofs,l)
                 end;
                 end;
               OPR_CONSTANT :
               OPR_CONSTANT :

+ 2 - 7
compiler/powerpc64/rappcgas.pas

@@ -349,13 +349,8 @@ var
           { don't allow direct access to fields of parameters, because that
           { don't allow direct access to fields of parameters, because that
             will generate buggy code. Allow it only for explicit typecasting }
             will generate buggy code. Allow it only for explicit typecasting }
           if hasdot and
           if hasdot and
-            (not oper.hastype) and
-            (oper.opr.localsym.typ=paravarsym) and
-            (not(po_assembler in current_procinfo.procdef.procoptions) or
-             (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-             (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-              not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-            Message(asmr_e_cannot_access_field_directly_for_parameters);
+            (not oper.hastype) then
+            checklocalsubscript(oper.opr.localsym);
           inc(oper.opr.localsymofs, l)
           inc(oper.opr.localsymofs, l)
         end;
         end;
       OPR_CONSTANT:
       OPR_CONSTANT:

+ 59 - 1
compiler/rasm.pas

@@ -27,6 +27,7 @@ unit rasm;
 
 
     uses
     uses
       cclasses,
       cclasses,
+      symsym,
       rabase,
       rabase,
       aasmbase,
       aasmbase,
       aasmdata,
       aasmdata,
@@ -49,12 +50,21 @@ unit rasm;
          destructor destroy;override;
          destructor destroy;override;
          function createlocallabel(const s: string; var hl: tasmlabel; emit: boolean): boolean;
          function createlocallabel(const s: string; var hl: tasmlabel; emit: boolean): boolean;
          procedure checklocallabels;
          procedure checklocallabels;
+       protected
+         { allow subscripting a local if it is a:
+            1) pointer to a records/object, or a class instance pointer, passed in a register to a pure assembler routine
+            2) record located on the stack (passed as parameter, or local variable)
+         }
+         procedure checklocalsubscript(sym: tabstractnormalvarsym); virtual;
        end;
        end;
 
 
   implementation
   implementation
 
 
     uses
     uses
-      verbose;
+      verbose,
+      procinfo,
+      symconst,symdef,
+      paramgr;
 
 
     type
     type
       TLocalLabel = class(TFPHashObject)
       TLocalLabel = class(TFPHashObject)
@@ -129,4 +139,52 @@ unit rasm;
         locallabels.Clear;
         locallabels.Clear;
       end;
       end;
 
 
+
+    procedure tasmreader.checklocalsubscript(sym: tabstractnormalvarsym);
+      var
+        isimplicitpointer: boolean;
+      begin
+        isimplicitpointer:=
+          (sym.typ=paravarsym) and
+          (is_implicit_pointer_object_type(sym.vardef) or
+           paramanager.push_addr_param(sym.varspez,sym.vardef,current_procinfo.procdef.proccalloption));
+
+        { sym.initiallloc/localloc is not yet initialised here }
+
+        { pointer parameter to aggregate passed in register to pure assembler routine }
+        if (po_assembler in current_procinfo.procdef.procoptions) and
+           (sym.typ=paravarsym) and
+           (tparavarsym(sym).paraloc[calleeside].location^.loc=LOC_REGISTER) and
+           isimplicitpointer then
+          exit;
+
+        { aggregate parameter passed on the stack to a pure assembler routine }
+        if (po_assembler in current_procinfo.procdef.procoptions) and
+           (sym.typ=paravarsym) and
+           { sym.localloc is not yet initialised here for pure assembler routines }
+           (tparavarsym(sym).paraloc[calleeside].location^.loc in [LOC_REFERENCE,LOC_CREFERENCE]) and
+           not isimplicitpointer then
+          exit;
+
+        { aggregate parameter located on the stack for a non-assembler routine
+          (locals accessed from assembler code are never kept in registers) }
+        if not(po_assembler in current_procinfo.procdef.procoptions) and
+           (sym.typ=paravarsym) and
+           not isimplicitpointer then
+          exit;
+
+        { local aggregate located on the stack (locals accessed from assembler
+          code are never kept in registers) }
+        if ((sym.typ=localvarsym) or
+           { even if a parameter is passed by reference, it will be copied to
+             a local if it's a value parameter to a non assembler routines }
+            (not(po_assembler in current_procinfo.procdef.procoptions) and
+             (sym.typ=paravarsym) and
+             (sym.varspez=vs_value))) and
+           not is_implicit_pointer_object_type(sym.vardef) then
+          exit;
+
+        Message(asmr_e_cannot_access_field_directly_for_parameters);
+      end;
+
 end.
 end.

+ 2 - 7
compiler/sparcgen/racpugas.pas

@@ -226,13 +226,8 @@ Interface
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                    checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l)
                   inc(oper.opr.localsymofs,l)
                 end;
                 end;
               OPR_CONSTANT :
               OPR_CONSTANT :

+ 2 - 7
compiler/x86/rax86att.pas

@@ -459,13 +459,8 @@ Implementation
                   { don't allow direct access to fields of parameters, because that
                   { don't allow direct access to fields of parameters, because that
                     will generate buggy code. Allow it only for explicit typecasting }
                     will generate buggy code. Allow it only for explicit typecasting }
                   if hasdot and
                   if hasdot and
-                     (not oper.hastype) and
-                     (oper.opr.localsym.typ=paravarsym) and
-                     (not(po_assembler in current_procinfo.procdef.procoptions) or
-                      (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                      (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                       not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                    Message(asmr_e_cannot_access_field_directly_for_parameters);
+                     (not oper.hastype) then
+                    checklocalsubscript(oper.opr.localsym);
                   inc(oper.opr.localsymofs,l);
                   inc(oper.opr.localsymofs,l);
                   inc(oper.opr.localconstoffset,l);
                   inc(oper.opr.localconstoffset,l);
                 end;
                 end;

+ 2 - 7
compiler/x86/rax86int.pas

@@ -1733,13 +1733,8 @@ Unit Rax86int;
                         { don't allow direct access to fields of parameters, because that
                         { don't allow direct access to fields of parameters, because that
                           will generate buggy code. Allow it only for explicit typecasting
                           will generate buggy code. Allow it only for explicit typecasting
                           and when the parameter is in a register (delphi compatible) }
                           and when the parameter is in a register (delphi compatible) }
-                        if (not oper.hastype) and
-                           (oper.opr.localsym.typ=paravarsym) and
-                           (not(po_assembler in current_procinfo.procdef.procoptions) or
-                            (tparavarsym(oper.opr.localsym).paraloc[calleeside].location^.loc<>LOC_REGISTER) or
-                            (not is_implicit_pointer_object_type(oper.opr.localsym.vardef) and
-                             not paramanager.push_addr_param(oper.opr.localsym.varspez,oper.opr.localsym.vardef,current_procinfo.procdef.proccalloption))) then
-                          Message(asmr_e_cannot_access_field_directly_for_parameters);
+                        if (not oper.hastype) then
+                          checklocalsubscript(oper.opr.localsym);
 
 
                         oper.opr.localforceref:=true;
                         oper.opr.localforceref:=true;
                         inc(oper.opr.localsymofs,toffset);
                         inc(oper.opr.localsymofs,toffset);

+ 54 - 0
tests/webtbs/tw32318.pp

@@ -0,0 +1,54 @@
+{ %cpu=i386}
+
+{$ifdef fpc}
+{$mode delphi}
+{$endif fpc}
+
+function MakeProcInstanceData(M: TMethod): Pointer;
+begin
+    asm
+      MOV EAX, M.Data
+      MOV @RESULT, EAX
+    end;
+end;
+
+function MakeProcInstanceCode(M: TMethod): Pointer;
+begin
+    asm
+      MOV EAX, M.Code
+      MOV @RESULT, EAX
+    end;
+end;
+
+function MakeProcInstanceDataAsm(M: TMethod): Pointer; assembler;
+asm
+  MOV EAX, M.Data
+  MOV @RESULT, EAX
+end;
+
+function MakeProcInstanceCodeAsm(M: TMethod): Pointer; assembler;
+asm
+  MOV EAX, M.Code
+  MOV @RESULT, EAX
+end;
+
+var
+  m: tmethod;
+begin
+  m.code:=pointer(1);
+  m.data:=pointer(2);
+  if MAkeProcInstanceData(M)<>pointer(2) then
+    halt(1);
+  m.code:=pointer(1);
+  m.data:=pointer(2);
+  if MAkeProcInstanceCode(M)<>pointer(1) then
+    halt(2);
+  m.code:=pointer(1);
+  m.data:=pointer(2);
+  if MAkeProcInstanceDataAsm(M)<>pointer(2) then
+    halt(3);
+  m.code:=pointer(1);
+  m.data:=pointer(2);
+  if MAkeProcInstanceCodeAsm(M)<>pointer(1) then
+    halt(4);
+end.