[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #11 from jmichae3 at yahoo dot com 2009-04-03 09:02 --- I get perfect code with the borland compiler packing switch with C++ code. it would be nice if gcc could do the same in C++. I don't necessarily have to have -O3, but I need to be able to pack structs somehow so I don't end up with holes. the structs are required for BIOS I/O or other things as well. any holes will render the I/O useless as I use sizeof() and it can be fooled with holes. any workarounds? sure-fire pragmas? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #1 from jmichae3 at yahoo dot com 2009-03-09 06:32 --- Created an attachment (id=17420) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17420action=view) -fpack-struct -O3 with iostream .ii file g++ -v -save-temps -fpack-struct -O3 io.cpp this is the generated io.ii file. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #2 from jmichae3 at yahoo dot com 2009-03-09 06:41 --- Created an attachment (id=17421) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17421action=view) -fpack-struct with iostream .ii file g++ -v -save-temps -fpack-struct io.cpp both attachments ( .ii files) are from gcc 3.4.5. the results are different, but the errors are the same regardless of compiler version. this is a single .ii file attached. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #3 from jmichae3 at yahoo dot com 2009-03-09 06:45 --- Created an attachment (id=17422) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17422action=view) io.cpp, an offending source file problem is it #includes iostream if -fpack-struct is used. that is all that is necessary. will have more bad examples later that are simpler which show the problem. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #4 from jmichae3 at yahoo dot com 2009-03-09 06:50 --- Created an attachment (id=17423) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17423action=view) source that #includes istream and fails just as miserably with -fpack-struct C:\prj\test\iostreamdosg++ -v -save-temps -fpack-struct i.cpp Reading specs from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi th-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --dis able-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --d isable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --with out-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enabl e-hash-synchronization --enable-libstdcxx-debug Thread model: win32 gcc version 3.4.5 (mingw-vista special r3) c:/MinGW/bin/../libexec/gcc/mingw32/3.4.5/cc1plus.exe -E -quiet -v -iprefix c:\ MinGW\bin/../lib/gcc/mingw32/3.4.5/ i.cpp -fpack-struct -o i.ii ignoring nonexistent directory c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../. ./mingw32/include ignoring nonexistent directory /mingw/lib/gcc/mingw32/3.4.5/../../../../mingw32 /include #include ... search starts here: #include ... search starts here: c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5 c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/mingw32 c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/backward c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/include /mingw/lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5 /mingw/lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/mingw32 /mingw/lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/backward /mingw/lib/gcc/mingw32/3.4.5/../../../../include /mingw/include /mingw/lib/gcc/mingw32/3.4.5/include /mingw/include End of search list. c:/MinGW/bin/../libexec/gcc/mingw32/3.4.5/cc1plus.exe -fpreprocessed i.ii -quie t -dumpbase i.cpp -auxbase i -version -fpack-struct -o i.s GNU C++ version 3.4.5 (mingw-vista special r3) (mingw32) compiled by GNU C version 3.4.5 (mingw-vista special r3). GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 In file included from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ c++/3.4.5/ios:49, from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ c++/3.4.5/istream:45, from i.cpp:1: c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `std::_Ios_Fmtflags std::ios_base::setf(std::_Ios_Fmtfla gs)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:579: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `std::_Ios_Fmtflags std::ios_base::setf(std::_Ios_Fmtfla gs, std::_Ios_Fmtflags)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:596: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:597: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `void std::ios_base::unsetf(std::_Ios_Fmtflags)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:608: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `long int std::ios_base::iword(int)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:740: error: cannot bind packed field `__word-std::ios_base::_Words::_M_iwor d' to `long int' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `void* std::ios_base::pword(int)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:761: error: cannot bind packed field `__word-std::ios_base::_Words::_M_pwor d' to `void*' C:\prj\test\iostreamdostype i.cpp #include istream int main(void) { return 0; } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #5 from jmichae3 at yahoo dot com 2009-03-09 06:55 --- Created an attachment (id=17424) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17424action=view) source that #includes fstream which also fails miserably with -fpack-struct new attachment: source for f.cpp C:\prj\test\iostreamdostype f.cpp #include fstream int main(void) { return 0; } C:\prj\test\iostreamdosg++ -v -save-temps -fpack-struct f.cpp Reading specs from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi th-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --dis able-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --d isable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --with out-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enabl e-hash-synchronization --enable-libstdcxx-debug Thread model: win32 gcc version 3.4.5 (mingw-vista special r3) c:/MinGW/bin/../libexec/gcc/mingw32/3.4.5/cc1plus.exe -E -quiet -v -iprefix c:\ MinGW\bin/../lib/gcc/mingw32/3.4.5/ f.cpp -fpack-struct -o f.ii ignoring nonexistent directory c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../. ./mingw32/include ignoring nonexistent directory /mingw/lib/gcc/mingw32/3.4.5/../../../../mingw32 /include #include ... search starts here: #include ... search starts here: c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5 c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/mingw32 c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/backward c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/include /mingw/lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5 /mingw/lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/mingw32 /mingw/lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/backward /mingw/lib/gcc/mingw32/3.4.5/../../../../include /mingw/include /mingw/lib/gcc/mingw32/3.4.5/include /mingw/include End of search list. c:/MinGW/bin/../libexec/gcc/mingw32/3.4.5/cc1plus.exe -fpreprocessed f.ii -quie t -dumpbase f.cpp -auxbase f -version -fpack-struct -o f.s GNU C++ version 3.4.5 (mingw-vista special r3) (mingw32) compiled by GNU C version 3.4.5 (mingw-vista special r3). GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 In file included from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ c++/3.4.5/ios:49, from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ c++/3.4.5/istream:45, from c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/ c++/3.4.5/fstream:45, from f.cpp:1: c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `std::_Ios_Fmtflags std::ios_base::setf(std::_Ios_Fmtfla gs)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:579: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `std::_Ios_Fmtflags std::ios_base::setf(std::_Ios_Fmtfla gs, std::_Ios_Fmtflags)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:596: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:597: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `void std::ios_base::unsetf(std::_Ios_Fmtflags)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:608: error: cannot bind packed field `((std::ios_base*)this)-std::ios_base: :_M_flags' to `std::_Ios_Fmtflags' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `long int std::ios_base::iword(int)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:740: error: cannot bind packed field `__word-std::ios_base::_Words::_M_iwor d' to `long int' c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h: In member function `void* std::ios_base::pword(int)': c:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/ios_bas e.h:761: error: cannot bind packed field `__word-std::ios_base::_Words::_M_pwor d' to `void*' C:\prj\test\iostreamdos -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #6 from jmichae3 at yahoo dot com 2009-03-09 06:57 --- Created an attachment (id=17425) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17425action=view) f.ii for fstream problem -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #7 from jmichae3 at yahoo dot com 2009-03-09 06:59 --- Created an attachment (id=17426) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17426action=view) i.ii for istream problem -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #8 from dannysmith at users dot sourceforge dot net 2009-03-09 07:52 --- From gcc.info: *Warning:* the `-fpack-struct' switch causes GCC to generate code that is not binary compatible with code generated without that switch. Additionally, it makes the code suboptimal. Use it to conform to a non-default application binary interface. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #9 from rguenth at gcc dot gnu dot org 2009-03-09 15:37 --- This flag isn't supposed to be used with libstdc++. -- rguenth at gcc dot gnu dot org changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution||INVALID http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404
[Bug c++/39404] -fpack-struct causes iostream to error, -O3 makes problem worse
--- Comment #10 from jmichae3 at yahoo dot com 2009-03-09 20:12 --- I didn't read that in the documentation. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39404