From: Andris Pavenis Organization: AI LU To: djgpp-workers AT delorie DOT com Subject: Re: problem with data alignment with egcs-19990602 Date: Tue, 8 Jun 1999 10:27:08 +0000 X-Mailer: KMail [version 1.0.21] Content-Type: text/plain Cc: egcs-bugs AT egcs DOT cygnus DOT com References: <99060717171200 DOT 00403 AT hal> MIME-Version: 1.0 Message-Id: <99060810411500.00968@hal> Content-Transfer-Encoding: 8bit Reply-To: djgpp-workers AT delorie DOT com Problem seems to be related with use of #pragma pack(): I had to put definition of some structures between #pragma pack(1) and #pragma pack() It looks that with gcc 2.95 tree the second line (#pragma pack()) is ignored and as result I'm getting wrong code. - using __attribute__(packed) instead fixes the problem - no changes needed for egcs-1.1.2 (#pragma pack() works as I expect) Below is simple test example that ilustrates the problem ---------------------------------------------------- #include #include #pragma pack(1) #pragma pack() class Test1 { public: char a; long b; Test1 (void) { printf ("%p\n",(((char *) & b)-((char *) & a))); } }; int main (void) { Test1 x; return 0; } ---------------------------------------------------- With gcc-1.1.2 I'm getting output 4 With gcc-2.95 prerelease I'm getting 1 So we should either have a warning from compiler that #pragma pack() should not be used or this problem must be fixed Andris On Mon, 07 Jun 1999, Andris Pavenis wrote: > On Mon, 07 Jun 1999, pavenis AT lanet DOT lv wrote: > > compiler generates code which access class member > > via wrong address (result is SIGSEGV for me). Below is > > some test data I got (I simply copied this from rhide watch > > window and added some comments) > > > > this: (TEphApp *) 0x240f20 > > App: (TEphApp *) 0x240f20 > > &slrcfg: (LoadedConfigFile *) 0x240f84 > > &App->slrcfg: (LoadedConfigFile *) 0x240f84 > > &satinfo: (LoadedConfigFile *) 0x240fa5 - false address > > (but this address is used both when I call satinfo.foo() and > > App->satinfo.foo() (name changed) from member function) > > &(App->satinfo): (LoadedConfigFile *) 0x240fa8 - right value (I can > > get contents here) > > > > I have this problem in rather big application (TVision + different > > other stuff, TEphApp is derived from TApplication such stuff as > > virtual base classes etc is present) only. > > > > I tried to reproduce this problem in a simple test example but didn't > > succeed. Perhaps I'll check the same sometime under Linux as this > > app can be built (and it should normally work) also under Linux. > > > > I reproduced the same thing with egcs-19990601 (I updated gcc 2.95 > branch with CVS then) under Linux (kernel 2.2.9, glibc-2.1.1). > As I don't have good test example to send then perhaps I'll retry the same > with later snapshots. Perhaps it would be worth to try also with > gcc-2.96 tree to see whether something changes. > > Andris