From: Jakub Jelinek Date: Fri, 22 Jun 2018 20:56:25 +0000 (+0200) Subject: backport: re PR inline-asm/84941 (internal compiler error: in reg_overlap_mentioned_p... X-Git-Tag: releases/gcc-7.4.0~353 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5832c163cf8ab089d402aff3a371a96e9598b748;p=thirdparty%2Fgcc.git backport: re PR inline-asm/84941 (internal compiler error: in reg_overlap_mentioned_p, at rtlanal.c:1870 (reg_overlap_mentioned_p()/match_asm_constraints_1())) Backported from mainline 2018-03-22 Jakub Jelinek PR inline-asm/84941 * function.c (match_asm_constraints_1): Don't do the optimization if input isn't a REG, SUBREG, MEM or constant. * gcc.dg/pr84941.c: New test. From-SVN: r261936 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c50b4c8c9fc9..8320ac48e72b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,6 +3,10 @@ Backported from mainline 2018-03-22 Jakub Jelinek + PR inline-asm/84941 + * function.c (match_asm_constraints_1): Don't do the optimization + if input isn't a REG, SUBREG, MEM or constant. + PR sanitizer/85018 * dwarf2asm.c (dw2_output_indirect_constant_1): Set DECL_INITIAL (decl) to decl at the end. diff --git a/gcc/function.c b/gcc/function.c index 21eb586a8f7b..ebb8aaf0cf07 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -6577,7 +6577,9 @@ match_asm_constraints_1 (rtx_insn *insn, rtx *p_sets, int noutputs) if (! REG_P (output) || rtx_equal_p (output, input) || (GET_MODE (input) != VOIDmode - && GET_MODE (input) != GET_MODE (output))) + && GET_MODE (input) != GET_MODE (output)) + || !(REG_P (input) || SUBREG_P (input) + || MEM_P (input) || CONSTANT_P (input))) continue; /* We can't do anything if the output is also used as input, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9b18005b0796..13b3b3ceaee1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2018-06-22 Jakub Jelinek Backported from mainline + 2018-03-22 Jakub Jelinek + + PR inline-asm/84941 + * gcc.dg/pr84941.c: New test. + 2018-03-21 Jakub Jelinek PR c/84999 diff --git a/gcc/testsuite/gcc.dg/pr84941.c b/gcc/testsuite/gcc.dg/pr84941.c new file mode 100644 index 000000000000..6f4674e54f03 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84941.c @@ -0,0 +1,10 @@ +/* PR inline-asm/84941 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +void +foo (void) +{ + short *b[1] = { 0 }; + asm volatile ("" : "=m,m" (b), "=r,r" (b) : "1,p" (b)); +}