https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80084
Bug ID: 80084 Summary: [7 regression] wrong code for decomposition declaration with debug iterator Product: gcc Version: 7.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lucdanton at free dot fr Target Milestone: --- I managed to reduce to this testcase: //---------------------------------------- #include <cassert> #include <vector> struct aggr { std::vector<int>::iterator val; }; void decomp(aggr arg) { auto& [val] = arg; // fires assert( &val == &arg.val ); } int main() { // inlined decomp { aggr arg {}; auto& [val] = arg; // fine assert( &val == &arg.val ); } decomp(aggr {}); } //---------------------------------- The assertion in decomp fires when the program is compiled with e.g.: g++-trunk -std=c++1z main.cpp -D_GLIBCXX_DEBUG According to my bisecting, this change was introduced by r245638.