I have a cut down version of a bug I have found:- File 1 (main.pas) ================= program main(output) ; procedure initregcons ; external ; var curpseudoreg : packed -32768..32767 ; external ; begin writeln( 'main: sizeof curpseudoreg=' , sizeof( curpseudoreg ) ) ; writeln( 'main: alignof curpseudoreg=' , alignof( curpseudoreg ) ) ; curpseudoreg := 5 ; writeln( 'main: curpseudoreg initially set to ' , curpseudoreg ) ; initregcons ; writeln( 'main: curpseudoreg=' , curpseudoreg ) ; end. File 2 (regabs.pas) =================== module regabs ; var curpseudoreg : packed -32768..32767 ; external ; var curpseudoreg : packed -32768..32767 ; procedure initregcons ; external ; procedure initregcons ; begin writeln( 'initregcons: sizeof curpseudoreg=' , sizeof( curpseudoreg ) ) ; writeln( 'initregcons: alignof curpseudoreg=' , alignof( curpseudoreg ) ) ; writeln( 'initregcons: curpseudoreg=' , curpseudoreg ) ; curpseudoreg := 99 ; writeln( 'initregcons: curpseudoreg now set to ' , curpseudoreg ) ; end ; end. I compile them:- gpc -Wall main.pas regabs.pas and there are no warnings. By the way gpc -v gives:- Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.8.1/specs gpc version 20010924, based on gcc-2.8.1 When I run the program I get:- main: sizeof curpseudoreg=2 main: alignof curpseudoreg=2 main: curpseudoreg initially set to 5 initregcons: sizeof curpseudoreg=4 initregcons: alignof curpseudoreg=4 initregcons: curpseudoreg=327680 initregcons: curpseudoreg now set to 99 main: curpseudoreg=0 So the quuestion is, why is the sizeof and alignog different in the two modules? Cheers, Martin P.S. I am testing using integer(16) for this example but I have other similar problems (different packed ranges).