diff options
author | Jason Merrill <jason@redhat.com> | 2018-02-21 17:12:08 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-02-21 17:12:08 -0500 |
commit | a5e2a41f976f6e478a97222d713959cc80c5215e (patch) | |
tree | a6098177876a7fecce7e3baf4e32e25a3ed7baaf /gcc | |
parent | 5d4991da5c47c3deaa2cd444002ad62cb74c3586 (diff) | |
download | gcc-a5e2a41f976f6e478a97222d713959cc80c5215e.zip gcc-a5e2a41f976f6e478a97222d713959cc80c5215e.tar.gz gcc-a5e2a41f976f6e478a97222d713959cc80c5215e.tar.bz2 |
PR c++/84314 - ICE with templates and fastcall attribute.
* attribs.c (build_type_attribute_qual_variant): Remove assert.
From-SVN: r257883
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/attribs.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/attrib56.C | 6 |
3 files changed, 19 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2905e18..6b14ff4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-02-21 Jason Merrill <jason@redhat.com> + + PR c++/84314 - ICE with templates and fastcall attribute. + * attribs.c (build_type_attribute_qual_variant): Remove assert. + 2018-02-21 Jan Hubicka <hubicka@ucw.cz> * ipa-cp.c (determine_versionability): Fix comment typos. diff --git a/gcc/attribs.c b/gcc/attribs.c index caa30b9..bfadf12 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -1155,17 +1155,14 @@ build_type_attribute_qual_variant (tree otype, tree attribute, int quals) TYPE_CANONICAL. */; else if (TYPE_STRUCTURAL_EQUALITY_P (ttype) || !comp_type_attributes (ntype, ttype)) - { - /* If the target-dependent attributes make NTYPE different from - its canonical type, we will need to use structural equality - checks for this type. - - But make sure we don't get here for stripping attributes from a - type; the no-attribute type might not need structural comparison, - and it should have been in the hash table already. */ - gcc_assert (attribute); - SET_TYPE_STRUCTURAL_EQUALITY (ntype); - } + /* If the target-dependent attributes make NTYPE different from + its canonical type, we will need to use structural equality + checks for this type. + + We shouldn't get here for stripping attributes from a type; + the no-attribute type might not need structural comparison. But + we can if was discarded from type_hash_table. */ + SET_TYPE_STRUCTURAL_EQUALITY (ntype); else if (TYPE_CANONICAL (ntype) == ntype) TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype); diff --git a/gcc/testsuite/g++.dg/ext/attrib56.C b/gcc/testsuite/g++.dg/ext/attrib56.C new file mode 100644 index 0000000..9736d97 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib56.C @@ -0,0 +1,6 @@ +// PR c++/84314 +// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } } + +struct a { + void b(long() __attribute__((fastcall))) {} +}; |