OSDN Git Service

Fix PR c++/42218
authordodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Dec 2009 07:38:42 +0000 (07:38 +0000)
committerdodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Dec 2009 07:38:42 +0000 (07:38 +0000)
gcc/cp/ChangeLog:
PR c++/42218
* cxx-pretty-print.c (pp_cxx_unqualified_id): Print only innermost
template arguments.

gcc/testsuite/ChangeLog:
PR c++/42218
* g++.dg/other/error33.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154972 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cxx-pretty-print.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/error33.C [new file with mode: 0644]

index cdbd1c4..0c96a78 100644 (file)
@@ -1,3 +1,9 @@
+2009-12-04  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/42218
+       * cxx-pretty-print.c (pp_cxx_unqualified_id): Print only innermost
+       template arguments.
+
 2009-12-03  Jason Merrill  <jason@redhat.com>
 
        PR c++/41611
index 305b7ed..5ef84fe 100644 (file)
@@ -203,7 +203,8 @@ pp_cxx_unqualified_id (cxx_pretty_printer *pp, tree t)
       if (CLASS_TYPE_P (t) && CLASSTYPE_USE_TEMPLATE (t))
        {
          pp_cxx_begin_template_argument_list (pp);
-         pp_cxx_template_argument_list (pp, CLASSTYPE_TI_ARGS (t));
+         pp_cxx_template_argument_list (pp, INNERMOST_TEMPLATE_ARGS
+                                                 (CLASSTYPE_TI_ARGS (t)));
          pp_cxx_end_template_argument_list (pp);
        }
       break;
index cc9a74e..956d778 100644 (file)
@@ -1,3 +1,8 @@
+2009-12-04  Dodji Seketeli  <dodji@redhat.com>
+
+       PR c++/42218
+       * g++.dg/other/error33.C: New test.
+
 2009-12-03  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/abi/guard2.C: Run on *-*-linux* rather than x86-*-*
diff --git a/gcc/testsuite/g++.dg/other/error33.C b/gcc/testsuite/g++.dg/other/error33.C
new file mode 100644 (file)
index 0000000..48fca70
--- /dev/null
@@ -0,0 +1,11 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin: PR c++/42218
+// { dg-do compile }
+
+template<int> struct A
+{
+      template<int> struct B;
+};
+
+int i = A<0>::B<0>::X::Y; // { dg-error "'A<0>::B<0>::X' has not been declared" }
+