-- 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 else
append_entry(DW_TAG_structure_type,true,[]); append_entry(DW_TAG_structure_type,true,[]);
append_attribute(DW_AT_byte_size,DW_FORM_udata,[tobjectsymtable(def.symtable).datasize]); append_attribute(DW_AT_byte_size,DW_FORM_udata,[tobjectsymtable(def.symtable).datasize]);
// The pointer to the class-structure is hidden. The debug-information { 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,
// does not contain an implicit pointer, but the data-adress is dereferenced here. see issue #36017 }
// In case of a nil-pointer, report the class as being unallocated. if not(is_object(def) or is_cppclass(def)) then
append_block1(DW_AT_allocated,2); begin
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_push_object_address))); { The pointer to the class-structure is hidden. The debug-information
current_asmdata.asmlists[al_dwarf_info].concat(tai_const.create_8bit(ord(DW_OP_deref))); does not contain an implicit pointer, but the data-adress is dereferenced here.
append_block1(DW_AT_data_location,2); In case of a nil-pointer, report the class as being unallocated.
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_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; finish_entry;
end; end;

View File

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

View File

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