On Tue, Mar 10, 2026 at 4:24 AM Andrew Pinski
<[email protected]> wrote:
>
> This started to ICE after r16-3747-gafa74d37e8170d which added
> a call to mark_decl_used. You can't call mark_decl_used with a
> typedef which is an error mark as you get an ICE.
> There is a check right after the newly added call for error mark,
> so let's move the call to inside that block instead.
>
> Bootstrapped and tested on x86_64-linux-gnu.

OK.

Thanks,
Richard.

>         PR c/123461
>
> gcc/c/ChangeLog:
>
>         * c-decl.cc (declspecs_add_type): Move mark_decl_used
>         call after the check for error mark node.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.dg/pr123461-1.c: New test.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/c/c-decl.cc                   |  2 +-
>  gcc/testsuite/gcc.dg/pr123461-1.c | 10 ++++++++++
>  2 files changed, 11 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gcc.dg/pr123461-1.c
>
> diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
> index 10b4d77daee..98249b92269 100644
> --- a/gcc/c/c-decl.cc
> +++ b/gcc/c/c-decl.cc
> @@ -13065,10 +13065,10 @@ declspecs_add_type (location_t loc, struct 
> c_declspecs *specs,
>      error_at (loc, "two or more data types in declaration specifiers");
>    else if (TREE_CODE (type) == TYPE_DECL)
>      {
> -      mark_decl_used (type, false);
>        specs->type = TREE_TYPE (type);
>        if (TREE_TYPE (type) != error_mark_node)
>         {
> +         mark_decl_used (type, false);
>           specs->decl_attr = DECL_ATTRIBUTES (type);
>           specs->typedef_p = true;
>           specs->explicit_signed_p = C_TYPEDEF_EXPLICITLY_SIGNED (type);
> diff --git a/gcc/testsuite/gcc.dg/pr123461-1.c 
> b/gcc/testsuite/gcc.dg/pr123461-1.c
> new file mode 100644
> index 00000000000..d94932bd2d8
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr123461-1.c
> @@ -0,0 +1,10 @@
> +/* { dg-do compile } */
> +/* { dg-options "" } */
> +/* PR c/123461 */
> +
> +void foo(int n) {
> +  enum b typedef V[]; /* { dg-error "array type has incomplete element type" 
> } */
> +  void bar(V) /* { dg-error "old-style parameter" } */
> +  V bar_ptr;
> +  {}
> +}
> --
> 2.43.0
>

Reply via email to