This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 3/3] PR middle-end/54860 - Make sure attributes hash table is created
- From: Dodji Seketeli <dodji at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jason Merrill <jason at redhat dot com>
- Date: Tue, 09 Oct 2012 23:25:37 +0200
- Subject: [PATCH 3/3] PR middle-end/54860 - Make sure attributes hash table is created
- References: <87wqyze40h.fsf@redhat.com>
Hello,
On targets cris-elf, alpha and sparc (for instance) it can happen that
the attribute_tables variable is empty for fortran. So
register_scoped_attributes (called by init_attributes) won't call
register_scoped_attributes, so the hash table member of
scoped_attributes is not created.
Later when we try to e.g, lookup an attribute by calling
lookup_scoped_attribute_spec, that NULL member hash table members
comes to byte us and htab_find_with_hash crashes.
This patch fixes this by ensuring in register_scoped_attributes that
the hash table is created.
Tested on cris-elf against trunk and some commenters on the bug
bootstrapped it on alpha and sparc.
gcc/
* attribs.c (register_scoped_attributes): Ensure the attribute
hash table is created.
---
gcc/attribs.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gcc/attribs.c b/gcc/attribs.c
index b330f27..d167c1f 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -146,7 +146,8 @@ register_scoped_attributes (const struct attribute_spec * attributes,
memset (&sa, 0, sizeof (sa));
sa.ns = ns;
sa.attributes = VEC_alloc (attribute_spec, heap, 64);
- result = VEC_safe_push (scoped_attributes, heap, attributes_table, sa);
+ result = VEC_safe_push (scoped_attributes, heap, attributes_table, sa);
+ result->attribute_hash = htab_create (200, hash_attr, eq_attr, NULL);
}
/* Really add the attributes to their namespace now. */
@@ -284,8 +285,7 @@ register_scoped_attribute (const struct attribute_spec *attr,
gcc_assert (attr != NULL && name_space != NULL);
- if (name_space->attribute_hash == NULL)
- name_space->attribute_hash = htab_create (200, hash_attr, eq_attr, NULL);
+ gcc_assert (name_space->attribute_hash != NULL);
str.str = attr->name;
str.length = strlen (str.str);
--
Dodji