aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-06-07 23:30:58 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2015-06-07 21:30:58 +0000
commitccb5ad373f204cc5690dabd1298503fde739a8ed (patch)
tree99c2edf394ef8a6f40706dc42eb4d7f0f1f7b48d /gcc/tree.c
parentd7b35f22be0a732140022245c766fa323f1a768d (diff)
downloadgcc-ccb5ad373f204cc5690dabd1298503fde739a8ed.zip
gcc-ccb5ad373f204cc5690dabd1298503fde739a8ed.tar.gz
gcc-ccb5ad373f204cc5690dabd1298503fde739a8ed.tar.bz2
alias.c (get_alias_set): Be ready for TYPE_CANONICAL of ptr_type_node to not be ptr_to_node.
* alias.c (get_alias_set): Be ready for TYPE_CANONICAL of ptr_type_node to not be ptr_to_node. * tree.c (gimple_types_compatible_p): Do not match TREE_CODE of TREE_TYPE of pointers. * gimple-expr.c (useless_type_conversion): Reorder the check for function pointers and TYPE_CANONICAL. * lto.c (hash_canonical_type): Do not hash TREE_CODE of TREE_TYPE of pointers. * gfortran.dg/lto/bind_c-1_0.f90: New testcase. * gfortran.dg/lto/bind_c-1_1.c: New testcase. * gcc.dg/lto/c-compatible-types_0.c: Rename to ... * gcc.dg/lto/c-compatible-types-1_0.c: this one; fix template * gcc.dg/lto/c-compatible-types_1.c: Rename to ... * gcc.dg/lto/c-compatible-types-1_1.c: this one; harden for -fshort-enum. From-SVN: r224201
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index f02eb19..e92e63f 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -12958,18 +12958,14 @@ gimple_canonical_types_compatible_p (const_tree t1, const_tree t2,
&& TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2))
return false;
- /* For canonical type comparisons we do not want to build SCCs
- so we cannot compare pointed-to types. But we can, for now,
- require the same pointed-to type kind and match what
- useless_type_conversion_p would do. */
+ /* Fortran standard define C_PTR type that is compatible with every
+ C pointer. For this reason we need to glob all pointers into one.
+ Still pointers in different address spaces are not compatible. */
if (POINTER_TYPE_P (t1))
{
if (TYPE_ADDR_SPACE (TREE_TYPE (t1))
!= TYPE_ADDR_SPACE (TREE_TYPE (t2)))
return false;
-
- if (TREE_CODE (TREE_TYPE (t1)) != TREE_CODE (TREE_TYPE (t2)))
- return false;
}
/* Tail-recurse to components. */