re PR c++/45917 (inaccessible types allowed as template argument in nested-name-speci...
authorJason Merrill <jason@redhat.com>
Sun, 17 Mar 2013 02:39:22 +0000 (22:39 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 17 Mar 2013 02:39:22 +0000 (22:39 -0400)
PR c++/45917
* parser.c (cp_parser_template_id): Don't forget access checks.

From-SVN: r196744

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/g++.dg/template/access26.C [new file with mode: 0644]

index 171c52a..5e42ff5 100644 (file)
@@ -1,5 +1,8 @@
 2013-03-16  Jason Merrill  <jason@redhat.com>
 
+       PR c++/45917
+       * parser.c (cp_parser_template_id): Don't forget access checks.
+
        PR c++/52374
        * pt.c (tsubst_qualified_id): Use current_nonlambda_class_type.
 
index 66684dc..47ff995 100644 (file)
@@ -12818,7 +12818,7 @@ cp_parser_template_id (cp_parser *parser,
        error_at (token->location, "parse error in template argument list");
     }
 
-  pop_deferring_access_checks ();
+  pop_to_parent_deferring_access_checks ();
   return template_id;
 }
 
diff --git a/gcc/testsuite/g++.dg/template/access26.C b/gcc/testsuite/g++.dg/template/access26.C
new file mode 100644 (file)
index 0000000..1c5de9a
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/45917
+
+template < typename T >
+struct A { static int i; };
+class B { typedef int X; };    // { dg-error "private" }
+void f() { A<B::X>::i = 0; }   // { dg-error "this context" }