calls.c (expand_call): If sibcall_failure is set during pass 1, clear tail_call_insns...
authorJakub Jelinek <jakub@redhat.com>
Fri, 27 Oct 2000 19:49:53 +0000 (21:49 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 27 Oct 2000 19:49:53 +0000 (21:49 +0200)
* calls.c (expand_call): If sibcall_failure is set during pass 1,
clear tail_call_insns as well.

* g++.old-deja/g++.other/eh2.C: New test.

From-SVN: r37087

gcc/ChangeLog
gcc/calls.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.other/eh2.C [new file with mode: 0644]

index 2c42e84568003f615d03f7228ec1b646b63b04ee..35ae9ddc3353229188d7fdba1e381c0056f8362e 100644 (file)
@@ -1,3 +1,8 @@
+2000-10-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * calls.c (expand_call): If sibcall_failure is set during pass 1,
+       clear tail_call_insns as well.
+
 2000-10-27  Nick Clifton  <nickc@redhat.com>
 
        * config/arm/arm-protos.h (arm_function_ok_for_sibcall): Add
index e90be2ea81feddce4a001d7505ef51cc7b3e6164..da850ccada4b694018d92f1032def5f9daf07c62 100644 (file)
@@ -3363,10 +3363,6 @@ expand_call (exp, target, ignore)
        {
          tail_call_insns = insns;
 
-         /* If something prevents making this a sibling call,
-            zero out the sequence.  */
-         if (sibcall_failure)
-           tail_call_insns = NULL_RTX;
          /* Restore the pending stack adjustment now that we have
             finished generating the sibling call sequence.  */
 
@@ -3385,6 +3381,11 @@ expand_call (exp, target, ignore)
        }
       else
        normal_call_insns = insns;
+
+      /* If something prevents making this a sibling call,
+        zero out the sequence.  */
+      if (sibcall_failure)
+       tail_call_insns = NULL_RTX;
     }
 
   /* The function optimize_sibling_and_tail_recursive_calls doesn't
index 1a4bc84404f90655ca8fedf2cb7e1f236b8787c2..84b84c801a5b8f22836f7570d818a9aae2b56970 100644 (file)
@@ -1,3 +1,7 @@
+2000-10-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * g++.old-deja/g++.other/eh2.C: New test.
+
 2000-10-27  Bernd Schmidt  <bernds@cygnus.co.uk>
 
        * gcc.c-torture/execute/20001027-1.c: New test.
diff --git a/gcc/testsuite/g++.old-deja/g++.other/eh2.C b/gcc/testsuite/g++.old-deja/g++.other/eh2.C
new file mode 100644 (file)
index 0000000..514d645
--- /dev/null
@@ -0,0 +1,18 @@
+// Build don't link:
+// Origin: Jakub Jelinek <jakub@redhat.com>
+// Special g++ Options: -O2
+
+class a {
+public:
+  double b;
+  int c;
+  ~a() { }
+};
+
+int bar(a x);
+a foo(double x);
+
+int baz(double x, int y)
+{
+   return bar(foo(x));
+}