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
This commit is contained in:
parent
d2b9afb121
commit
31fa49984f
4 changed files with 38 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
|||
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 Jie Zhang <jie.zhang@analog.com>
|
||||
|
||||
* config/bfin/bfin.c (bfin_expand_builtin): Fix the argument
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2007-08-29 Douglas Gregor <doug.gregor@gmail.com>
|
||||
|
||||
PR c++/33194
|
||||
* g++.dg/other/canon-33194.C: New.
|
||||
|
||||
2007-08-29 Rask Ingemann Lambertsen <rask@sygehus.dk>
|
||||
|
||||
* gcc.c-torture/execute/simd-1.c: Use SImode vector elements.
|
||||
|
|
21
gcc/testsuite/g++.dg/other/canon-33194.C
Normal file
21
gcc/testsuite/g++.dg/other/canon-33194.C
Normal file
|
@ -0,0 +1,21 @@
|
|||
// PR c++/33194
|
||||
void c_translate_location (
|
||||
void (*fail) (
|
||||
const char *fmt, ...)
|
||||
__attribute__ ((noreturn,
|
||||
format (printf, 1, 2)))
|
||||
);
|
||||
|
||||
|
||||
struct dwflpp
|
||||
{
|
||||
static void loc2c_error (const char *fmt, ...)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
translate_location()
|
||||
{
|
||||
return c_translate_location (&loc2c_error);
|
||||
}
|
||||
};
|
12
gcc/tree.c
12
gcc/tree.c
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue