I hit an error using g++ 3.3 to bootstrap on Darwin/ppc and configure -enable-build-with-cxx -enable-checking=...
../../gcc-4.5/gcc/alias.c: In function `rtx_def* find_base_value(rtx_def*)':
../../gcc-4.5/gcc/alias.c:1008: error: cannot convert `rtx_def*' to `const
rtx temp, src_0 = XEXP (src, 0), src_1 = XEXP (src, 1); <== this line
I suggest therefore rtl.h:
< #if defined ENABLE_RTL_FLAG_CHECKING && GCC_VERSION > 2007
> #if defined ENABLE_RTL_FLAG_CHECKING && ((!defined(__cplusplus) && GCC_VERSION > 2007) || GCC_VERSION > 3003)
#define RTL_FLAG_CHECK1(NAME, RTX, C1) __extension__ \
or even just:
> #if defined ENABLE_RTL_FLAG_CHECKING && GCC_VERSION > 3003
or like, not necessarily in rtl.h:
#if GCC_VERSION <= 3003
#if GCC_VERSION <= 3003 && defined(__cplusplus)
Some allowance might be made for other compilers that implement the extensions though?
Or, in C++, maybe use extensions less? e.g. inline functions might suit?
I put #define ENABLE_CHECKING_GCC_VERSION ((GCC_VERSION > 3003) || (!defined(__cplusplus) && (GCC_VERSION > 2007)))
in include/ansidecl.h after #define GCC_VERSION and I && this with the #if FOO_CHECKING in rtl.h, tree.h, ira-int.h.
Alternatively, reject g++ < 3.4 entirely, or if enable-checking.
Or, well, I'm using -disable-bootstrap, and probably checking is never enabled in the first phase anyway, so this all would just work if I didn't use that.
The patch is ok, but it might never make a difference if I didn't -disable-bootstrap.
But I really really really like -disable-bootstrap, given how little I build, which is still a very useful amount, it saves a ton (just libbackend.a and a small frontend, no libraries, and I patched out gmp/mpfr/mpc dependencies, so overall build is short even on slower machines (we run a range of machines..)).