On Apr 4, 2012, at 5:07 PM, Ian Lance Taylor wrote: > Tristan Gingold <ging...@adacore.com> writes: > >> Would something like that be acceptable ? >> I have just checked that I can still build gcc with that patch. If you like >> this approach I will properly submit a patch. > > Thanks. > > You should also test that gdb continues to build with this patch. > > I guess the question here is portability. Do we still care about > portability to systems that have neither inttypes.h nor stdint.h? I'm > willing to try this and see if anybody complains. > > Ian
Hi, here is my formal patch submission. I am not concerned by portability as configure will define uintptr_t if not found in inttypes.h or stdint.h (both in libiberty and gcc. gdb indeed uses stdint.h from gnulib). Tested by bootstrapping gcc for c,c++ and fortran on x86_64-darwin, and by building gdb on x86_64-darwin. Ok for trunk ? Tristan. gcc/ 2012-04-05 Tristan Gingold <ging...@adacore.com> * gengtype.c (main): Make uintptr_t a known type. include/ 2012-04-05 Tristan Gingold <ging...@adacore.com> * splay-tree.h: Conditionnaly includes stdint.h and inttypes.h (libi_uhostptr_t, libi_shostptr_t): Remove, replaced by uintptr_t. diff --git a/gcc/gengtype.c b/gcc/gengtype.c index 7450eeb..fa45392 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -4976,6 +4976,7 @@ main (int argc, char **argv) POS_HERE (do_scalar_typedef ("double_int", &pos)); POS_HERE (do_scalar_typedef ("uint64_t", &pos)); POS_HERE (do_scalar_typedef ("uint8", &pos)); + POS_HERE (do_scalar_typedef ("uintptr_t", &pos)); POS_HERE (do_scalar_typedef ("jword", &pos)); POS_HERE (do_scalar_typedef ("JCF_u2", &pos)); POS_HERE (do_scalar_typedef ("void", &pos)); diff --git a/include/splay-tree.h b/include/splay-tree.h index 480b2c4..a26135a 100644 --- a/include/splay-tree.h +++ b/include/splay-tree.h @@ -37,18 +37,11 @@ extern "C" { #include "ansidecl.h" -#ifndef _WIN64 - typedef unsigned long int libi_uhostptr_t; - typedef long int libi_shostptr_t; -#else -#ifdef __GNUC__ - __extension__ +#ifdef HAVE_STDINT_H +#include <stdint.h> #endif - typedef unsigned long long libi_uhostptr_t; -#ifdef __GNUC__ - __extension__ -#endif - typedef long long libi_shostptr_t; +#ifdef HAVE_INTTYPES_H +#include <inttypes.h> #endif #ifndef GTY @@ -59,8 +52,8 @@ extern "C" { these types, if necessary. These types should be sufficiently wide that any pointer or scalar can be cast to these types, and then cast back, without loss of precision. */ -typedef libi_uhostptr_t splay_tree_key; -typedef libi_uhostptr_t splay_tree_value; +typedef uintptr_t splay_tree_key; +typedef uintptr_t splay_tree_value; /* Forward declaration for a node in the tree. */ typedef struct splay_tree_node_s *splay_tree_node;