re PR c++/66270 (ICE: canonical types differ for identical types)
PR c++/66270 * tree.c (build_pointer_type_for_mode): Canonical type does not inherit can_alias_all. (build_reference_type_for_mode): Likewise. PR c++/66270 * g++.dg/ext/alias-canon3.C: New. From-SVN: r223773
This commit is contained in:
parent
73b4a60f5c
commit
b6cb06b486
@ -1,3 +1,10 @@
|
||||
2015-05-27 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/66270
|
||||
* tree.c (build_pointer_type_for_mode): Canonical type does not
|
||||
inherit can_alias_all.
|
||||
(build_reference_type_for_mode): Likewise.
|
||||
|
||||
2015-05-24 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/66243
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-05-27 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
PR c++/66270
|
||||
* g++.dg/ext/alias-canon3.C: New.
|
||||
|
||||
2015-05-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/66272
|
||||
|
12
gcc/testsuite/g++.dg/ext/alias-canon3.C
Normal file
12
gcc/testsuite/g++.dg/ext/alias-canon3.C
Normal file
@ -0,0 +1,12 @@
|
||||
// { dg-do compile }
|
||||
// PR c++/66270
|
||||
|
||||
typedef float __m256 __attribute__ (( __vector_size__(32), __may_alias__ ));
|
||||
struct A {
|
||||
__m256 ymm;
|
||||
const float &f() const;
|
||||
};
|
||||
|
||||
const float &A::f() const {
|
||||
return ymm[1];
|
||||
}
|
@ -7719,6 +7719,7 @@ build_pointer_type_for_mode (tree to_type, machine_mode mode,
|
||||
bool can_alias_all)
|
||||
{
|
||||
tree t;
|
||||
bool could_alias = can_alias_all;
|
||||
|
||||
if (to_type == error_mark_node)
|
||||
return error_mark_node;
|
||||
@ -7756,7 +7757,7 @@ build_pointer_type_for_mode (tree to_type, machine_mode mode,
|
||||
|
||||
if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
|
||||
SET_TYPE_STRUCTURAL_EQUALITY (t);
|
||||
else if (TYPE_CANONICAL (to_type) != to_type)
|
||||
else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
|
||||
TYPE_CANONICAL (t)
|
||||
= build_pointer_type_for_mode (TYPE_CANONICAL (to_type),
|
||||
mode, false);
|
||||
@ -7786,6 +7787,7 @@ build_reference_type_for_mode (tree to_type, machine_mode mode,
|
||||
bool can_alias_all)
|
||||
{
|
||||
tree t;
|
||||
bool could_alias = can_alias_all;
|
||||
|
||||
if (to_type == error_mark_node)
|
||||
return error_mark_node;
|
||||
@ -7823,7 +7825,7 @@ build_reference_type_for_mode (tree to_type, machine_mode mode,
|
||||
|
||||
if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
|
||||
SET_TYPE_STRUCTURAL_EQUALITY (t);
|
||||
else if (TYPE_CANONICAL (to_type) != to_type)
|
||||
else if (TYPE_CANONICAL (to_type) != to_type || could_alias)
|
||||
TYPE_CANONICAL (t)
|
||||
= build_reference_type_for_mode (TYPE_CANONICAL (to_type),
|
||||
mode, false);
|
||||
|
Loading…
Reference in New Issue
Block a user