public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/109761] New: Nested class destructor's noexcept specification incorrectly considered as too loose compared to the outer class
@ 2023-05-06 23:37 andysem at mail dot ru
  2023-05-06 23:41 ` [Bug c++/109761] " pinskia at gcc dot gnu.org
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: andysem at mail dot ru @ 2023-05-06 23:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109761

            Bug ID: 109761
           Summary: Nested class destructor's noexcept specification
                    incorrectly considered as too loose compared to the
                    outer class
           Product: gcc
           Version: 11.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: andysem at mail dot ru
  Target Milestone: ---

Consider the following piece of code:

template< typename T >
T declval() noexcept;

struct base
{
    virtual ~base() {}
};

class outer :
    public base
{
protected:
    class nested
    {
    private:
        outer& m_outer;

    public:
        explicit nested(outer& o) noexcept(noexcept(o.on_nested_ctor())) :
            m_outer(o)
        {
            o.on_nested_ctor();
        }

        nested(nested const&) = delete;
        nested& operator= (nested const&) = delete;

        ~nested() noexcept(noexcept(declval<outer&>().on_nested_dtor()))
        {
            m_outer.on_nested_dtor();
        }
    };

public:
    ~outer() {}

protected:
    void on_nested_ctor();
    void on_nested_dtor();
};

This wrongly fails to compile:

$ g++ -std=gnu++17 -o nested_noexcept_dtor.o -c nested_noexcept_dtor.cpp 
nested_noexcept_dtor.cpp:28:9: error: looser exception specification on
overriding virtual function ‘outer::nested::~nested() noexcept (false)’
   28 |         ~nested()
noexcept(noexcept(declval<outer&>().on_nested_dtor()))
      |         ^
nested_noexcept_dtor.cpp:6:13: note: overridden function is ‘virtual
base::~base() noexcept’
    6 |     virtual ~base() {}
      |             ^

The compiler tries to match the ~nested() noexcept specification against the
~base()'s as if nested was derived from base, but it is not. ~nested() noexcept
specification has no bearing on the outer class hierarchy.

$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
11.3.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-11
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib
--enable-libphobos-checking=release --with-target-system-zlib=auto
--enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet
--with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32
--enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-11-xKiWfi/gcc-11-11.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-xKiWfi/gcc-11-11.3.0/debian/tmp-gcn/usr
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
--with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)

^ 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 ` 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

end of thread, other threads:[~2023-08-09 17:16 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
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
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
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).