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

            Bug ID: 91751
           Summary: In backtrace, calls to c++ destructors are shown way
                    afar from the actual place
           Product: gcc
           Version: 9.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Hi-Angel at yandex dot ru
  Target Milestone: ---

As the title says. I'm not aware of a way to get backtrace with gcc builtins,
so I'm using gdb in testcase, so it's possible that it's a bug in gdb. But to
me a wrong debugging information sounded more likely, so I'm reporting here.

# Steps to reproduce

    $ cat test.cpp
    #include <cstdio>

    struct MyStruct {
        void use_the_object() { puts("MyStruct is still in use"); }
        ~MyStruct() {
            puts("MyStruct destructor called");
        }
    };

    int main() {
        MyStruct m;
        printf("line %i crossed\n", __LINE__);
        m.use_the_object();
    }
    $ g++ test.cpp -o a -g3 -O0
    $ ./a
    line 12 crossed
    MyStruct is still in use
    MyStruct destructor called
    $ gdb ./a
    Reading symbols from ./a...
    gdb λ br MyStruct::~MyStruct()
    Breakpoint 1 at 0x1214: file test.cpp, line 6.
    gdb λ r
    Starting program: /tmp/a
    line 12 crossed
    MyStruct is still in use

    Breakpoint 1, MyStruct::~MyStruct (this=0x7fffffffde27,
__in_chrg=<optimized out>) at test.cpp:6
    6               puts("MyStruct destructor called");
    gdb λ bt
    #0  MyStruct::~MyStruct (this=0x7fffffffde27, __in_chrg=<optimized out>) at
test.cpp:6
    #1  0x00005555555551af in main () at test.cpp:11


## Expected

The last line in backtrace has either line test.cpp:13 or 14, because the
destructor could not possibly get called before the last use of the object.

## Actual

Backtrace says it's called at line 11, before the last use of the object.

Reply via email to