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

            Bug ID: 103896
           Summary: Label as value: object destructor is not called
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

When executing this program:
```
#include <iostream>
struct NonTrivial {
    NonTrivial() { std::cout << "ctor "; }
    ~NonTrivial() { std::cout << "dtor "; }
};

int main() {
  int i = 0;
  start:
  NonTrivial object;
  goto *((i++ == 0) ? &&start : &&end);
  end:;
}
```
GCC prints: `ctor ctor dtor` meaning that the object was constructed twice but
destructed only once, which looks as a bug. Demo:
https://gcc.godbolt.org/z/aWdYx8ox4

Related discussion: https://stackoverflow.com/q/60812880/7325599

Reply via email to