From a5b821e448e6debe73e1154128b4ea6f7f73fbdd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 20 Mar 2019 12:26:42 +0100 Subject: [PATCH] re PR target/89752 (ICE in emit_move_insn, at expr.c:3723) PR target/89752 * lra-constraints.c (process_alt_operands) : For BLKmode, don't update this_alternative nor this_alternative_set. * g++.target/aarch64/aarch64.exp: New file. * g++.target/aarch64/pr89752.C: New test. From-SVN: r269819 --- gcc/ChangeLog | 6 +++ gcc/lra-constraints.c | 4 +- gcc/testsuite/ChangeLog | 6 +++ gcc/testsuite/g++.target/aarch64/aarch64.exp | 44 ++++++++++++++++++++ gcc/testsuite/g++.target/aarch64/pr89752.C | 11 +++++ 5 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.target/aarch64/aarch64.exp create mode 100644 gcc/testsuite/g++.target/aarch64/pr89752.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index adf1382a441..9b32d9352cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-03-20 Jakub Jelinek + + PR target/89752 + * lra-constraints.c (process_alt_operands) : For BLKmode, don't + update this_alternative nor this_alternative_set. + 2019-03-19 Jim Wilson PR target/89411 diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index ccca1303ec2..cba87eb718e 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -2350,6 +2350,8 @@ process_alt_operands (int only_alternative) break; reg: + if (mode == BLKmode) + break; this_alternative = reg_class_subunion[this_alternative][cl]; IOR_HARD_REG_SET (this_alternative_set, reg_class_contents[cl]); @@ -2360,8 +2362,6 @@ process_alt_operands (int only_alternative) IOR_HARD_REG_SET (this_costly_alternative_set, reg_class_contents[cl]); } - if (mode == BLKmode) - break; winreg = true; if (REG_P (op)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e60ec93ced3..b6a42d945a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-03-20 Jakub Jelinek + + PR target/89752 + * g++.target/aarch64/aarch64.exp: New file. + * g++.target/aarch64/pr89752.C: New test. + 2019-03-19 Martin Sebor PR tree-optimization/89688 diff --git a/gcc/testsuite/g++.target/aarch64/aarch64.exp b/gcc/testsuite/g++.target/aarch64/aarch64.exp new file mode 100644 index 00000000000..22d804287df --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/aarch64.exp @@ -0,0 +1,44 @@ +# Specific regression driver for AArch64. +# Copyright (C) 2009-2019 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . */ + +# GCC testsuite that uses the `dg.exp' driver. + +# Exit immediately if this isn't an AArch64 target. +if {![istarget aarch64*-*-*] } then { + return +} + +# Load support procs. +load_lib g++-dg.exp + +global DEFAULT_CXXFLAGS +if ![info exists DEFAULT_CXXFLAGS] then { + set DEFAULT_CXXFLAGS " -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \ + "" $DEFAULT_CXXFLAGS + +# All done. +dg-finish + diff --git a/gcc/testsuite/g++.target/aarch64/pr89752.C b/gcc/testsuite/g++.target/aarch64/pr89752.C new file mode 100644 index 00000000000..6beea746195 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/pr89752.C @@ -0,0 +1,11 @@ +// PR target/89752 +// { dg-do compile } + +struct A { A (); ~A (); short c; }; + +void +foo () +{ + A a0, a1; + __asm volatile ("" : "=rm" (a0), "=rm" (a1) : "0" (a0), "1" (a1)); // { dg-error "inconsistent operand constraints in an 'asm'" } +} -- 2.30.2