Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion compiler/symtable.pas
Original file line number Diff line number Diff line change
Expand Up @@ -3243,7 +3243,8 @@ if defowner.typ=recorddef then
assigned(tstoreddef(def).genericdef) and
assigned(def.typesym) then
result:=make_mangledname('',tstoreddef(def).genericdef.owner,def.typesym.name)
else if def.typ in [recorddef,objectdef] then
else if (def.typ in [recorddef,objectdef]) and
not (df_unique in def.defoptions) then
result:=make_mangledname('',tabstractrecorddef(def).symtable,'')
else
result:=make_mangledname('',def.owner,def.typesym.name);
Expand Down
80 changes: 80 additions & 0 deletions tests/webtbs/tw41564.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
program tw41564;

{$mode delphi}

type
TBase = record
Value: Integer;
end;
TAlias = TBase;
TFirst = type TBase;
TSecond = type TBase;

TBaseHelper = record helper for TBase
function Marker: Integer;
class function StaticMarker: Integer; static;
end;

TFirstHelper = record helper for TFirst
function Marker: Integer;
class function StaticMarker: Integer; static;
end;

TSecondHelper = record helper for TSecond
function Marker: Integer;
class function StaticMarker: Integer; static;
end;

function TBaseHelper.Marker: Integer;
begin
Result := 10;
end;

class function TBaseHelper.StaticMarker: Integer;
begin
Result := 20;
end;

function TFirstHelper.Marker: Integer;
begin
Result := 11;
end;

class function TFirstHelper.StaticMarker: Integer;
begin
Result := 21;
end;

function TSecondHelper.Marker: Integer;
begin
Result := 12;
end;

class function TSecondHelper.StaticMarker: Integer;
begin
Result := 22;
end;

var
Base: TBase;
AliasValue: TAlias;
First: TFirst;
Second: TSecond;
begin
if Base.Marker <> 10 then
Halt(1);
if AliasValue.Marker <> 10 then
Halt(2);
if First.Marker <> 11 then
Halt(3);
if Second.Marker <> 12 then
Halt(4);
if TBase.StaticMarker <> 20 then
Halt(5);
if TAlias.StaticMarker <> 20 then
Halt(6);
if TFirst.StaticMarker <> 21 then
Halt(7);
if TSecond.StaticMarker <> 22 then
Halt(8);
end.