From 6f7133ec4f4b34aca38c286bb3d95c311206d1c6 Mon Sep 17 00:00:00 2001 From: Ilya Leoshkevich Date: Wed, 24 Oct 2018 12:04:53 +0000 Subject: [PATCH] S/390: Fix ICE in s390_check_qrst_address () In r265371 (S/390: Make "b" constraint match literal pool references) the CONSTANT_POOL_ADDRESS_P () check was moved from s390_loadrelative_operand_p () to s390_check_qrst_address (). However, in the original code it was guarded by SYMBOL_REF_P (), which was not added to the new code. gcc/ChangeLog: 2018-10-24 Ilya Leoshkevich * config/s390/s390.c (s390_check_qrst_address): Add the missing SYMBOL_REF_P () check. gcc/testsuite/ChangeLog: 2018-10-24 Ilya Leoshkevich * gcc.target/s390/20181024-1.c: New test. From-SVN: r265458 --- gcc/ChangeLog | 5 ++++ gcc/config/s390/s390.c | 4 ++- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.target/s390/20181024-1.c | 32 ++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/s390/20181024-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd70bab9265..300ab6cd4d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-10-24 Ilya Leoshkevich + + * config/s390/s390.c (s390_check_qrst_address): Add the missing + SYMBOL_REF_P () check. + 2018-10-24 Richard Biener PR tree-optimization/87105 diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 1de1a716aa3..ae28a36881d 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -3162,7 +3162,9 @@ s390_check_qrst_address (char c, rtx op, bool lit_pool_ok) /* This check makes sure that no symbolic address (except literal pool references) are accepted by the R or T constraints. */ if (s390_loadrelative_operand_p (op, &symref, NULL) - && (!lit_pool_ok || !CONSTANT_POOL_ADDRESS_P (symref))) + && (!lit_pool_ok + || !SYMBOL_REF_P (symref) + || !CONSTANT_POOL_ADDRESS_P (symref))) return 0; /* Ensure literal pool references are only accepted if LIT_POOL_OK. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index df476ec2eb9..3a9e5afe9f5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-10-24 Ilya Leoshkevich + + * gcc.target/s390/20181024-1.c: New test. + 2018-10-24 Richard Biener PR tree-optimization/87105 diff --git a/gcc/testsuite/gcc.target/s390/20181024-1.c b/gcc/testsuite/gcc.target/s390/20181024-1.c new file mode 100644 index 00000000000..830ab5b927c --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/20181024-1.c @@ -0,0 +1,32 @@ +/* Make sure s390_check_qrst_address () correctly handles UNSPEC rtxs. */ +/* { dg-compile } */ +/* { dg-options "-march=z196 -O2 -fPIC" } */ + +int a, b, g, h; +struct +{ + int i; + struct + { + int d; + } k[]; +} f; + +void m(int); + +void l() +{ + int j; + for (; h;) + { + m(( + { + __asm__("" : "=r"(g)); + b; + } + )); + f.k[j].d = a; + j++; + } + f.i = j; +} -- 2.30.2