[multiple changes]

2007-04-30  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR C++/31721
        * tree.c (reconstruct_complex_type): Reconstruct a reference
        correctly.
        Also use the same mode for the pointer as the old pointer type.
2007-04-30  Andrew pinski  <andrew_pinski@playstation.sony.com>

        PR C++/31721
        * g++.dg/ext/vector7.C: New testcase.

From-SVN: r124300
This commit is contained in:
Andrew Pinski 2007-04-30 10:01:18 -07:00
parent 8f1a19e2c5
commit ab44f2818c
4 changed files with 31 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2007-04-30 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C++/31721
* tree.c (reconstruct_complex_type): Reconstruct a reference
correctly.
Also use the same mode for the pointer as the old pointer type.
2007-04-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
* doc/trouble.texi (Interoperation): Remove note about Ultrix

View File

@ -1,4 +1,9 @@
2007-04-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
2007-04-30 Andrew pinski <andrew_pinski@playstation.sony.com>
PR C++/31721
* g++.dg/ext/vector7.C: New testcase.
2007-04-29 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/31591
* gfortran.dg/bound_simplification_1.f90: New test.

View File

@ -0,0 +1,8 @@
// { dg-options "" }
// { dg-do compile }
// PR C++/31721 and PR 14217
// the attribute vector_size would change a reference type into a pointer type which was wrong.
#define vector __attribute__((__vector_size__(16) ))
vector int b;
vector int &a = b;

View File

@ -7236,11 +7236,18 @@ tree
reconstruct_complex_type (tree type, tree bottom)
{
tree inner, outer;
if (POINTER_TYPE_P (type))
if (TREE_CODE (type) == POINTER_TYPE)
{
inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
outer = build_pointer_type (inner);
outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
TYPE_REF_CAN_ALIAS_ALL (type));
}
else if (TREE_CODE (type) == REFERENCE_TYPE)
{
inner = reconstruct_complex_type (TREE_TYPE (type), bottom);
outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
TYPE_REF_CAN_ALIAS_ALL (type));
}
else if (TREE_CODE (type) == ARRAY_TYPE)
{