{ Source provided for Free Pascal Bug Report 3360 }
{ Submitted by "Thomas Schatzl" on  2004-10-17 }
{ e-mail:  }
{$R-}
{$Q-}

type
        tdef = record
          f1 : longint;
          f2 : longint;
        end;

        fileof = file of byte;

        enum = (a,b,c,d=10);

        tset1 = set of enum;
        tset2 = set of byte;

        ttdef = type tdef;
        tfile = type file;
        ttext = type text;
        tfileof = type fileof;
        tvariant = type variant;
        //!! tinterfacedobject2 = type tinterfacedobject;
        tenum = type enum;
        ttset1 = type tset1;
        ttset2 = type tset2;

var
  e1 : enum;
  e2 : tenum;
  def1 : tdef;
  def2 : ttdef;

begin
  { enums }
  e1:=a;
  e2:=a;
  e1:=d;
  e2:=d;

  { sets }
  if ord(e1)<>ord(e2) then
    halt(1);
  if sizeof(tset1)<>sizeof(ttset1) then
    halt(2);
  if sizeof(tset2)<>sizeof(ttset2) then
    halt(3);

  { records }
  def1.f1:=$deadbeef;
  def1.f2:=$d0d0d0d0;
  if sizeof(def1)<>sizeof(def2) then
    halt(4);

  move(def1,def2,sizeof(def1));

  if (def1.f1<>def2.f1) or
    (def1.f2<>def2.f2) then
    halt(5);

  writeln('ok');
end.