aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>2003-05-23 15:01:45 +0000
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>2003-05-23 15:01:45 +0000
commit43b26a012874897cecbd2cf48e09a08368191282 (patch)
tree3b7908ca33480abbafc6964aab028e6c71ea364e /gcc
parentd3971161822fad53821fddf9a1d27ab93db60f9d (diff)
downloadgcc-43b26a012874897cecbd2cf48e09a08368191282.zip
gcc-43b26a012874897cecbd2cf48e09a08368191282.tar.gz
gcc-43b26a012874897cecbd2cf48e09a08368191282.tar.bz2
re PR c++/10682 (chokes on a typedef for an enum inside a class template)
PR c++/10682 * pt.c (instantiate_class_template): Use DECL_ARTIFICIAL to check for implicitly created typedef to an enum. * g++.dg/template/instantiate4.C: New test. From-SVN: r67118
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/instantiate4.C13
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4437535..238f56e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-05-23 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/10682
+ * pt.c (instantiate_class_template): Use DECL_ARTIFICIAL to
+ check for implicitly created typedef to an enum.
+
2003-05-21 Jason Merrill <jason@redhat.com>
* init.c (build_vec_delete): Copy the address into a temporary
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index c86a157..f775346 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -5500,7 +5500,7 @@ instantiate_class_template (type)
CLASSTYPE_NESTED_UTDS case above. */
if (!(TREE_CODE (r) == TYPE_DECL
&& TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
- && TYPE_CONTEXT (TREE_TYPE (r)) == type))
+ && DECL_ARTIFICIAL (r)))
{
set_current_access_from_decl (r);
finish_member_declaration (r);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6774aea..d0beb83 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-05-23 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/10682
+ * g++.dg/template/instantiate4.C: New test.
+
2003-05-22 Roger Sayle <roger@eyesopen.com>
* gcc.c-torture/execute/ieee/inf-2.c: New test case.
diff --git a/gcc/testsuite/g++.dg/template/instantiate4.C b/gcc/testsuite/g++.dg/template/instantiate4.C
new file mode 100644
index 0000000..732b852
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/instantiate4.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+
+// Origin: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
+
+// PR c++/10682: Typedef to enum template instantiation logic.
+
+template <typename T>
+struct Foo {
+ enum E {a,b,c};
+ typedef E EE;
+};
+
+void Baz(Foo<int>::EE x);