diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-06-22 22:40:45 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-06-22 22:40:45 +0200 |
commit | e915c604c15b18236c0d4a0109f8683b5c701150 (patch) | |
tree | 2c58fb9985a41e37454b025aa5ba81d5f574ae4f /gcc/c | |
parent | 256768d44736da4b5dc68c838ace22feeeaf770c (diff) | |
download | gcc-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/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/c/c-typeck.c | 6 |
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; |