public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/113767] New: Missing Destructor Call with goto and return value
@ 2024-02-05 13:19 joerg.richter@pdv-fs.de
  2024-02-05 15:46 ` [Bug c++/113767] [11/12/13 Regression] " ppalka at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: joerg.richter@pdv-fs.de @ 2024-02-05 13:19 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 113767
           Summary: Missing Destructor Call with goto and return value
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: joerg.richter@pdv-fs.de
  Target Milestone: ---

#include <cstdio>

struct S
{

    S()
    {
      printf( "Cons\n" );
    }

    ~S()
    {
      printf( "Dest\n" );
    }
};

S func()
{
  bool first = true;

restart:
  S ss;
  if( first )
  {
    first = false;
    goto restart;
  }
  return ss;
}

int main()
{
    func();
}

Output:
Cons
Cons
Dest

Expected Output:
Cons
Dest
Cons
Dest


https://godbolt.org/z/9n6nnv18P

Seems to be fixed in trunk but not on any released branch. Can the fix be
integrated to the released branches?

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

* [Bug c++/113767] [11/12/13 Regression] Missing Destructor Call with goto and return value
  2024-02-05 13:19 [Bug c++/113767] New: Missing Destructor Call with goto and return value joerg.richter@pdv-fs.de
@ 2024-02-05 15:46 ` ppalka at gcc dot gnu.org
  2024-02-05 16:37 ` jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: ppalka at gcc dot gnu.org @ 2024-02-05 15:46 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|needs-bisection             |
   Target Milestone|---                         |13.3
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |ppalka at gcc dot gnu.org
           See Also|                            |https://gcc.gnu.org/bugzill
                   |                            |a/show_bug.cgi?id=92407
            Summary|Missing Destructor Call     |[11/12/13 Regression]
                   |with goto and return value  |Missing Destructor Call
                   |                            |with goto and return value

--- Comment #1 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed on trunk after r14-1593-g7e0b65b239c3a0, where we get the expected output

Cons
Dest
Cons
Dest

and indeed this seems closely related or even a dup of PR92407 the fix for
which has been backported for 11.5/12.4/13.3/14.

However, using the latest 13/12/11 release branches containing the backported
fix I see we now output

Cons
Dest
Cons
Dest
Dest

instead of

Cons
Cons
Dest

which still seems wrong?  (Not sure if generating different wrong code is
considered a regression..)

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

* [Bug c++/113767] [11/12/13 Regression] Missing Destructor Call with goto and return value
  2024-02-05 13:19 [Bug c++/113767] New: Missing Destructor Call with goto and return value joerg.richter@pdv-fs.de
  2024-02-05 15:46 ` [Bug c++/113767] [11/12/13 Regression] " ppalka at gcc dot gnu.org
@ 2024-02-05 16:37 ` jason at gcc dot gnu.org
  2024-02-05 16:38 ` jason at gcc dot gnu.org
  2024-02-05 18:20 ` jason at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jason at gcc dot gnu.org @ 2024-02-05 16:37 UTC (permalink / raw)
  To: gcc-bugs

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

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |jason at gcc dot gnu.org
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-02-05
             Status|UNCONFIRMED                 |ASSIGNED

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

* [Bug c++/113767] [11/12/13 Regression] Missing Destructor Call with goto and return value
  2024-02-05 13:19 [Bug c++/113767] New: Missing Destructor Call with goto and return value joerg.richter@pdv-fs.de
  2024-02-05 15:46 ` [Bug c++/113767] [11/12/13 Regression] " ppalka at gcc dot gnu.org
  2024-02-05 16:37 ` jason at gcc dot gnu.org
@ 2024-02-05 16:38 ` jason at gcc dot gnu.org
  2024-02-05 18:20 ` jason at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jason at gcc dot gnu.org @ 2024-02-05 16:38 UTC (permalink / raw)
  To: gcc-bugs

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

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1

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

* [Bug c++/113767] [11/12/13 Regression] Missing Destructor Call with goto and return value
  2024-02-05 13:19 [Bug c++/113767] New: Missing Destructor Call with goto and return value joerg.richter@pdv-fs.de
                   ` (2 preceding siblings ...)
  2024-02-05 16:38 ` jason at gcc dot gnu.org
@ 2024-02-05 18:20 ` jason at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: jason at gcc dot gnu.org @ 2024-02-05 18:20 UTC (permalink / raw)
  To: gcc-bugs

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

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |DUPLICATE
             Status|ASSIGNED                    |RESOLVED

--- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> ---
The fix on the branches is just to disable NRV in the presence of backward
goto, as the fix on the trunk was too involved to backport.

So this testcase no longer puts ss in the return slot in 11/12/13, but instead
returns a copy; the extra destructor call is for the copy.  It looks mismatched
because there's no user-defined copy constructor to add another "Cons" line;
adding that makes it look better.

*** This bug has been marked as a duplicate of bug 92407 ***

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

end of thread, other threads:[~2024-02-05 18:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-05 13:19 [Bug c++/113767] New: Missing Destructor Call with goto and return value joerg.richter@pdv-fs.de
2024-02-05 15:46 ` [Bug c++/113767] [11/12/13 Regression] " ppalka at gcc dot gnu.org
2024-02-05 16:37 ` jason at gcc dot gnu.org
2024-02-05 16:38 ` jason at gcc dot gnu.org
2024-02-05 18:20 ` jason 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).