On Tue, May 14, 2019 at 11:20:16PM +0200, Paolo Carlini wrote:
> Hi again,
> 
> On 14/05/19 21:21, Paolo Carlini wrote:
> > Hi,
> > 
> > On 14/05/19 21:05, Marek Polacek wrote:
> > > On Tue, May 14, 2019 at 03:01:35PM -0400, Nathan Sidwell wrote:
> > > > On 5/14/19 11:28 AM, Paolo Carlini wrote:
> > > > 
> > > > > another straightforward one sitting in my tree... Sanity checked on
> > > > > x86_64-linux.
> > > > I suspect many/all of the TREE_CODE (x) == TEMPLATE_DECL
> > > > (or DECL_FUNCTION_TEMPLATE_P) could also be elided -- we don't
> > > > have naked
> > > > function templates at that point, they're always wrapped in overloads.
> > > > Could you see if that's true?
> > > That's what I pointed out here
> > > <https://gcc.gnu.org/ml/gcc-patches/2019-05/msg00718.html>
> > > but I thought it might be better to do it as a follow-up.
> > 
> > Yeah, on the other hand, we can as well sort out this now: after all, I
> > like to spend time on this kind of work also in the hope that little
> > buglets or issues will then become more evident. Thus, I'm removing all
> > those checks for TEMPLATE_DECL and DECL_FUNCTION_TEMPLATE_P, let's see
> > what regression testing tells us. To be clear: I'm leaving
> > TEMPLATE_ID_EXPR (two of those) alone.
> 
> ... so the below passes testing on x86_64-linux. In fact, I think we are on
> a pretty safe ground, now at the beginning of Stage 1: if, over the next
> months we get a testcase which causes one of the 4 tightened gcc_assert to
> trip we'll comfortably deal with it.

Nice!

Just nits:

> Index: call.c
> ===================================================================
> --- call.c    (revision 271166)
> +++ call.c    (working copy)
> @@ -4383,9 +4383,7 @@ perform_overload_resolution (tree fn,
>    *any_viable_p = true;
>  
>    /* Check FN.  */
> -  gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
> -           || TREE_CODE (fn) == TEMPLATE_DECL
> -           || TREE_CODE (fn) == OVERLOAD
> +  gcc_assert (OVL_P (fn)
>             || TREE_CODE (fn) == TEMPLATE_ID_EXPR);

This can now fit on one line.

> Index: parser.c
> ===================================================================
> --- parser.c  (revision 271166)
> +++ parser.c  (working copy)
> @@ -16479,10 +16479,8 @@ cp_parser_template_id (cp_parser *parser,
>      {
>        /* If it's not a class-template or a template-template, it should be
>        a function-template.  */
> -      gcc_assert ((DECL_FUNCTION_TEMPLATE_P (templ)
> -                || TREE_CODE (templ) == OVERLOAD
> -                || TREE_CODE (templ) == FUNCTION_DECL
> -                || BASELINK_P (templ)));
> +      gcc_assert (OVL_P (templ)
> +               || BASELINK_P (templ));
  
Likewise.

> Index: search.c
> ===================================================================
> --- search.c  (revision 271166)
> +++ search.c  (working copy)
> @@ -1058,10 +1058,8 @@ build_baselink (tree binfo, tree access_binfo, tre
>  {
>    tree baselink;
>  
> -  gcc_assert (TREE_CODE (functions) == FUNCTION_DECL
> -           || TREE_CODE (functions) == TEMPLATE_DECL
> -           || TREE_CODE (functions) == TEMPLATE_ID_EXPR
> -           || TREE_CODE (functions) == OVERLOAD);
> +  gcc_assert (OVL_P (functions)
> +           || TREE_CODE (functions) == TEMPLATE_ID_EXPR);

Likewise.

Marek

Reply via email to