summaryrefslogtreecommitdiff
path: root/gcc/attribs.c
diff options
context:
space:
mode:
authordodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>2012-10-10 10:25:03 +0000
committerdodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>2012-10-10 10:25:03 +0000
commit3a7190b7f57bb459c236554f6759dff0153eeceb (patch)
tree2d29ef6bfdcbd1ad25cfc850c1e0cf2fe33e563e /gcc/attribs.c
parent21d505d8c0867cd1efafd31923b44328abe257ae (diff)
downloadgcc-3a7190b7f57bb459c236554f6759dff0153eeceb.tar.gz
PR middle-end/54860 - Make sure attributes hash table is created
On targets cris-elf, alpha and sparc (for instance) it can happen that the attribute_tables variable is empty for fortran. Thus 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 comes to byte us as 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, x86_64-unknown-linux-gnu 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@192301 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/attribs.c')
-rw-r--r--gcc/attribs.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/attribs.c b/gcc/attribs.c
index b330f27d89d..d167c1f6e13 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);