diff options
author | Richard Biener <rguenther@suse.de> | 2019-04-01 07:16:38 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-04-01 07:16:38 +0000 |
commit | 2a82beaa820410600441f36e49e91a3a18e04fc5 (patch) | |
tree | 490cacb54993cc607e3f50a0411bec1e99e8f8b3 /gcc/gimple.c | |
parent | acf8e57ae2ee28123fc04ce26635963751851824 (diff) | |
download | gcc-2a82beaa820410600441f36e49e91a3a18e04fc5.zip gcc-2a82beaa820410600441f36e49e91a3a18e04fc5.tar.gz gcc-2a82beaa820410600441f36e49e91a3a18e04fc5.tar.bz2 |
re PR c/71598 (Wrong optimization with aliasing enums)
2019-04-01 Richard Biener <rguenther@suse.de>
PR c/71598
* gimple.c: Include langhooks.h.
(gimple_get_alias_set): Treat enumeral types as the underlying
integer type.
c/
* c-tree.h (c_get_alias_set): Declare.
* c-objc-common.h (LANG_HOOKS_GET_ALIAS_SET): Use c_get_alias_set.
* c-objc-common.c (c_get_alias_set): Treat enumeral types
as the underlying integer type.
* gcc.dg/torture/pr71598-1.c: New testcase.
* gcc.dg/torture/pr71598-2.c: Likewise.
* gcc.dg/torture/pr71598-3.c: Likewise.
From-SVN: r270052
Diffstat (limited to 'gcc/gimple.c')
-rw-r--r-- | gcc/gimple.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c index 3a91d1c..8fae60f 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see #include "stringpool.h" #include "attribs.h" #include "asan.h" +#include "langhooks.h" /* All the tuples have their operand vector (if present) at the very bottom @@ -2587,6 +2588,16 @@ gimple_get_alias_set (tree t) return get_alias_set (t1); } + /* Allow aliasing between enumeral types and the underlying + integer type. This is required for C since those are + compatible types. */ + else if (TREE_CODE (t) == ENUMERAL_TYPE) + { + tree t1 = lang_hooks.types.type_for_size (tree_to_uhwi (TYPE_SIZE (t)), + false /* short-cut above */); + return get_alias_set (t1); + } + return -1; } |