I've committed this patch.

-cary


2013-06-10  Cary Coutant  <ccout...@google.com>

gcc/
        * dwarf2out.c (hash_external_ref): Use die_symbol or signature
        for hash so that hash table traversal order is deterministic.



> Index: gcc/dwarf2out.c
> ===================================================================
> --- gcc/dwarf2out.c     (revision 198260)
> +++ gcc/dwarf2out.c     (working copy)
> @@ -7385,7 +7385,22 @@ static hashval_t
>  hash_external_ref (const void *p)
>  {
>    const struct external_ref *r = (const struct external_ref *)p;
> -  return htab_hash_pointer (r->type);
> +  dw_die_ref die = r->type;
> +  hashval_t h = 0;
> +
> +  /* We can't use the address of the DIE for hashing, because
> +     that will make the order of the stub DIEs non-deterministic.  */
> +  if (! die->comdat_type_p)
> +    /* We have a symbol; use it to compute a hash.  */
> +    h = htab_hash_string (die->die_id.die_symbol);
> +  else
> +    {
> +      /* We have a type signature; use a subset of the bits as the hash.
> +         The 8-byte signature is at least as large as hashval_t.  */
> +      comdat_type_node_ref type_node = die->die_id.die_type_node;
> +      memcpy (&h, type_node->signature, sizeof (h));
> +    }
> +  return h;
>  }
>
>  /* Compare external_refs.  */

Reply via email to