* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
@ 2020-08-18 14:29 ` mpolacek at gcc dot gnu.org
2020-08-18 14:31 ` mpolacek at gcc dot gnu.org
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2020-08-18 14:29 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[10/11 Regression] ICE in |[11 Regression] ICE in
|inject_parm_decls, at |inject_parm_decls, at
|cp/parser.c:23893 |cp/parser.c:23893
CC| |mpolacek at gcc dot gnu.org
Target Milestone|--- |11.0
Last reconfirmed| |2020-08-18
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
11 Regression, started with r11-289.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
2020-08-18 14:29 ` [Bug c++/96623] [11 " mpolacek at gcc dot gnu.org
@ 2020-08-18 14:31 ` mpolacek at gcc dot gnu.org
2020-10-12 12:33 ` rguenth at gcc dot gnu.org
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2020-08-18 14:31 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
We should have rejected "noexcept()".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
2020-08-18 14:29 ` [Bug c++/96623] [11 " mpolacek at gcc dot gnu.org
2020-08-18 14:31 ` mpolacek at gcc dot gnu.org
@ 2020-10-12 12:33 ` rguenth at gcc dot gnu.org
2021-01-15 21:37 ` mpolacek at gcc dot gnu.org
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu.org @ 2020-10-12 12:33 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
` (2 preceding siblings ...)
2020-10-12 12:33 ` rguenth at gcc dot gnu.org
@ 2021-01-15 21:37 ` mpolacek at gcc dot gnu.org
2021-01-21 19:30 ` mpolacek at gcc dot gnu.org
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-15 21:37 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Keywords|ice-on-invalid-code |ice-on-valid-code
Assignee|unassigned at gcc dot gnu.org |mpolacek at gcc dot gnu.org
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
This one is valid:
constexpr int x = 0;
struct A {
void foo () {
struct B {
void bar () noexcept(x);
};
}
};
Doesn't happen when we don't delay the noexcept-specifier parsing, so mine.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
` (3 preceding siblings ...)
2021-01-15 21:37 ` mpolacek at gcc dot gnu.org
@ 2021-01-21 19:30 ` mpolacek at gcc dot gnu.org
2021-01-22 22:55 ` cvs-commit at gcc dot gnu.org
2021-01-22 22:55 ` mpolacek at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-21 19:30 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
And an extended test to check that various variables are in scope:
constexpr int x = 0;
struct A {
int a1;
void foo (int p) {
int foovar;
struct B {
int b1;
void bar1 () noexcept(x);
void bar2 () noexcept(noexcept(this->b1));
void bar3 () noexcept(noexcept(this->b2));
void bar4 () noexcept(noexcept(a1));
void bar5 () noexcept(noexcept(a2));
void bar6 () noexcept(noexcept(b1));
void bar7 () noexcept(noexcept(b2));
void bar8 () noexcept(noexcept(foovar));
void bar9 () noexcept(noexcept(p));
int b2;
};
}
int a2;
};
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
` (4 preceding siblings ...)
2021-01-21 19:30 ` mpolacek at gcc dot gnu.org
@ 2021-01-22 22:55 ` cvs-commit at gcc dot gnu.org
2021-01-22 22:55 ` mpolacek at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-01-22 22:55 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:
https://gcc.gnu.org/g:89100826acec92dfaa6ab8f2646b8053e7dbc67c
commit r11-6874-g89100826acec92dfaa6ab8f2646b8053e7dbc67c
Author: Marek Polacek <polacek@redhat.com>
Date: Thu Jan 21 16:12:28 2021 -0500
c++: ICE with noexcept in class in member function [PR96623]
I discovered very strange code in inject_parm_decls:
if (args && is_this_parameter (args))
{
gcc_checking_assert (current_class_ptr == NULL_TREE);
current_class_ptr = NULL_TREE;
We are tripping up on the assert because when we call inject_parm_decls,
current_class_ptr is set to 'A'. It was set by inject_this_parameter
after we've parsed the parameter-declaration-clause of the member
function foo. It seems correct to set ccp/ccr to A::B when we're
late parsing the noexcept-specifiers of bar* functions in B, so that
this-> does the right thing. Since inject_parm_decls doesn't expect
to see non-null ccp/ccr, reset it before calling inject_parm_decls.
gcc/cp/ChangeLog:
PR c++/96623
* parser.c (inject_parm_decls): Remove a redundant assignment.
(cp_parser_class_specifier_1): Clear current_class_{ptr,ref}
before calling inject_parm_decls.
gcc/testsuite/ChangeLog:
PR c++/96623
* g++.dg/cpp0x/noexcept64.C: New test.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/96623] [11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893
2020-08-15 2:38 [Bug c++/96623] New: [10/11 Regression] ICE in inject_parm_decls, at cp/parser.c:23893 haoxintu at gmail dot com
` (5 preceding siblings ...)
2021-01-22 22:55 ` cvs-commit at gcc dot gnu.org
@ 2021-01-22 22:55 ` mpolacek at gcc dot gnu.org
6 siblings, 0 replies; 8+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-22 22:55 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96623
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Fixed.
^ permalink raw reply [flat|nested] 8+ messages in thread