Hi Anna,

thanks for your patch!  I did not have to time look at this
(and I can't approve it), but here is something I noticed.


You have an error for jumping into a defer block

>  
> @@ -4244,10 +4274,29 @@ check_earlier_gotos (tree label, struct c_label_vars* 
> label_vars)
>  
>        if (g->goto_bindings.stmt_exprs.count > 0)
>       {
> -       auto_diagnostic_group d;
>         error_at (g->loc, "jump into statement expression");
>         inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
> -               label);
> +           label);
> +     }
> +
> +      if (g->goto_bindings.defer_blocks.count > 0)
> +     {
> +       error_at (g->loc, "jump into defer block");
> +       inform (DECL_SOURCE_LOCATION (label), "label %qD defined here",
> +           label);
> +     }
> +      else if (g->goto_bindings.defer_blocks.left)


But no tests for jumping into the defer from an earlier gotos.

> +
> +void d () {
> +  defer {
> +b:
> +  }
> +  goto b; /* { dg-error "jump out of defer block" } */
> +}

And this should probably also be "jump into", but the goto
comes later.

Martin 



Reply via email to