From: Jakub Jelinek Date: Mon, 25 Jun 2018 17:25:41 +0000 (+0200) Subject: backport: re PR inline-asm/84625 (ICE with empty constraint and vector constant) X-Git-Tag: releases/gcc-6.5.0~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e77692434eb8933bfd08a916454bca062f65f102;p=thirdparty%2Fgcc.git backport: re PR inline-asm/84625 (ICE with empty constraint and vector constant) Backported from mainline 2018-03-02 Jakub Jelinek PR inline-asm/84625 * config/i386/i386.c (ix86_print_operand): Use conditional output_operand_lossage instead of gcc_assert if CONST_VECTOR is not zero vector. * gcc.target/i386/pr84625.c: New test. From-SVN: r262068 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fb2454f7e314..350caf5d9382 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,13 @@ 2018-06-25 Jakub Jelinek Backported from mainline + 2018-03-02 Jakub Jelinek + + PR inline-asm/84625 + * config/i386/i386.c (ix86_print_operand): Use conditional + output_operand_lossage instead of gcc_assert if CONST_VECTOR is not + zero vector. + 2018-02-16 Jakub Jelinek PR ipa/84425 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index a989fbd78c89..e9935eb01268 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -17736,7 +17736,8 @@ ix86_print_operand (FILE *file, rtx x, int code) since we can in fact encode that into an immediate. */ if (GET_CODE (x) == CONST_VECTOR) { - gcc_assert (x == CONST0_RTX (GET_MODE (x))); + if (x != CONST0_RTX (GET_MODE (x))) + output_operand_lossage ("invalid vector immediate"); x = const0_rtx; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 401bf84ec515..df0872636786 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -3,6 +3,9 @@ Backported from mainline 2018-03-02 Jakub Jelinek + PR inline-asm/84625 + * gcc.target/i386/pr84625.c: New test. + PR sanitizer/70875 * gcc.dg/ubsan/bounds-3.c: Add -fno-sanitize-recover=bounds to dg-options and dg-shouldfail "ubsan" directive. diff --git a/gcc/testsuite/gcc.target/i386/pr84625.c b/gcc/testsuite/gcc.target/i386/pr84625.c new file mode 100644 index 000000000000..600a6f15a9a6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr84625.c @@ -0,0 +1,12 @@ +/* PR inline-asm/84625 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -msse2" } */ + +typedef int V __attribute__((vector_size (16))); + +void +foo (void) +{ + asm volatile ("# %0" : : "X" ((V) { 1, 2, 3, 4 })); // { dg-error "invalid vector immediate" } + asm volatile ("# %0" : : "" ((V) { 2, 3, 4, 5 })); // { dg-error "invalid vector immediate" } +}