diff options
author | Martin Sebor <msebor@redhat.com> | 2020-03-27 13:54:22 -0600 |
---|---|---|
committer | Martin Sebor <msebor@redhat.com> | 2020-03-27 13:54:22 -0600 |
commit | ccacf77be5508dd5b4df59f402965196d11edb05 (patch) | |
tree | 3075596dc7eefeb4b555b569ab76387f07eb17a5 /gcc/c-family | |
parent | 038769535a8cbdd3dd3e100bde3140df52f868c5 (diff) | |
download | gcc-ccacf77be5508dd5b4df59f402965196d11edb05.zip gcc-ccacf77be5508dd5b4df59f402965196d11edb05.tar.gz gcc-ccacf77be5508dd5b4df59f402965196d11edb05.tar.bz2 |
PR c++/94098 - ICE on attribute access redeclaration
gcc/c-family/ChangeLog:
PR c++/94098
* c-attribs.c (handle_access_attribute): Avoid setting TYPE_ATTRIBUTES
here.
gcc/ChangeLog:
PR c++/94098
* calls.c (init_attr_rdwr_indices): Iterate over all access attributes.
gcc/testsuite/ChangeLog:
PR c++/94098
* g++.dg/ext/attr-access-2.C: New test.
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-family/c-attribs.c | 12 |
2 files changed, 10 insertions, 8 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 0d805c6..30a18a3 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2020-03-27 Martin Sebor <msebor@redhat.com> + + PR c++/94098 + * c-attribs.c (handle_access_attribute): Avoid setting TYPE_ATTRIBUTES + here. + 2020-03-23 Jakub Jelinek <jakub@redhat.com> PR c++/91993 diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c index 9abf81d..f30158a 100644 --- a/gcc/c-family/c-attribs.c +++ b/gcc/c-family/c-attribs.c @@ -4182,7 +4182,6 @@ handle_access_attribute (tree *node, tree name, tree args, /* Replace any existing access attribute specification with the concatenation above. */ - attrs = remove_attribute (IDENTIFIER_POINTER (name), attrs); new_attrs = tree_cons (NULL_TREE, new_attrs, NULL_TREE); new_attrs = tree_cons (name, new_attrs, attrs); @@ -4190,15 +4189,12 @@ handle_access_attribute (tree *node, tree name, tree args, { /* Repeat for the previously declared type. */ attrs = TYPE_ATTRIBUTES (TREE_TYPE (node[1])); - tree new_attrs - = append_access_attrs (node[1], attrs, attrstr, code, idxs); - if (!new_attrs) + tree attrs1 = append_access_attrs (node[1], attrs, attrstr, code, idxs); + if (!attrs1) return NULL_TREE; - attrs = remove_attribute (IDENTIFIER_POINTER (name), attrs); - new_attrs = tree_cons (NULL_TREE, new_attrs, NULL_TREE); - new_attrs = tree_cons (name, new_attrs, attrs); - TYPE_ATTRIBUTES (TREE_TYPE (node[1])) = new_attrs; + attrs1 = tree_cons (NULL_TREE, attrs1, NULL_TREE); + new_attrs = tree_cons (name, attrs1, attrs); } /* Recursively call self to "replace" the documented/external form |