From f74d2b776f9017c404f76c854a06661bc7183608 Mon Sep 17 00:00:00 2001
From: nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 12 Apr 2001 07:42:17 +0000
Subject: [PATCH] cp: 	* method.c (make_thunk): Clear DECL_CLONED_FUNCTION.
 testsuite: 	* g++.old-deja/g++.other/crash40.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41294 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog                              |  4 ++++
 gcc/cp/method.c                               |  2 ++
 gcc/testsuite/ChangeLog                       |  4 ++++
 .../g++.old-deja/g++.other/crash40.C          | 19 +++++++++++++++++++
 4 files changed, 29 insertions(+)
 create mode 100644 gcc/testsuite/g++.old-deja/g++.other/crash40.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 704c7fc5ec0d..1066de11c438 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2001-04-12  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* method.c (make_thunk): Clear DECL_CLONED_FUNCTION.
+
 2001-04-11  Mark Mitchell  <mark@codesourcery.com>
 
 	* optimize.c (maybe_clone_body): Copy DECL_NUM_STMTS from the
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 2f894846a80a..5839767375a5 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -363,6 +363,8 @@ make_thunk (function, delta, vcall_index, generate_with_vtable_p)
       DECL_SAVED_FUNCTION_DATA (thunk) = NULL;
       DECL_DESTRUCTOR_P (thunk) = 0;
       DECL_CONSTRUCTOR_P (thunk) = 0;
+      /* And neither is it a clone.  */
+      DECL_CLONED_FUNCTION (thunk) = NULL_TREE;
       DECL_EXTERNAL (thunk) = 1;
       DECL_ARTIFICIAL (thunk) = 1;
       /* Even if this thunk is a member of a local class, we don't
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 40756355a7c3..36c2e53cbf83 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-04-12  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* g++.old-deja/g++.other/crash40.C: New test.
+
 2001-04-11  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* gcc.c-torture/execute/20010122-1.c: Fix declaration of alloca.
diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash40.C b/gcc/testsuite/g++.old-deja/g++.other/crash40.C
new file mode 100644
index 000000000000..3af3f731a66a
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/crash40.C
@@ -0,0 +1,19 @@
+// Build don't link:
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 11 April 2001 <nathan@codesourcery.com>
+// Origin: Theo Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
+
+// Bug 1917. We were considering thunks to clones to be clones. and
+// hence getting confused.
+
+struct A { virtual ~A(); };
+struct B { virtual ~B(); };
+
+struct C: public A,B {};
+
+template <class TYPE>
+inline TYPE
+sqr(const TYPE& x) {
+    return 1;
+}
+int f(const int t) { return sqr(t); }
-- 
GitLab