re PR target/16819 (ICE with empty struct as arg)
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 23 Dec 2004 16:09:01 +0000 (16:09 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Thu, 23 Dec 2004 16:09:01 +0000 (16:09 +0000)
gcc/ChangeLog:
PR target/16819
* calls.c (load_register_parameters): Don't call use_regs when
nregs is zero.
gcc/testsuite/ChangeLog:
PR target/16891
* gcc.dg/empty2.c: New.

From-SVN: r92551

gcc/ChangeLog
gcc/calls.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/empty2.c [new file with mode: 0644]

index e59394946c7981a148796a9430ba3f1804494330..10de8a5f31e97580dae19901820a79260edf6d09 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-23  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR target/16819
+       * calls.c (load_register_parameters): Don't call use_regs when
+       nregs is zero.
+
 2004-12-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        PR middle-end/17746
index 3c4d13e9dada9f375d8aef8226b4e91bbafa9b70..946e5bdf95de1f2541b310cb26974bd2603c7354 100644 (file)
@@ -1554,8 +1554,8 @@ load_register_parameters (struct arg_data *args, int num_actuals,
            use_group_regs (call_fusage, reg);
          else if (nregs == -1)
            use_reg (call_fusage, reg);
-         else
-           use_regs (call_fusage, REGNO (reg), nregs == 0 ? 1 : nregs);
+         else if (nregs > 0)
+           use_regs (call_fusage, REGNO (reg), nregs);
        }
     }
 }
index dd249f3289908ea67a4e77df2606d12d1ef4dab0..45620fdd5617b1a6a5619b5f80f48a3ee5fa32cd 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-23  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR target/16891
+       * gcc.dg/empty2.c: New.
+
 2004-12-23  Richard Henderson  <rth@redhat.com>
 
        * lib/target-supports.exp (check_effective_target_vect_no_align): 
diff --git a/gcc/testsuite/gcc.dg/empty2.c b/gcc/testsuite/gcc.dg/empty2.c
new file mode 100644 (file)
index 0000000..7b91fb2
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+
+double d=0;
+
+struct A {} a;
+
+void foo(struct A x)
+{
+  d=0;
+}
+
+void bar()
+{
+  if (d) foo(a);
+}