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

            Bug ID: 107504
           Summary: Debugger jumps back to structured binding declaration
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

struct S
{
  void* i;
  int j;
};

S f(char* p)
{
  return {p, 1};
}

int main()
{
  char buf[1];
  auto [x, y] = f(buf);
  if (x != buf)
    throw 1;
  if (y != 1)
    throw 2;
  return 0;
}

Compiled with -g the debugger shows control jumping backwards to the structured
binding declaration:

$ gdb --quiet -ex start -ex n -ex n -ex n -ex n a.out
Reading symbols from a.out...
Temporary breakpoint 1 at 0x40115f: file sb.C, line 15.
Starting program: /tmp/a.out 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Temporary breakpoint 1, main () at sb.C:15
15        auto [x, y] = f(buf);
16        if (x != buf)
15        auto [x, y] = f(buf);
18        if (y != 1)
20        return 0;


For a slightly larger piece of code I see it jump back to it three times:

$ gdb --quiet -ex start -ex step  -ex n -ex n -ex n -ex n -ex n -ex n -ex n
a.out
Reading symbols from a.out...
Temporary breakpoint 1 at 0x405aa3: file fton.C, line 43.
Starting program: /tmp/a.out 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Temporary breakpoint 1, main () at fton.C:43
43        test();
test () at fton.C:14
14        char buf[4] = { };
15        auto [out, len] = std::format_to_n(buf, 3, "123 + 456 = {}", 579);
16        VERIFY( out == buf+3 );
15        auto [out, len] = std::format_to_n(buf, 3, "123 + 456 = {}", 579);
16        VERIFY( out == buf+3 );
15        auto [out, len] = std::format_to_n(buf, 3, "123 + 456 = {}", 579);
17        VERIFY( len == 15 );
19        std::locale loc({}, new punct);

Notice line 15 occurs three times. I haven't been able to reproduce that in the
minimized test case.

Reply via email to