Fix ICE with -g and -std=c23 when forming composite types [PR113438]

Set TYPE_STUB_DECL to an artificial decl when creating a new structure
as a composite type.

	PR c/113438

gcc/c/
	* c-typeck.cc (composite_type_internal): Set TYPE_STUB_DECL.

gcc/testsuite/
	* gcc.dg/pr113438.c: New test.
This commit is contained in:
Martin Uecker 2024-01-23 13:33:34 +01:00
parent 3fed1609f6
commit f6ba433d3c
2 changed files with 12 additions and 0 deletions

View file

@ -585,6 +585,11 @@ composite_type_internal (tree t1, tree t2, struct composite_cache* cache)
/* Setup the struct/union type. Because we inherit all variably
modified components, we can ignore the size expression. */
tree expr = NULL_TREE;
/* Set TYPE_STUB_DECL for debugging symbols. */
TYPE_STUB_DECL (n) = pushdecl (build_decl (input_location, TYPE_DECL,
NULL_TREE, n));
n = finish_struct(input_location, n, fields, attributes, NULL, &expr);
n = qualify_type (n, t1);

View file

@ -0,0 +1,7 @@
/* PR113438
* { dg-do compile }
* { dg-options "-std=c23 -g" } */
void g(struct foo { int x; } a);
void g(struct foo { int x; } a);