https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117508
Bug ID: 117508 Summary: [12/13/14/15 Regression] Weird debug location info for C++ std::initializer_list Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: redi at gcc dot gnu.org Target Milestone: --- #include <string> struct X { X(std::initializer_list<std::string>) { } }; void test01() { X x { "E", "E", "T", "T" }; return; } int main() { test01(); return 0; } With GCC 11 debugging this works as expected, but since GCC 12.1 stepping into test01 jumps around while constructing the initializer_list: $ gdb -q -ex start -ex step -ex n -ex n -ex n -ex cont -ex q ./a.out Reading symbols from ./a.out... Temporary breakpoint 1 at 0x4023b2: file 83709.cc, line 13. 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 83709.cc:13 13 test01(); test01 () at 83709.cc:10 10 } 8 X x { "E", "E", "T", "T" }; 10 } 9 return; Continuing. [Inferior 1 (process 830655) exited normally] We start on line 13 but after stepping into test01 we're on line 10 (the closing brace of test01), then "next" takes us to line 8 where the initializer_list is used, then "next" takes us back to line 10, then to line 9. With GCC 11 it's great: Temporary breakpoint 1, main () at 83709.cc:13 13 test01(); test01 () at 83709.cc:8 8 X x { "E", "E", "T", "T" }; 9 return; 10 } main () at 83709.cc:14 14 return 0; Continuing. [Inferior 1 (process 830849) exited normally]