https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119153
Bug ID: 119153 Summary: [14 Regression] Static storage for initializer_list no longer shares with array literals Product: gcc Version: 14.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lichray at gmail dot com Target Milestone: --- Consider void f(std::initializer_list<int> il); template <std::size_t N> void g(int const (&il)[N]); void t() { f({3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}); g({3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}); } In GCC 14, after implementing P2752, two redundant copies of rodata are emitted, one for copying to the stack to call g, and one passed to f. https://godbolt.org/z/1WGjb6dvq