-- Zusammenführen von r43183 in ».«:

U    compiler/dbgdwarf.pas
-- Aufzeichnung der Informationen für Zusammenführung von r43183 in ».«:
 U   .
-- Zusammenführen von r47286 in ».«:
U    compiler/symdef.pas
-- Aufzeichnung der Informationen für Zusammenführung von r47286 in ».«:
 G   .
-- Zusammenführen von r44070 in ».«:
U    rtl/objpas/sysutils/sysstr.inc
-- Aufzeichnung der Informationen für Zusammenführung von r44070 in ».«:
 G   .

git-svn-id: branches/fixes_3_2@47912 -
This commit is contained in:
florian 2020-12-30 14:52:55 +00:00
parent 643d7c4d02
commit 06a0e48958
3 changed files with 35 additions and 11 deletions

View File

@ -4401,15 +4401,21 @@ implementation
else
append_entry(DW_TAG_structure_type,true,[]);
append_attribute(DW_AT_byte_size,DW_FORM_udata,[tobjectsymtable(def.symtable).datasize]);
// The pointer to the class-structure is hidden. The debug-information
// does not contain an implicit pointer, but the data-adress is dereferenced here.
// In case of a nil-pointer, report the class as being unallocated.
append_block1(DW_AT_allocated,2);
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_push_object_address)));
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_deref)));
append_block1(DW_AT_data_location,2);
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_push_object_address)));
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_deref)));
{ an old style object and a cpp class are accessed directly, so we do not need DW_AT_allocated and DW_AT_data_location tags,
see issue #36017 }
if not(is_object(def) or is_cppclass(def)) then
begin
{ The pointer to the class-structure is hidden. The debug-information
does not contain an implicit pointer, but the data-adress is dereferenced here.
In case of a nil-pointer, report the class as being unallocated.
}
append_block1(DW_AT_allocated,2);
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_push_object_address)));
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_deref)));
append_block1(DW_AT_data_location,2);
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_push_object_address)));
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_deref)));
end;
finish_entry;
end;

View File

@ -170,6 +170,7 @@ interface
constructor ppuload(ppufile:tcompilerppufile);
function getcopy : tstoreddef;override;
function GetTypeName:string;override;
function alignment : shortint;override;
{ do not override this routine in platform-specific subclasses,
override ppuwrite_platform instead }
procedure ppuwrite(ppufile:tcompilerppufile);override;final;
@ -3292,6 +3293,12 @@ implementation
end;
function tvariantdef.alignment: shortint;
begin
result:=search_system_type('TVARDATA').typedef.alignment;
end;
procedure tvariantdef.ppuwrite(ppufile:tcompilerppufile);
begin
inherited ppuwrite(ppufile);

View File

@ -1268,7 +1268,18 @@ Begin
P:=Pos(FormatSettings.DecimalSeparator,S);
If (P<>0) Then
S[P] := '.';
Val(trim(S),Value,E);
try
Val(trim(S),Value,E);
{ on x87, a floating point exception may be pending in case of an invalid
input value -> trigger it now }
{$if defined(cpui386) or (defined(cpux86_64) and not(defined(win64))) or defined(cpui8086)}
asm
fwait
end;
{$endif}
except
E:=1;
end;
Result:=(E=0);
End;
@ -1328,7 +1339,7 @@ Begin
end;
{ on x87, a floating point exception may be pending in case of an invalid
input value -> trigger it now }
{$ifdef cpux86}
{$if defined(cpui386) or (defined(cpux86_64) and not(defined(win64))) or defined(cpui8086)}
asm
fwait
end;