public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/106812] New: Throwing a non-copyable exception
@ 2022-09-02  7:14 jens.maurer at gmx dot net
  2022-09-02  7:21 ` [Bug c++/106812] " jens.maurer at gmx dot net
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: jens.maurer at gmx dot net @ 2022-09-02  7:14 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 106812
           Summary: Throwing a non-copyable exception
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jens.maurer at gmx dot net
  Target Milestone: ---

gcc accepts the following program:

struct S
{
  S() = default;
  S(const S&) = delete;
  // int x = 0;  // #3
};

int main()
{
  try {
    throw S();         // #1
  } catch (S s) {      // #2
    return 1;
  }
}

but it is ill-formed at #1 according to [except.throw] p5.

Curiously, if line #3 is added, gcc flags an error at #2 (but not at #1).

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106812] Throwing a non-copyable exception
  2022-09-02  7:14 [Bug c++/106812] New: Throwing a non-copyable exception jens.maurer at gmx dot net
@ 2022-09-02  7:21 ` jens.maurer at gmx dot net
  2022-09-19 18:53 ` mpolacek at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: jens.maurer at gmx dot net @ 2022-09-02  7:21 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Jens Maurer <jens.maurer at gmx dot net> ---
Cross-reference: clang bug https://github.com/llvm/llvm-project/issues/57519

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106812] Throwing a non-copyable exception
  2022-09-02  7:14 [Bug c++/106812] New: Throwing a non-copyable exception jens.maurer at gmx dot net
  2022-09-02  7:21 ` [Bug c++/106812] " jens.maurer at gmx dot net
@ 2022-09-19 18:53 ` mpolacek at gcc dot gnu.org
  2022-09-19 19:01 ` mpolacek at gcc dot gnu.org
  2022-10-14 18:18 ` chgros at coverity dot com
  3 siblings, 0 replies; 5+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-09-19 18:53 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
                 CC|                            |mpolacek at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2022-09-19

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Confirmed.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106812] Throwing a non-copyable exception
  2022-09-02  7:14 [Bug c++/106812] New: Throwing a non-copyable exception jens.maurer at gmx dot net
  2022-09-02  7:21 ` [Bug c++/106812] " jens.maurer at gmx dot net
  2022-09-19 18:53 ` mpolacek at gcc dot gnu.org
@ 2022-09-19 19:01 ` mpolacek at gcc dot gnu.org
  2022-10-14 18:18 ` chgros at coverity dot com
  3 siblings, 0 replies; 5+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-09-19 19:01 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
The difference between #3 and not-#3 is that without the NSDMI, S isn't
TYPE_NEEDS_CONSTRUCTING, which makes a difference in initialize_handler_parm:

 339   /* If the constructor for the catch parm exits via an exception, we
 340      must call terminate.  See eh23.C.  */
 341   if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
 342     {
 343       /* Generate the copy constructor call directly so we can wrap it.
 344          See also expand_default_init.  */
 345       init = ocp_convert (TREE_TYPE (decl), init,
 346                           CONV_IMPLICIT|CONV_FORCE_TEMP, 0,
 347                           tf_warning_or_error);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c++/106812] Throwing a non-copyable exception
  2022-09-02  7:14 [Bug c++/106812] New: Throwing a non-copyable exception jens.maurer at gmx dot net
                   ` (2 preceding siblings ...)
  2022-09-19 19:01 ` mpolacek at gcc dot gnu.org
@ 2022-10-14 18:18 ` chgros at coverity dot com
  3 siblings, 0 replies; 5+ messages in thread
From: chgros at coverity dot com @ 2022-10-14 18:18 UTC (permalink / raw)
  To: gcc-bugs

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

Charles-Henri Gros <chgros at coverity dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |chgros at coverity dot com

--- Comment #4 from Charles-Henri Gros <chgros at coverity dot com> ---
It's worse than this, "throw" will even move a non-movable value in the absence
of a copy constructor:

#include <iostream>
#include <memory>

using namespace std;

int main(int argc, char const * const *argv)
{
    unique_ptr<int> u(new int);
    cout << "u.get() first: " << (void*)u.get() << endl;
    try {
        throw u;
    } catch(...) {
    }
    cout << "u.get() after throw: " << (void*)u.get() << endl;
}

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-10-14 18:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-02  7:14 [Bug c++/106812] New: Throwing a non-copyable exception jens.maurer at gmx dot net
2022-09-02  7:21 ` [Bug c++/106812] " jens.maurer at gmx dot net
2022-09-19 18:53 ` mpolacek at gcc dot gnu.org
2022-09-19 19:01 ` mpolacek at gcc dot gnu.org
2022-10-14 18:18 ` chgros at coverity dot com

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).