mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 21:09:27 +02:00
* handle absolute on strings correctly for dwarf debug info, resolves #39816
This commit is contained in:
parent
a19add9c88
commit
e28238da9b
@ -2200,24 +2200,52 @@ implementation
|
|||||||
end;
|
end;
|
||||||
sl_vec:
|
sl_vec:
|
||||||
begin
|
begin
|
||||||
if not assigned(currdef) or
|
if not assigned(currdef) then
|
||||||
(currdef.typ<>arraydef) then
|
|
||||||
internalerror(2009031201);
|
internalerror(2009031201);
|
||||||
{ can't handle offsets with indirections yet }
|
{ can't handle offsets with indirections yet }
|
||||||
if indirection then
|
if indirection then
|
||||||
exit;
|
exit;
|
||||||
if not is_packed_array(currdef) then
|
case currdef.typ of
|
||||||
elesize:=tarraydef(currdef).elesize
|
arraydef:
|
||||||
else
|
begin
|
||||||
begin
|
if not is_packed_array(currdef) then
|
||||||
elesize:=tarraydef(currdef).elepackedbitsize;
|
elesize:=tarraydef(currdef).elesize
|
||||||
{ can't calculate the address of a non-byte aligned element }
|
else
|
||||||
if (elesize mod 8)<>0 then
|
begin
|
||||||
exit;
|
elesize:=tarraydef(currdef).elepackedbitsize;
|
||||||
elesize:=elesize div 8;
|
{ can't calculate the address of a non-byte aligned element }
|
||||||
end;
|
if (elesize mod 8)<>0 then
|
||||||
inc(offset,(symlist^.value.svalue-tarraydef(currdef).lowrange)*elesize);
|
exit;
|
||||||
currdef:=tarraydef(currdef).elementdef;
|
elesize:=elesize div 8;
|
||||||
|
end;
|
||||||
|
inc(offset,(symlist^.value.svalue-tarraydef(currdef).lowrange)*elesize);
|
||||||
|
currdef:=tarraydef(currdef).elementdef;
|
||||||
|
end;
|
||||||
|
stringdef:
|
||||||
|
begin
|
||||||
|
case tstringdef(currdef).stringtype of
|
||||||
|
st_widestring,st_unicodestring:
|
||||||
|
begin
|
||||||
|
inc(offset,(symlist^.value.svalue-1)*2);
|
||||||
|
currdef:=cwidechartype;
|
||||||
|
end;
|
||||||
|
st_shortstring:
|
||||||
|
begin
|
||||||
|
inc(offset,symlist^.value.svalue);
|
||||||
|
currdef:=cansichartype;
|
||||||
|
end;
|
||||||
|
st_ansistring:
|
||||||
|
begin
|
||||||
|
inc(offset,symlist^.value.svalue-1);
|
||||||
|
currdef:=cansichartype;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
Internalerror(2022070502);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
internalerror(2022070501);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
internalerror(2009031403);
|
internalerror(2009031403);
|
||||||
|
11
tests/webtbs/tw39816.pp
Normal file
11
tests/webtbs/tw39816.pp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ %OPT=-g }
|
||||||
|
program Project1;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
Var
|
||||||
|
S:String[100];
|
||||||
|
C:Char absolute S[1];
|
||||||
|
begin
|
||||||
|
s:='asdf';
|
||||||
|
writeln(s);
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user