51 lines
1.5 KiB
Diff
51 lines
1.5 KiB
Diff
2018-02-07 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.
|
|
|
|
* gcc.target/aarch64/pr84252.c: New test.
|
|
|
|
--- gcc/var-tracking.c.jj 2018-01-04 00:43:15.007702432 +0100
|
|
+++ gcc/var-tracking.c 2018-02-07 12:47:09.735980882 +0100
|
|
@@ -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);
|
|
--- gcc/testsuite/gcc.target/aarch64/pr84252.c.jj 2018-02-07 14:01:27.987436160 +0100
|
|
+++ gcc/testsuite/gcc.target/aarch64/pr84252.c 2018-02-07 13:59:47.736644299 +0100
|
|
@@ -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)
|
|
+{
|
|
+}
|