https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91892
Bug ID: 91892 Summary: [5.x,6.x ARM] Having a global pair<double, double> causes code gen bug for init list of pair<double, double> Product: gcc Version: 6.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dascandy at gmail dot com Target Milestone: --- https://godbolt.org/z/Q3BQRS Code that sees the global first generates 16-byte aligned register allocation for loading an initializer_list. Code that does not see the global first generates 8-byte aligned register allocation for the same initializer_list. Net result is that the pair is stored in r1/r2 (left tab) and loaded from r2/r3 (right tab). Confirmed working normally on 7.x+. Generates an ABI warning on 6.x, but also generates broken code. The warning might be this problem, but in that case I'd expect the other half to compile at least in the same way.