* [Bug c++/109761] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
@ 2023-05-06 23:41 ` pinskia at gcc dot gnu.org
2023-05-06 23:44 ` andysem at mail dot ru
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-06 23:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I think this is correct beahvior because outer is not complete until the outer
is closed.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
2023-05-06 23:41 ` [Bug c++/109761] " pinskia at gcc dot gnu.org
@ 2023-05-06 23:44 ` andysem at mail dot ru
2023-05-06 23:54 ` pinskia at gcc dot gnu.org
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: andysem at mail dot ru @ 2023-05-06 23:44 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #2 from andysem at mail dot ru ---
I don't see how completeness of outer is related to nested's destructor. Or put
it another way, how nested's destructor noexcept specification has anything to
do with outer, whether it is completed or not.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
2023-05-06 23:41 ` [Bug c++/109761] " pinskia at gcc dot gnu.org
2023-05-06 23:44 ` andysem at mail dot ru
@ 2023-05-06 23:54 ` pinskia at gcc dot gnu.org
2023-05-06 23:58 ` pinskia at gcc dot gnu.org
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-06 23:54 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
GCC 9 produced:
<source>:20:55: error: 'class outer' has no member named 'on_nested_ctor'
20 | explicit nested(outer& o)
noexcept(noexcept(o.on_nested_ctor())) :
| ^~~~~~~~~~~~~~
<source>:29:45: error: 'class outer' has no member named 'on_nested_dtor'
29 | ~nested() noexcept(noexcept(m_outer.on_nested_dtor()))
| ^~~~~~~~~~~~~~
GCC 8 produced:
<source>:20:53: error: invalid use of incomplete type 'class outer'
explicit nested(outer& o) noexcept(noexcept(o.on_nested_ctor())) :
^
<source>:9:7: note: forward declaration of 'class outer'
class outer :
^~~~~
<source>:29:37: error: invalid use of incomplete type 'class outer'
~nested() noexcept(noexcept(m_outer.on_nested_dtor()))
^~~~~~~
<source>:9:7: note: forward declaration of 'class outer'
class outer :
^~~~~
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (2 preceding siblings ...)
2023-05-06 23:54 ` pinskia at gcc dot gnu.org
@ 2023-05-06 23:58 ` pinskia at gcc dot gnu.org
2023-05-09 13:30 ` ppalka at gcc dot gnu.org
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-05-06 23:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
Known to fail| |10.1.0
Keywords| |rejects-valid
Last reconfirmed| |2023-05-06
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Looks like I am wrong but the fix for delaying noexec is doing a search of the
wrong dtor it looks like.
Anyways confirmed.
Also it has always been broken so not a regression.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (3 preceding siblings ...)
2023-05-06 23:58 ` pinskia at gcc dot gnu.org
@ 2023-05-09 13:30 ` ppalka at gcc dot gnu.org
2023-05-09 13:46 ` [Bug c++/109761] [10/11/12/13/14 Regression] " ppalka at gcc dot gnu.org
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: ppalka at gcc dot gnu.org @ 2023-05-09 13:30 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |ppalka at gcc dot gnu.org
Status|NEW |ASSIGNED
CC| |ppalka at gcc dot gnu.org
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [10/11/12/13/14 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (4 preceding siblings ...)
2023-05-09 13:30 ` ppalka at gcc dot gnu.org
@ 2023-05-09 13:46 ` ppalka at gcc dot gnu.org
2023-05-09 19:08 ` cvs-commit at gcc dot gnu.org
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: ppalka at gcc dot gnu.org @ 2023-05-09 13:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Nested class destructor's |[10/11/12/13/14 Regression]
|noexcept specification |Nested class destructor's
|incorrectly considered as |noexcept specification
|too loose compared to the |incorrectly considered as
|outer class |too loose compared to the
| |outer class
Target Milestone|--- |10.5
--- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Here's another reduced version that demonstrates a regression since
r10-1280-g78f7607db4c53f:
struct base {
virtual ~base() {}
};
struct outer : base {
static void f();
struct nested {
~nested() noexcept(noexcept(f())); // { dg-bogus "looser" }
};
};
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [10/11/12/13/14 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (5 preceding siblings ...)
2023-05-09 13:46 ` [Bug c++/109761] [10/11/12/13/14 Regression] " ppalka at gcc dot gnu.org
@ 2023-05-09 19:08 ` cvs-commit at gcc dot gnu.org
2023-05-09 19:10 ` [Bug c++/109761] [10/11/12/13 " ppalka at gcc dot gnu.org
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-05-09 19:08 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:
https://gcc.gnu.org/g:c13906f258fb34b3e0c90ddc8d9191dd72f3da0e
commit r14-639-gc13906f258fb34b3e0c90ddc8d9191dd72f3da0e
Author: Patrick Palka <ppalka@redhat.com>
Date: Tue May 9 15:06:34 2023 -0400
c++: noexcept-spec from nested class confusion [PR109761]
When late processing a noexcept-spec from a nested class after completion
of the outer class (since it's a complete-class context), we pass the wrong
class context to noexcept_override_late_checks -- the outer class type
instead of the nested class type -- which leads to bogus errors in the
below test.
This patch fixes this by making noexcept_override_late_checks obtain the
class context directly via DECL_CONTEXT instead of via an additional
parameter.
PR c++/109761
gcc/cp/ChangeLog:
* parser.cc (cp_parser_class_specifier): Don't pass a class
context to noexcept_override_late_checks.
(noexcept_override_late_checks): Remove 'type' parameter
and use DECL_CONTEXT of 'fndecl' instead.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/noexcept78.C: New test.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [10/11/12/13 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (6 preceding siblings ...)
2023-05-09 19:08 ` cvs-commit at gcc dot gnu.org
@ 2023-05-09 19:10 ` ppalka at gcc dot gnu.org
2023-05-12 15:07 ` cvs-commit at gcc dot gnu.org
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: ppalka at gcc dot gnu.org @ 2023-05-09 19:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[10/11/12/13/14 Regression] |[10/11/12/13 Regression]
|Nested class destructor's |Nested class destructor's
|noexcept specification |noexcept specification
|incorrectly considered as |incorrectly considered as
|too loose compared to the |too loose compared to the
|outer class |outer class
--- Comment #7 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed on trunk so far.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [10/11/12/13 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (7 preceding siblings ...)
2023-05-09 19:10 ` [Bug c++/109761] [10/11/12/13 " ppalka at gcc dot gnu.org
@ 2023-05-12 15:07 ` cvs-commit at gcc dot gnu.org
2023-07-07 10:45 ` [Bug c++/109761] [11/12/13 " rguenth at gcc dot gnu.org
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-05-12 15:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by Patrick Palka
<ppalka@gcc.gnu.org>:
https://gcc.gnu.org/g:dc399dfe1265a1222b7cfa0fc35533768a8a1a8a
commit r13-7323-gdc399dfe1265a1222b7cfa0fc35533768a8a1a8a
Author: Patrick Palka <ppalka@redhat.com>
Date: Tue May 9 15:06:34 2023 -0400
c++: noexcept-spec from nested class confusion [PR109761]
When late processing a noexcept-spec from a nested class after completion
of the outer class (since it's a complete-class context), we pass the wrong
class context to noexcept_override_late_checks -- the outer class type
instead of the nested class type -- which leads to bogus errors in the
below test.
This patch fixes this by making noexcept_override_late_checks obtain the
class context directly via DECL_CONTEXT instead of via an additional
parameter.
PR c++/109761
gcc/cp/ChangeLog:
* parser.cc (cp_parser_class_specifier): Don't pass a class
context to noexcept_override_late_checks.
(noexcept_override_late_checks): Remove 'type' parameter
and use DECL_CONTEXT of 'fndecl' instead.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/noexcept78.C: New test.
(cherry picked from commit c13906f258fb34b3e0c90ddc8d9191dd72f3da0e)
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [11/12/13 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (8 preceding siblings ...)
2023-05-12 15:07 ` cvs-commit at gcc dot gnu.org
@ 2023-07-07 10:45 ` rguenth at gcc dot gnu.org
2023-08-07 23:35 ` [Bug c++/109761] [11/12 " cvs-commit at gcc dot gnu.org
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: rguenth at gcc dot gnu.org @ 2023-07-07 10:45 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|10.5 |11.5
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 10 branch is being closed.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [11/12 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (9 preceding siblings ...)
2023-07-07 10:45 ` [Bug c++/109761] [11/12/13 " rguenth at gcc dot gnu.org
@ 2023-08-07 23:35 ` cvs-commit at gcc dot gnu.org
2023-08-09 17:14 ` cvs-commit at gcc dot gnu.org
2023-08-09 17:16 ` ppalka at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-08-07 23:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Patrick Palka
<ppalka@gcc.gnu.org>:
https://gcc.gnu.org/g:ddf411e67cc15a80d635b512b812107985b361d4
commit r12-9804-gddf411e67cc15a80d635b512b812107985b361d4
Author: Patrick Palka <ppalka@redhat.com>
Date: Tue May 9 15:06:34 2023 -0400
c++: noexcept-spec from nested class confusion [PR109761]
When late processing a noexcept-spec from a nested class after completion
of the outer class (since it's a complete-class context), we pass the wrong
class context to noexcept_override_late_checks -- the outer class type
instead of the nested class type -- which leads to bogus errors in the
below test.
This patch fixes this by making noexcept_override_late_checks obtain the
class context directly via DECL_CONTEXT instead of via an additional
parameter.
PR c++/109761
gcc/cp/ChangeLog:
* parser.cc (cp_parser_class_specifier): Don't pass a class
context to noexcept_override_late_checks.
(noexcept_override_late_checks): Remove 'type' parameter
and use DECL_CONTEXT of 'fndecl' instead.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/noexcept78.C: New test.
(cherry picked from commit c13906f258fb34b3e0c90ddc8d9191dd72f3da0e)
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [11/12 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (10 preceding siblings ...)
2023-08-07 23:35 ` [Bug c++/109761] [11/12 " cvs-commit at gcc dot gnu.org
@ 2023-08-09 17:14 ` cvs-commit at gcc dot gnu.org
2023-08-09 17:16 ` ppalka at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-08-09 17:14 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
--- Comment #11 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-11 branch has been updated by Patrick Palka
<ppalka@gcc.gnu.org>:
https://gcc.gnu.org/g:60a8421ee457d94880e4dcbb93a663c633f2e96e
commit r11-10944-g60a8421ee457d94880e4dcbb93a663c633f2e96e
Author: Patrick Palka <ppalka@redhat.com>
Date: Tue May 9 15:06:34 2023 -0400
c++: noexcept-spec from nested class confusion [PR109761]
When late processing a noexcept-spec from a nested class after completion
of the outer class (since it's a complete-class context), we pass the wrong
class context to noexcept_override_late_checks -- the outer class type
instead of the nested class type -- which leads to bogus errors in the
below test.
This patch fixes this by making noexcept_override_late_checks obtain the
class context directly via DECL_CONTEXT instead of via an additional
parameter.
PR c++/109761
gcc/cp/ChangeLog:
* parser.c (cp_parser_class_specifier): Don't pass a class
context to noexcept_override_late_checks.
(noexcept_override_late_checks): Remove 'type' parameter
and use DECL_CONTEXT of 'fndecl' instead.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/noexcept78.C: New test.
(cherry picked from commit c13906f258fb34b3e0c90ddc8d9191dd72f3da0e)
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/109761] [11/12 Regression] Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
2023-05-06 23:37 [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class andysem at mail dot ru
` (11 preceding siblings ...)
2023-08-09 17:14 ` cvs-commit at gcc dot gnu.org
@ 2023-08-09 17:16 ` ppalka at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: ppalka at gcc dot gnu.org @ 2023-08-09 17:16 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|ASSIGNED |RESOLVED
--- Comment #12 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed for GCC 11.5 / 12.4 / 13.2, thanks for the bug report.
^ permalink raw reply [flat|nested] 14+ messages in thread