diff options
author | Douglas Gregor <doug.gregor@gmail.com> | 2007-08-29 12:25:01 +0000 |
---|---|---|
committer | Doug Gregor <dgregor@gcc.gnu.org> | 2007-08-29 12:25:01 +0000 |
commit | 31fa49984f6d6b2a6f90296867004265ea395e07 (patch) | |
tree | 2b91b39e4ff5198911e5114e0cd3c9f44d0e6e73 /gcc/tree.c | |
parent | d2b9afb12104e09bd382b6b5f4cbfecc11983629 (diff) | |
download | gcc-31fa49984f6d6b2a6f90296867004265ea395e07.zip gcc-31fa49984f6d6b2a6f90296867004265ea395e07.tar.gz gcc-31fa49984f6d6b2a6f90296867004265ea395e07.tar.bz2 |
re PR c++/33194 (ICE: canonical types differ for identical types void ()(const char*, ...) and void ()(const char*, ...))
2007-08-29 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33194
* tree.c (build_type_attribute_qual_variant): Set canonical types
on the final, unqualified attribute variant before building the
qualified version.
2007-08-29 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33194
* g++.dg/other/canon-33194.C: New.
From-SVN: r127896
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -3678,12 +3678,6 @@ build_type_attribute_qual_variant (tree ttype, tree attribute, int quals) TYPE_REFERENCE_TO (ntype) = 0; TYPE_ATTRIBUTES (ntype) = attribute; - if (TYPE_STRUCTURAL_EQUALITY_P (ttype)) - SET_TYPE_STRUCTURAL_EQUALITY (ntype); - else - TYPE_CANONICAL (ntype) - = build_qualified_type (TYPE_CANONICAL (ttype), quals); - /* Create a new main variant of TYPE. */ TYPE_MAIN_VARIANT (ntype) = ntype; TYPE_NEXT_VARIANT (ntype) = 0; @@ -3726,8 +3720,12 @@ build_type_attribute_qual_variant (tree ttype, tree attribute, int quals) /* If the target-dependent attributes make NTYPE different from its canonical type, we will need to use structural equality checks for this qualified type. */ - if (!targetm.comp_type_attributes (ntype, ttype)) + ttype = build_qualified_type (ttype, TYPE_UNQUALIFIED); + if (TYPE_STRUCTURAL_EQUALITY_P (ttype) + || !targetm.comp_type_attributes (ntype, ttype)) SET_TYPE_STRUCTURAL_EQUALITY (ntype); + else + TYPE_CANONICAL (ntype) = TYPE_CANONICAL (ttype); ttype = build_qualified_type (ntype, quals); } |