use platform specific types in gnu_type_fix
authorBruce Korb <bkorb@gnu.org>
Thu, 20 Jul 2000 13:29:29 +0000 (13:29 +0000)
committerBruce Korb <korbb@gcc.gnu.org>
Thu, 20 Jul 2000 13:29:29 +0000 (13:29 +0000)
From-SVN: r35143

gcc/ChangeLog
gcc/fixinc/check.tpl
gcc/fixinc/fixfixes.c
gcc/fixinc/fixincl.tpl
gcc/fixinc/fixincl.x
gcc/fixinc/fixlib.h
gcc/fixinc/inclhack.def

index bcd6f9b..4c4138a 100644 (file)
@@ -1,3 +1,12 @@
+2000-07-20  Bruce Korb  <bkorb@gnu.org>
+
+       * fixincl/check.tpl: strip the platform specific types before testing
+       * fixincl/fixfixes.c(gnu_type_fix): use platform specific types
+       * fixincl/fixincl.tpl: use platform specific types
+       * fixincl/fixlib.h: include the platform specific types
+       * fixincl/inclhack.def(gnu_types): don't supply the types
+       * fixincl/fixincl.x: regen
+
 2000-07-19  Jim Wilson  <wilson@cygnus.com>
 
        * config/ia64/ia64.h (HARD_REGNO_MODE_OK): Don't allow XFmode in
index 249636b..196d928 100644 (file)
@@ -110,6 +110,18 @@ exitok=true
 
 find * -type f -print > ${TESTDIR}/LIST
 
+#  Special hack for sys/types.h:  the #define-d types for size_t,
+#  ptrdiff_t and wchar_t are different for each port.  Therefore,
+#  strip off the defined-to type so that the test results are the
+#  same for all platforms.
+#
+sed 's/\(#define __[A-Z_]*_TYPE__\).*/\1/' sys/types.h > XX
+mv -f XX sys/types.h
+
+#  The following subshell weirdness is for saving an exit
+#  status from within a while loop that reads input.  If you can
+#  think of a cleaner way, suggest away, please...
+#
 exitok=`
 exec < ${TESTDIR}/LIST
 while read f
index 526cc69..7a9ff61 100644 (file)
@@ -164,19 +164,28 @@ emit_gnu_type ( text, rm )
   /*
    *  Now print out the reformed typedef
    */
-  printf ("\
-#ifndef __%s_TYPE__\n\
-#define __%s_TYPE__ %s\n\
-#endif\n",
-          p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_gtype );
-
-  printf ("\
+  {
+    tSCC z_fmt[] = "\
+#ifndef __%s_TYPE__\n#define __%s_TYPE__ %s\n#endif\n\
+\
 #if !defined(_GCC_%s_T)%s\n\
-#define _GCC_%s_T\n\
-typedef __%s_TYPE__ %s_t;\n\
-#endif\n",
-          p_tm->pz_TYPE, p_tm->pz_cxx_guard,
-          p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_type);
+\
+#define _GCC_%s_T\ntypedef __%s_TYPE__ %s_t;\n#endif\n";
+
+    const char* pz_guard;
+
+    /*
+     *  We magically know that the first entry and only the first
+     *  entry needs guarding against __cplusplus (it is "wchar_t").
+     *  If others wind up needing similar special treatment, then
+     *  go look into inclhack.def.  This code, obviously, works closely
+     *  with that file  :-)
+     */
+    pz_guard = (p_tm == gnu_type_map) ? " && ! defined(__cplusplus)" : "";
+    printf (z_fmt, p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_gtype,
+            p_tm->pz_TYPE, pz_guard,
+            p_tm->pz_TYPE, p_tm->pz_TYPE, p_tm->pz_type);
+  }
 
   return text;
 }
index ec7c812..6a89859 100644 (file)
@@ -207,19 +207,18 @@ _FOR fix ",\n" =]
 #define GNU_TYPE_CT [=_eval type_map _count =]
 int gnu_type_map_ct = GNU_TYPE_CT;
 
-tSCC z_cxx_guard[] = " && !defined(__cplusplus)";
-tSCC z_nil[]       = "";
-
+/*
+ *  The following table depends upon XXX_TYPE being #define-d to the
+ *  correct string via defines in a header file pointed to by the
+ *  generated file "tm.h".
+ */
 t_gnu_type_map gnu_type_map[ GNU_TYPE_CT ] = {[=
 
 _FOR type_map ,
 
 =]
-  { [=_EVAL type_name _len=], "[=type_name=]", "[=type_name _up=]", "[=
-  gnu_type=]", [=
-  _IF cxx_type _exist =]z_cxx_guard[=
-  _ELSE               =]z_nil[=
-  _ENDIF=] }[=
+  { [=_EVAL type_map _len=], "[=type_map=]", "[=type_map _up=]", [=
+  type_map _up=]_TYPE }[=
 
 /type_map=]
 };
index 9fb8dd1..62307bd 100644 (file)
@@ -5799,11 +5799,13 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
 #define GNU_TYPE_CT 3
 int gnu_type_map_ct = GNU_TYPE_CT;
 
-tSCC z_cxx_guard[] = " && !defined(__cplusplus)";
-tSCC z_nil[]       = "";
-
+/*
+ *  The following table depends upon XXX_TYPE being #define-d to the
+ *  correct string via defines in a header file pointed to by the
+ *  generated file "tm.h".
+ */
 t_gnu_type_map gnu_type_map[ GNU_TYPE_CT ] = {
-  { 7, "ptrdiff", "PTRDIFF", "long int", z_nil },
-  { 4, "size", "SIZE", "long unsigned int", z_nil },
-  { 5, "wchar", "WCHAR", "int", z_cxx_guard }
+  { 5, "wchar", "WCHAR", WCHAR_TYPE },
+  { 7, "ptrdiff", "PTRDIFF", PTRDIFF_TYPE },
+  { 4, "size", "SIZE", SIZE_TYPE }
 };
index dc422b1..5cb0089 100644 (file)
@@ -33,6 +33,8 @@ Boston, MA 02111-1307, USA.  */
 #include "machname.h"
 #include "libiberty.h"
 
+#include "tm.h"
+
 #ifndef STDIN_FILENO
 # define STDIN_FILENO   0
 #endif
@@ -175,7 +177,6 @@ typedef struct {
   tCC*        pz_type;
   tCC*        pz_TYPE;
   tCC*        pz_gtype;
-  tCC*        pz_cxx_guard;
 } t_gnu_type_map;
 
 extern int gnu_type_map_ct;
index 0dd80f5..5364bd4 100644 (file)
@@ -2520,7 +2520,13 @@ fix = {
 /*
  * Fix these files to use the same types that we think they should.
  * Each type must be present in two places:  the select clause
- * and a "type_map" entry below.
+ * and a "type_map" entry below.  The types mapped to are found from
+ * the "tm.h" header, which is a generated file that refers to
+ * a header in the gcc/config/ tree.  Keep these in sync!!
+ *
+ * Also, "wchar" is first and known to need guarding against __cplusplus.
+ * Keep *that* in mind, too, when hacking the gnu_type_fix routine
+ * in fixfixes.c.
  */
 fix = {
     hackname  = gnu_types;
@@ -2539,21 +2545,9 @@ fix = {
                 "typedef ushort_t wchar_t; /* ushort_t */";
 };
 
-type_map = {
-  type_name = ptrdiff;
-  gnu_type  = "long int";
-};
-
-type_map = {
-  type_name = size;
-  gnu_type  = "long unsigned int";
-};
-
-type_map = {
-  type_name = wchar;
-  gnu_type  = int;
-  cxx_type;
-};
+type_map = wchar;
+type_map = ptrdiff;
+type_map = size;
 
 
 /*