[C++ RFC / Patch] PR 51213 ("access control under SFINAE")

Paolo Carlini paolo.carlini@oracle.com
Sat Jul 14 09:57:00 GMT 2012


Hi,

and, first, thanks a lot for all the nice work and help on these issues!

On 07/13/2012 12:55 AM, Jason Merrill wrote:
> diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
> index fec88eb..95c6464 100644
> --- a/gcc/cp/pt.c
> +++ b/gcc/cp/pt.c
> @@ -8334,7 +8334,7 @@ apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
>   
>   /* Perform (or defer) access check for typedefs that were referenced
>      from within the template TMPL code.
> -   This is a subroutine of instantiate_template and instantiate_class_template.
> +   This is a subroutine of instantiate_decl and instantiate_class_template.
>      TMPL is the template to consider and TARGS is the list of arguments of
>      that template.  */
>   
> @@ -14380,12 +14380,6 @@ instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
>     /* Now we know the specialization, compute access previously
>        deferred.  */
>     push_access_scope (fndecl);
> -
> -  /* Some typedefs referenced from within the template code need to be access
> -     checked at template instantiation time, i.e now. These types were
> -     added to the template at parsing time. Let's get those and perfom
> -     the acces checks then.  */
> -  perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
>     perform_deferred_access_checks ();
>     pop_access_scope (fndecl);
>     pop_deferring_access_checks ();
> @@ -18395,6 +18389,13 @@ instantiate_decl (tree d, int defer_ok,
>         /* Set up context.  */
>         start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
>   
> +      /* Some typedefs referenced from within the template code need to be
> +	 access checked at template instantiation time, i.e now. These
> +	 types were added to the template at parsing time. Let's get those
> +	 and perform the access checks then.  */
> +      perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
> +				     gen_args);
> +
I'm working on integrating again my work.

The above change of yours appear to imply that, at variance with what I 
had in my first draft, perform_typedefs_access_check shouldn't really 
gain a tsubst_flags_t argument, because now it's called by 
instantiate_decl and instantiate_class_template_1 (from which I was 
passing a true / tf_error). Makes sense?

Thanks!
Paolo.



More information about the Gcc-patches mailing list