mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-15 06:59:35 +08:00
re PR c++/22618 (Template non-type arguments break class access protection)
PR c++/22618 * search.c (accessible_p): Check access in the outermost set of template parameters. PR c++/22618 * g++.dg/parse/access8.C: New test. From-SVN: r105682
This commit is contained in:
parent
9ca4afb947
commit
94c813b457
@ -1,3 +1,9 @@
|
||||
2005-10-20 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/22618
|
||||
* search.c (accessible_p): Check access in the outermost set of
|
||||
template parameters.
|
||||
|
||||
2005-10-20 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* decl.c (grokdeclarator): Fix ambiguous pedwarn message.
|
||||
|
@ -872,8 +872,12 @@ accessible_p (tree type, tree decl, bool consider_local_p)
|
||||
/* In a template declaration, we cannot be sure whether the
|
||||
particular specialization that is instantiated will be a friend
|
||||
or not. Therefore, all access checks are deferred until
|
||||
instantiation. */
|
||||
if (processing_template_decl)
|
||||
instantiation. However, PROCESSING_TEMPLATE_DECL is set in the
|
||||
parameter list for a template (because we may see dependent types
|
||||
in default arguments for template parameters), and access
|
||||
checking should be performed in the outermost parameter list. */
|
||||
if (processing_template_decl
|
||||
&& (!processing_template_parmlist || processing_template_decl > 1))
|
||||
return 1;
|
||||
|
||||
if (!TYPE_P (type))
|
||||
|
@ -1,3 +1,8 @@
|
||||
2005-10-20 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/22618
|
||||
* g++.dg/parse/access8.C: New test.
|
||||
|
||||
2005-10-20 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR c++/24439
|
||||
|
12
gcc/testsuite/g++.dg/parse/access8.C
Normal file
12
gcc/testsuite/g++.dg/parse/access8.C
Normal file
@ -0,0 +1,12 @@
|
||||
// PR c++/22618
|
||||
|
||||
class foo
|
||||
{
|
||||
typedef int memfun; // { dg-error "private" }
|
||||
};
|
||||
|
||||
template<foo::memfun> // { dg-error "context" }
|
||||
struct fm_obj { };
|
||||
|
||||
template <typename T = foo::memfun> // { dg-error "context" }
|
||||
struct S {};
|
Loading…
Reference in New Issue
Block a user