On Wed, Aug 28, 2013 at 12:40:50PM +0200, Richard Biener wrote: > On Tue, Aug 27, 2013 at 2:33 PM, Marek Polacek <pola...@redhat.com> wrote: > > It turned out that for tree -> tree mapping we don't need the hash > > table at all; pointer map is much more convenient. So this patch > > weeds out the hash table out of ubsan and introduces pointer map > > instead. Quite a lot of code could go away--no need to set the > > alloc pools up etc. > > > > Regtested, ran bootstrap-ubsan on x86_64-linux. Applying to the > > ubsan branch. > > You can use the type-safe pointer_map <tree> now (ok, only the data type > is type safe, the pointer is still void).
Thanks, done with the following. Please let me know if you see something wrong in this; otherwise I'll commit it if the bootstrap-ubsan passes. 2013-08-28 Marek Polacek <pola...@redhat.com> * ubsan.c: Use pointer_map<tree> instead of pointer_map_t. (insert_decl_for_type): Adjust. (lookup_decl_for_type): Likewise. --- gcc/ubsan.c.mp 2013-08-28 12:54:17.778383224 +0200 +++ gcc/ubsan.c 2013-08-28 14:09:42.400105470 +0200 @@ -31,16 +31,14 @@ along with GCC; see the file COPYING3. #include "c-family/c-common.h" /* Map a TYPE to an ubsan type descriptor VAR_DECL for that type. */ -static pointer_map_t *typedesc_map; +static pointer_map<tree> *typedesc_map; /* Insert DECL as the VAR_DECL for TYPE in the TYPEDESC_MAP. */ static void insert_decl_for_type (tree decl, tree type) { - void **slot = pointer_map_insert (typedesc_map, type); - gcc_assert (*slot == NULL); - *slot = decl; + *typedesc_map->insert (type) = decl; } /* Find the VAR_DECL for TYPE in TYPEDESC_MAP. If TYPE does not @@ -52,9 +50,13 @@ lookup_decl_for_type (tree type) { /* If the pointer map is not initialized yet, create it now. */ if (typedesc_map == NULL) - typedesc_map = pointer_map_create (); - void **slot = pointer_map_contains (typedesc_map, type); - return slot ? (tree) *slot : NULL_TREE; + { + typedesc_map = new pointer_map<tree>; + /* That also means we don't have to bother with the lookup. */ + return NULL_TREE; + } + tree *t = typedesc_map->contains (type); + return t ? *t : NULL_TREE; } /* Helper routine, which encodes a value in the pointer_sized_int_node. Marek