http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54704
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-25 14:57:58 UTC --- With the hash function fixed Index: libcpp/line-map.c =================================================================== --- libcpp/line-map.c (revision 191706) +++ libcpp/line-map.c (working copy) @@ -58,7 +58,7 @@ location_adhoc_data_hash (const void *l) { const struct location_adhoc_data *lb = (const struct location_adhoc_data *) l; - return (hashval_t) lb->locus + (size_t) &lb->data; + return (hashval_t) lb->locus + (size_t) lb->data; } /* Compare function for location_adhoc_data hashtable. */ compile-time looks way better. Needs proper testing of course. Breakpoint 1, get_combined_adhoc_loc (set=0x7ffff7ff9000, locus=<optimized out>, data=<optimized out>) at /space/rguenther/tramp3d/trunk/libcpp/line-map.c:139 139 location_adhoc_data_update, &offset); (gdb) p *set->location_adhoc_data_map.htab $11 = {hash_f = 0xef2a50 <location_adhoc_data_hash(void const*)>, eq_f = 0xef2a60 <location_adhoc_data_eq(void const*, void const*)>, del_f = 0x0, entries = 0x2243410, size = 262139, n_elements = 131073, n_deleted = 0, searches = 278216, collisions = 365860, alloc_f = 0xf1d320 <xcalloc>, free_f = 0x4e0570 <free@plt>, alloc_arg = 0x0, alloc_with_arg_f = 0x0, free_with_arg_f = 0x0, size_prime_index = 15} and integration : 0.90 ( 2%) usr 0.15 ( 4%) sys 0.99 ( 2%) wall 86042 kB ( 8%) ggc