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

            Bug ID: 92407
           Summary: Destruction of objects returned from functions skipped
                    by goto
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Dave.Poston at gs dot com
  Target Milestone: ---

The code below only outputs 'Destructed' once:

Godbolt link: https://godbolt.org/z/Foy-vc

Bug appears to be present in all versions of GCC available in godbolt.

-----------------------
#include<iostream>

struct MyStruct
{
    MyStruct() {
        std::cout << "Constructed" << std::endl;
    }
    ~MyStruct() {
        std::cout << "Destructed" << std::endl;
    }
    int a;
};

MyStruct fill() {
    MyStruct bla;
    bla.a = 100;
    return bla;
}
MyStruct problem() {
    int cnt = 100;
start:
    MyStruct a = fill();
    if( cnt-- )
        goto start;
    return a;
}

int main( int argc, char** argv )
{
    problem();
    return 0;
}
-----------------------
output is:
Constructed

Constructed

Constructed

Constructed

Constructed

Constructed

Constructed

Constructed
...

Reply via email to