From ee5f962cc74153e35d21e87d5f8ae8e22e452b1b Mon Sep 17 00:00:00 2001
From: lerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 20 May 2001 13:22:24 +0000
Subject: [PATCH] 2001-05-20  Kriang Lerdsuwanakij 
 <lerdsuwa@users.sourceforge.net>

	* pt.c (determine_specialization): Ignore artificial functions.

2001-05-20  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>

	* g++.old-deja/g++.pt/spec41.C: New test.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42342 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog                           |  4 ++++
 gcc/cp/pt.c                                |  3 +++
 gcc/testsuite/ChangeLog                    |  4 ++++
 gcc/testsuite/g++.old-deja/g++.pt/spec41.C | 10 ++++++++++
 4 files changed, 21 insertions(+)
 create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/spec41.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 233f804fe7e2..42d2ae174a5c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2001-05-20  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+	* pt.c (determine_specialization): Ignore artificial functions.
+
 2001-05-20  Neil Booth  <neil@daikokuya.demon.co.uk>
 
 	* cp-tree.h (struct lang_identifier, C_RID_YYCODE): Update.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index c0cd2ebc42da..da0b0a664630 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -1023,6 +1023,9 @@ determine_specialization (template_id, decl, targs_out,
 	/* This is just an ordinary non-member function.  Nothing can
 	   be a specialization of that.  */
 	continue;
+      else if (DECL_ARTIFICIAL (fn))
+	/* Cannot specialize functions that are created implicitly.  */
+	continue;
       else
 	{
 	  tree decl_arg_types;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ac40b1441d2c..a39d8cca15c0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-05-20  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+	* g++.old-deja/g++.pt/spec41.C: New test.
+
 2001-05-19  Joseph S. Myers  <jsm28@cam.ac.uk>
 
 	* gcc.c-torture/compile/20010114-1.x: Remove.
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/spec41.C b/gcc/testsuite/g++.old-deja/g++.pt/spec41.C
new file mode 100644
index 000000000000..aab53c074c17
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/spec41.C
@@ -0,0 +1,10 @@
+// Build don't link:
+
+// Origin: <mikes@nilenet.com>
+
+// Bug: Specialization of implicitly created function should be
+// rejected.
+
+template<class T> class blah{};
+blah<char>::blah(){}		// ERROR - invalid specialization
+int main(){}
-- 
GitLab