re PR bootstrap/54092 (Bootstrap fails while building Ada at stage 1)
authorRichard Henderson <rth@redhat.com>
Wed, 25 Jul 2012 15:10:44 +0000 (08:10 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 25 Jul 2012 15:10:44 +0000 (08:10 -0700)
PR bootstrap/54092

        * libfuncs.h: Don't include optabs.h.
        (struct libfunc_entry): Use "int" for op, mode1, mode2 members.
        * optabs.c (hash_libfunc): Don't cast members to int.
        * Makefile.in (LIBFUNCS_H): Don't include OPTABS_H.

From-SVN: r189853

gcc/ChangeLog
gcc/Makefile.in
gcc/libfuncs.h
gcc/optabs.c

index 051d5e0..928eb09 100644 (file)
@@ -1,3 +1,11 @@
+2012-07-25  Richard Henderson  <rth@redhat.com>
+
+       PR bootstrap/54092
+       * libfuncs.h: Don't include optabs.h.
+       (struct libfunc_entry): Use "int" for op, mode1, mode2 members.
+       * optabs.c (hash_libfunc): Don't cast members to int.
+       * Makefile.in (LIBFUNCS_H): Don't include OPTABS_H.
+
 2012-07-25  Dodji Seketeli  <dodji@redhat.com>
 
        * basic-block.c: Fix typo in comment.
index 40f7c4d..d7b8a76 100644 (file)
@@ -971,7 +971,7 @@ GCC_PLUGIN_H = gcc-plugin.h highlev-plugin-common.h plugin.def \
                $(CONFIG_H) $(SYSTEM_H) $(HASHTAB_H)
 PLUGIN_H = plugin.h $(GCC_PLUGIN_H)
 PLUGIN_VERSION_H = plugin-version.h configargs.h
-LIBFUNCS_H = libfuncs.h $(HASHTAB_H) $(OPTABS_H)
+LIBFUNCS_H = libfuncs.h $(HASHTAB_H)
 
 #\f
 # Now figure out from those variables how to compile and link.
index 75f7a69..262e10f 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for code generation pass of GNU compiler.
-   Copyright (C) 2001, 2004, 2007, 2008, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2001-2012 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -21,7 +21,6 @@ along with GCC; see the file COPYING3.  If not see
 #define GCC_LIBFUNCS_H
 
 #include "hashtab.h"
-#include "optabs.h"
 
 /* Enumeration of indexes into libfunc_table.  */
 enum libfunc_index
@@ -48,12 +47,16 @@ enum libfunc_index
   LTI_MAX
 };
 
-/* Information about an optab-related libfunc.  We use the same hashtable
-   for normal optabs and conversion optabs.  In the first case mode2
-   is unused.  */
+/* Information about an optab-related libfunc.  The op field is logically
+   an enum optab_d, and the mode fields are logically enum machine_mode.
+   However, in the absence of forward-declared enums, there's no practical
+   benefit of pulling in the defining headers.
+
+   We use the same hashtable for normal optabs and conversion optabs.  In
+   the first case mode2 is forced to VOIDmode.  */
+
 struct GTY(()) libfunc_entry {
-  optab op;
-  enum machine_mode mode1, mode2;
+  int op, mode1, mode2;
   rtx libfunc;
 };
 
index 022adfa..462aa7c 100644 (file)
@@ -75,7 +75,7 @@ static hashval_t
 hash_libfunc (const void *p)
 {
   const struct libfunc_entry *const e = (const struct libfunc_entry *) p;
-  return (((int) e->mode1 + (int) e->mode2 * NUM_MACHINE_MODES) ^ e->op);
+  return ((e->mode1 + e->mode2 * NUM_MACHINE_MODES) ^ e->op);
 }
 
 /* Used for libfunc_hash.  */