aboutsummaryrefslogtreecommitdiff
path: root/gcc/c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-06-22 22:40:45 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-06-22 22:40:45 +0200
commite915c604c15b18236c0d4a0109f8683b5c701150 (patch)
tree2c58fb9985a41e37454b025aa5ba81d5f574ae4f /gcc/c
parent256768d44736da4b5dc68c838ace22feeeaf770c (diff)
downloadgcc-e915c604c15b18236c0d4a0109f8683b5c701150.zip
gcc-e915c604c15b18236c0d4a0109f8683b5c701150.tar.gz
gcc-e915c604c15b18236c0d4a0109f8683b5c701150.tar.bz2
backport: re PR c/84853 (ICE: verify_gimple failed (expand_shift_1))
Backported from mainline 2018-03-15 Jakub Jelinek <jakub@redhat.com> PR c/84853 * c-typeck.c (build_binary_op) <case RSHIFT_EXPR, case LSHIFT_EXPR>: If code1 is INTEGER_TYPE, only allow code0 VECTOR_TYPE if it has INTEGER_TYPE element type. * gcc.dg/pr84853.c: New test. From-SVN: r261922
Diffstat (limited to 'gcc/c')
-rw-r--r--gcc/c/ChangeLog10
-rw-r--r--gcc/c/c-typeck.c6
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index b48e7cb..866ad99 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,13 @@
+2018-06-22 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2018-03-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/84853
+ * c-typeck.c (build_binary_op) <case RSHIFT_EXPR, case LSHIFT_EXPR>:
+ If code1 is INTEGER_TYPE, only allow code0 VECTOR_TYPE if it has
+ INTEGER_TYPE element type.
+
2018-01-25 Release Manager
* GCC 7.3.0 released.
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index ee36531..c729329 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -11150,7 +11150,8 @@ build_binary_op (location_t location, enum tree_code code,
converted = 1;
}
else if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE
- || code0 == VECTOR_TYPE)
+ || (code0 == VECTOR_TYPE
+ && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE))
&& code1 == INTEGER_TYPE)
{
doing_shift = true;
@@ -11207,7 +11208,8 @@ build_binary_op (location_t location, enum tree_code code,
converted = 1;
}
else if ((code0 == INTEGER_TYPE || code0 == FIXED_POINT_TYPE
- || code0 == VECTOR_TYPE)
+ || (code0 == VECTOR_TYPE
+ && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE))
&& code1 == INTEGER_TYPE)
{
doing_shift = true;