From: Nathaniel Shead Date: Sat, 20 Apr 2024 04:44:11 +0000 (+1000) Subject: c++: Fix ICE with xobj parms and maybe incomplete decl-specifiers X-Git-Tag: basepoints/gcc-15~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7318f1a389769ab540f414fcba743e90051d466b;p=thirdparty%2Fgcc.git c++: Fix ICE with xobj parms and maybe incomplete decl-specifiers This fixes a null dereference issue when decl_specifiers.type is not yet provided. gcc/cp/ChangeLog: * parser.cc (cp_parser_parameter_declaration): Check if decl_specifiers.type is null. gcc/testsuite/ChangeLog: * g++.dg/cpp23/explicit-obj-basic7.C: New test. Signed-off-by: Nathaniel Shead --- diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index c23758cf5cf2..598380dda089 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -25780,8 +25780,9 @@ cp_parser_parameter_declaration (cp_parser *parser, } if (xobj_param_p - && (declarator ? declarator->parameter_pack_p - : PACK_EXPANSION_P (decl_specifiers.type))) + && ((declarator && declarator->parameter_pack_p) + || (decl_specifiers.type + && PACK_EXPANSION_P (decl_specifiers.type)))) { location_t xobj_param = make_location (decl_specifiers.locations[ds_this], diff --git a/gcc/testsuite/g++.dg/cpp23/explicit-obj-basic7.C b/gcc/testsuite/g++.dg/cpp23/explicit-obj-basic7.C new file mode 100644 index 000000000000..a474e97fc184 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/explicit-obj-basic7.C @@ -0,0 +1,9 @@ +// { dg-do compile { target c++23 } } + +// Shouldn't ICE +struct S { + void a(this long); + void b(this const long); + void c(this long unsigned); + void c(this signed); +};