This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
i686 bootstrap problem
- To: gcc-patches at gcc dot gnu dot org
- Subject: i686 bootstrap problem
- From: Richard Henderson <rth at redhat dot com>
- Date: Thu, 12 Apr 2001 20:05:19 -0700
- Cc: gdr at codesourcery dot com, jsm28 at cam dot ac dot uk
There are two problems here. The second would not have been noticed
without the first, which is embarrasingly inexcusable.
(1) regmove.c doesn't see the prototype for can_throw_internal
(and warns about it, which is the inexcusable part), which
means it thinks it returns "int" instead of "bool".
(2) _Bool is not always taking part in the normal type promotions.
Fixing either is sufficient to return to bootstrapville, though
both should be addressed. I've checked in
* Makefile.in (regmove.o): Depend on except.h.
* remove.c: Include it.
as obvious while I investigate (2). I _think_ the following
is correct, but I'm not altogether sure; I'm still building
and testing.
r~
* c-common.h (C_PROMOTING_INTEGER_TYPE_P): Add boolean.
* c-typeck.c (default_conversion): Remove now dead boolean check.
Index: c-common.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-common.h,v
retrieving revision 1.66
diff -c -p -d -r1.66 c-common.h
*** c-common.h 2001/04/12 18:23:08 1.66
--- c-common.h 2001/04/13 02:51:17
*************** extern void c_common_lang_init PARAMS
*** 532,543 ****
ANSI C states explicitly the list of types that promote;
in particular, short promotes to int even if they have the same width. */
#define C_PROMOTING_INTEGER_TYPE_P(t) \
! (TREE_CODE ((t)) == INTEGER_TYPE \
&& (TYPE_MAIN_VARIANT (t) == char_type_node \
|| TYPE_MAIN_VARIANT (t) == signed_char_type_node \
|| TYPE_MAIN_VARIANT (t) == unsigned_char_type_node \
|| TYPE_MAIN_VARIANT (t) == short_integer_type_node \
! || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node))
extern int self_promoting_args_p PARAMS ((tree));
extern tree simple_type_promotes_to PARAMS ((tree));
--- 532,544 ----
ANSI C states explicitly the list of types that promote;
in particular, short promotes to int even if they have the same width. */
#define C_PROMOTING_INTEGER_TYPE_P(t) \
! ((TREE_CODE (t) == INTEGER_TYPE \
&& (TYPE_MAIN_VARIANT (t) == char_type_node \
|| TYPE_MAIN_VARIANT (t) == signed_char_type_node \
|| TYPE_MAIN_VARIANT (t) == unsigned_char_type_node \
|| TYPE_MAIN_VARIANT (t) == short_integer_type_node \
! || TYPE_MAIN_VARIANT (t) == short_unsigned_type_node)) \
! || TREE_CODE (t) == BOOLEAN_TYPE)
extern int self_promoting_args_p PARAMS ((tree));
extern tree simple_type_promotes_to PARAMS ((tree));
Index: c-typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v
retrieving revision 1.116
diff -c -p -d -r1.116 c-typeck.c
*** c-typeck.c 2001/04/10 22:40:47 1.116
--- c-typeck.c 2001/04/13 02:51:17
*************** default_conversion (exp)
*** 973,981 ****
return convert (integer_type_node, exp);
}
- if (code == BOOLEAN_TYPE)
- return convert (integer_type_node, exp);
-
if (flag_traditional && !flag_allow_single_precision
&& TYPE_MAIN_VARIANT (type) == float_type_node)
return convert (double_type_node, exp);
--- 973,978 ----