On Mon, Jan 29, 2018 at 6:29 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> Hi!
>
> In r245223 cp_parser_postfix_dot_deref_expression has been changed to
> workaround some buggy template code with a pedwarn instead of error,
> in r245440 Marek tweaked that by adding the && EXPR_P (postfix_expression)
> because we really don't want to clear TREE_TYPE on OVERLOADs or on DECLs
> that have incomplete type.
>
> There are some expression types where we don't want to clear TREE_TYPE
> either, like *CAST_EXPR, or VIEW_CONVERT_EXPR, these in various spots
> assume they have non-NULL TREE_TYPE.
>
> So, the following patch extends it by looking at the various
> postfix_expression kinds and deciding what to do by tweaking kind.
> Changing kind from DK_PEDWARN where it pedwarns + clears TREE_TYPE and scope
> to DK_ERROR will result in an error + what we used to do before r245223,
> i.e. scope = error_mark_node and postfix_expression = error_mark_node too.
> Changing kind to DK_IGNORED will do what Marek's patch did, not diagnose
> anything at that point, let other code diagnose incomplete type later on
> or diagnose some other error.  For OVERLOAD that seems like a better
> choice, not really sure about other cases.  For now the patch uses DK_ERROR
> and thus what we used to do before r245223 for non-OVERLOAD.  At least
> when not processing_template_decl I'd say it is better to error right away.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> Or should I change the switch body to do other kind = overrides?

I think we want to avoid clobbering NON_LVALUE_EXPR location wrappers, too.

This has gotten large enough that it should break out into its own function.

OK with those changes.

Jason

Reply via email to