aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-02-09 06:48:33 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-02-09 06:48:33 +0100
commite47aebb33fd5372bcb437aba1cc3a078608c388d (patch)
treea548999f724e218dd2e206ac3141c303f247c693 /gcc
parentebd06e5ca705e69711eb58277b6f820132bb7b67 (diff)
downloadgcc-e47aebb33fd5372bcb437aba1cc3a078608c388d.zip
gcc-e47aebb33fd5372bcb437aba1cc3a078608c388d.tar.gz
gcc-e47aebb33fd5372bcb437aba1cc3a078608c388d.tar.bz2
re PR debug/84252 (ICE in get_tracked_reg_offset when building libvpx for aarch64)
PR debug/84252 * var-tracking.c (vt_add_function_parameter): Punt for non-onepart PARALLEL incoming that failed vt_get_decl_and_offset check. * gcc.target/aarch64/pr84252.c: New test. From-SVN: r257514
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr84252.c10
-rw-r--r--gcc/var-tracking.c6
4 files changed, 23 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cacb10e..e1945fe 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2018-02-09 Jakub Jelinek <jakub@redhat.com>
+ PR debug/84252
+ * var-tracking.c (vt_add_function_parameter): Punt for non-onepart
+ PARALLEL incoming that failed vt_get_decl_and_offset check.
+
PR middle-end/84237
* output.h (bss_initializer_p): Add NAMED argument, defaulted to false.
* varasm.c (bss_initializer_p): Add NAMED argument, if true, ignore
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0177e2b..12ccc31 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2018-02-09 Jakub Jelinek <jakub@redhat.com>
+ PR debug/84252
+ * gcc.target/aarch64/pr84252.c: New test.
+
PR middle-end/84237
* gcc.dg/pr84237.c: New test.
diff --git a/gcc/testsuite/gcc.target/aarch64/pr84252.c b/gcc/testsuite/gcc.target/aarch64/pr84252.c
new file mode 100644
index 0000000..fc66a26
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr84252.c
@@ -0,0 +1,10 @@
+/* PR debug/84252 */
+/* { dg-do compile } */
+/* { dg-options "-g -O2" } */
+
+struct S { __Int32x4_t b[2]; };
+
+void
+foo (struct S x)
+{
+}
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index c3d4dac..fb30ec2 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -9653,6 +9653,7 @@ vt_add_function_parameter (tree parm)
poly_int64 offset;
dataflow_set *out;
decl_or_value dv;
+ bool incoming_ok = true;
if (TREE_CODE (parm) != PARM_DECL)
return;
@@ -9743,6 +9744,7 @@ vt_add_function_parameter (tree parm)
if (!vt_get_decl_and_offset (incoming, &decl, &offset))
{
+ incoming_ok = false;
if (MEM_P (incoming))
{
/* This means argument is passed by invisible reference. */
@@ -9861,6 +9863,10 @@ vt_add_function_parameter (tree parm)
{
int i;
+ /* The following code relies on vt_get_decl_and_offset returning true for
+ incoming, which might not be always the case. */
+ if (!incoming_ok)
+ return;
for (i = 0; i < XVECLEN (incoming, 0); i++)
{
rtx reg = XEXP (XVECEXP (incoming, 0, i), 0);