Results of a test mass rebuild of rawhide-20090126 with gcc-4.4.0-0.9
Jakub Jelinek
jakub at redhat.com
Tue Feb 3 15:48:36 UTC 2009
Hi!
In the past few days I've done a mass rebuild of rawhide-20090126
in mock with gcc-4.4.0-0.9 (and corresponding libtool).
6228 packages were successfully built, for the rest I've tried
to rebuild them also with gcc-4.3.2-7 (though I ran out of time,
so a couple of packages weren't attempted with 4.3).
Here are the most common causes of the regressions (fails to build
with gcc-4.4.0-0.9, succeeds with gcc-4.3.2-7):
- 142 failures
C++ <string> (<bits/char_traits.h>) no longer includes <cstdio>.
So does <ios>, <streambuf>, <iomanip>, <locale>.
When you need anything from C stdio.h, such as EOF, *printf*,
*scanf*, remove etc., add #include <cstdio> to all sources that
need it.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/cstdio/
- 22 failures
G++ 4.4 rejects int main () { return main (); } or
int main () { main (); return 0; },
as main shouldn't be used within the program (see ISO C++ [basic.start.main]/3).
This breaks some configure scripts, e.g. AC_CHECK_LIB with second argument main as in
AC_CHECK_LIB(stdc++,main,,AC_MSG_ERROR([libstdc++ not installed]))
will now fail. As AC_CHECK_LIB isn't well suited for C++, which requires
prototypes and AC_CHECK_LIB doesn't provide them, I guess
AC_CHECK_LIB(stdc++,int,,AC_MSG_ERROR([libstdc|| not installed]))
could be used instead. This results in int main () { return int (); }
or int main () { int (); return 0; }
Only packages that actually failed to build because of this
are listed, there are many more that are affected by it though.
Look for checking for main in -l... giving no, even for packages
that succeeded.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/main/
- 15 failures
C++ <string> (<bits/postypes.h>) no longer includes <stdint.h>.
Neither does <ios>. When you need uint32_t, uint8_t etc.,
#include <stdint.h>.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/stdint/
- 15 failures
#elif argument is now evaluated even if earlier #if/#elif
condition evaluated non-zero, to make sure they are valid
constant expressions. See http://gcc.gnu.org/PR36320
To fix this, either use #else when you want it instead of
#elif (e.g. several packages use #elif without any argument
at all), or use #else #if ... #endif.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/elif/
- 8 failures
glib2's gthread.h contains a couple of aliasing issues (e.g.
in g_once_init_enter) and a bunch of programs get bitten by it
when they inline it.
This should be fixed in glib2.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/glib.aliasing/
- 6 failures
Other aliasing problem. In the GCC 4.3 -> 4.4 transition
the most common problem is:
char buf[NNN]; // or unsigned char or signed char
...
((struct somestruct *)buf)->somefield = 1
While you can access any object through char, unsigned char or
signed char pointer and modify parts/all of it, it is not the
other way around. In this case you probably want a union of
the buffer and struct somestruct.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/aliasing/
- 2 failures
GCC bugs that were already fixed in newer gcc 4.4 (4.4.0-0.13
should work).
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/already_fixed/
- 1 failure
Package built with -Werror, where one extra warning appeared.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/Werror/
- 1 failure
g++ now errors on:
struct C { virtual ~C (); };
struct B : public C { int i; };
struct A { const B a; A () { bar (&a); } void bar (const B *); };
while previously it only errored if C virtual wasn't involved.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/uninit/
- 1 failure
__builtin_stdarg_start has been removed. #include <stdarg.h>
should be used, rather than writing stuff by hand, and if really necessary
(why?), then at least it needs to use __builtin_va_start instead.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/stdarg/
- 1 failure
open with O_CREAT set in the second argument needs to have 3 arguments, not
just 2.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/open2/
- 1 failure
free called with a pointer to non-heap allocated object.
E.g.
char buf[128], *bufp;
...
bufp = buf;
if (something)
{
bufp = malloc (somesize);
...
}
...
if (bufp != buf)
free (buf); // Should have been bufp.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/nonheapfree/
- 30 failures
Unsorted stuff that succeeds to build with 4.3 and fails to build
with 4.4. Only looked briefly at openbabel, in which case
the bug is that it has locale.h in the include search path, which
overrides the system <locale.h>.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/unsorted/
- 31 failures
Various mock related issues, packages failed at root.log stage,
before starting to build. Some might be related to mock being used
on RHEL5 instead of a recent fedora.
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/deps/
- 167 failures
packages that failed to build both with gcc 4.3 and 4.4
http://sunsite.mff.cuni.cz/rawhide20090126-gcc44/fails-even-with-43/
- 117 failures
unanalyzed packages with failed to build with 4.4, but 4.3 build wasn't
performed (ran out of time), so either they fall into fails-even-with-43
category, or into unsorted.
Jakub
More information about the fedora-devel-list
mailing list