From 3cedc9d8ecaa9ab1412fbcac70a82b874e03a95f Mon Sep 17 00:00:00 2001
From: Mark Mitchell <mark@codesourcery.com>
Date: Tue, 17 Jun 2003 22:24:58 +0000
Subject: [PATCH] re PR c++/10712 (ICE in constructor_name_full, at
 cp/decl2.c:1255)

	PR c++/1255
	* class.c (handle_using_decl): Robustify.

	PR c++/1255
	* g++.dg/lookup/using3.C: New test.

From-SVN: r68118
---
 gcc/cp/ChangeLog                     |  3 +++
 gcc/cp/class.c                       |  3 +++
 gcc/testsuite/ChangeLog              |  5 +++++
 gcc/testsuite/g++.dg/lookup/using7.C | 11 +++++++++++
 4 files changed, 22 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/lookup/using7.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a3585fce330f..cf67ace445a6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
 2003-06-17  Mark Mitchell  <mark@codesourcery.com>
 
+	PR c++/1255
+	* class.c (handle_using_decl): Robustify.
+
 	PR c++/11105
 	* cp-tree.h (DECL_CONV_FN_TYPE): New method.
 	* mangle.c (struct globals): Remove internal_mangling_p.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index c4887f1bb8d1..53f097b2bdf4 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -1108,6 +1108,9 @@ handle_using_decl (tree using_decl, tree t)
   tree flist = NULL_TREE;
   tree old_value;
 
+  if (ctype == error_mark_node)
+    return;
+
   binfo = lookup_base (t, ctype, ba_any, NULL);
   if (! binfo)
     {
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9c1fcd25707b..ef4631370751 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-17  Mark Mitchell  <mark@codesourcery.com>
+
+	PR c++/1255
+	* g++.dg/lookup/using7.C: New test.
+	
 2003-06-17  Mark Mitchell  <mark@codesourcery.com>
 
 	PR c++/11105
diff --git a/gcc/testsuite/g++.dg/lookup/using7.C b/gcc/testsuite/g++.dg/lookup/using7.C
new file mode 100644
index 000000000000..5f187fef5648
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lookup/using7.C
@@ -0,0 +1,11 @@
+template <typename T, bool=T::X> struct A
+{
+  int i;
+};
+
+template <typename T> struct B : A<T>
+{
+  using A<T>::i; // { dg-error "" } 
+};
+
+B<void> b; // { dg-error "" }
-- 
GitLab