From: Jakub Jelinek Date: Fri, 22 Jun 2018 20:40:45 +0000 (+0200) Subject: backport: re PR c/84853 (ICE: verify_gimple failed (expand_shift_1)) X-Git-Tag: releases/gcc-7.4.0~366 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e915c604c15b18236c0d4a0109f8683b5c701150;p=thirdparty%2Fgcc.git backport: re PR c/84853 (ICE: verify_gimple failed (expand_shift_1)) Backported from mainline 2018-03-15 Jakub Jelinek PR c/84853 * c-typeck.c (build_binary_op) : 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 --- diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index b48e7cb422ec..866ad995ceb1 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,13 @@ +2018-06-22 Jakub Jelinek + + Backported from mainline + 2018-03-15 Jakub Jelinek + + PR c/84853 + * c-typeck.c (build_binary_op) : + 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 ee365313c817..c72932986fa0 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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 98fa2654761f..4abcfb03f5af 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2018-06-22 Jakub Jelinek Backported from mainline + 2018-03-15 Jakub Jelinek + + PR c/84853 + * gcc.dg/pr84853.c: New test. + 2018-03-13 Jakub Jelinek PR middle-end/84834 diff --git a/gcc/testsuite/gcc.dg/pr84853.c b/gcc/testsuite/gcc.dg/pr84853.c new file mode 100644 index 000000000000..c74526369a4e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84853.c @@ -0,0 +1,19 @@ +/* PR c/84853 */ +/* { dg-do compile } */ + +typedef float V __attribute__((__vector_size__ (16))); +typedef int W __attribute__((__vector_size__ (16))); + +void +foo (int x, V *y, V *z, W *w) +{ + *y = *y << x; /* { dg-error "invalid operands to binary <<" } */ + *z = *z << *w; /* { dg-error "invalid operands to binary <<" } */ +} + +void +bar (int x, V *y, V *z, W *w) +{ + *y = *y >> x; /* { dg-error "invalid operands to binary >>" } */ + *z = *z >> *w; /* { dg-error "invalid operands to binary >>" } */ +}