if (!is_gimple_reg (old_parm) || kept[i])
continue;
tree origin = DECL_ORIGIN (old_parm);
- tree arg = gimple_call_arg (stmt, i);
+ tree arg;
+ if (transitive_remapping)
+ arg = gimple_call_arg (stmt, index_map[i]);
+ else
+ arg = gimple_call_arg (stmt, i);
if (!useless_type_conversion_p (TREE_TYPE (origin), TREE_TYPE (arg)))
{
--- /dev/null
+/* { dg-do run } */
+/* { dg-options "-g -fno-ipa-icf" } */
+
+volatile int v;
+
+int __attribute__((noipa))
+get_val0 (void) {return 0;}
+int __attribute__((noipa))
+get_val2 (void) {return 2;}
+
+struct S
+{
+ int a, b, c;
+};
+
+static int __attribute__((noinline))
+bar (struct S s, int x, int y, int z, int i)
+{
+ int r;
+ v = s.a + s.b; /* { dg-final { gdb-test . "i+1" "3" } } */
+ return r;
+}
+
+static int __attribute__((noinline))
+foo (struct S s, int i)
+{
+ int r;
+ r = bar (s, 3, 4, 5, i);
+ return r;
+}
+
+
+int
+main (void)
+{
+ struct S s;
+ int i;
+ i = get_val2 ();
+ s.a = get_val0 ();
+ s.b = get_val0 ();
+ s.c = get_val0 ();
+ int r = foo (s, i);
+ v = r + i;
+ return 0;
+}