diff options
author | Nathaniel Shead <nathanieloshead@gmail.com> | 2024-04-20 14:44:11 +1000 |
---|---|---|
committer | Nathaniel Shead <nathanieloshead@gmail.com> | 2024-04-24 09:24:17 +1000 |
commit | 7318f1a389769ab540f414fcba743e90051d466b (patch) | |
tree | 8951496428cf42bcc5a29d85299e6b377444f865 | |
parent | 628c2221d38715a64f828e3635317293d150e001 (diff) | |
download | gcc-7318f1a389769ab540f414fcba743e90051d466b.zip gcc-7318f1a389769ab540f414fcba743e90051d466b.tar.gz gcc-7318f1a389769ab540f414fcba743e90051d466b.tar.bz2 |
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 <nathanieloshead@gmail.com>
-rw-r--r-- | gcc/cp/parser.cc | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp23/explicit-obj-basic7.C | 9 |
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index c23758c..598380d 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 0000000..a474e97 --- /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); +}; |