https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115869
Bug ID: 115869 Summary: Wrong constant evaluation with vector of struct Product: gcc Version: 14.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gcc at fabiangundlach dot org Target Milestone: --- Created attachment 58633 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58633&action=edit preprocessor output The following code prints a wrong answer (6) when compiled with -O3. It prints the correct answer (5) when compiled with -O2 or with -O3 -fno-strict-aliasing. I don't see how I could be violating aliasing rules here. (Apologies if I'm overlooking something obvious!) #include <cstdio> #include <vector> struct st { int v; st() : v(0) {} }; int main() { std::vector<st> res(3); res[0].v = 1; for (int d = 1; d < 3; d++) for (int i = 0; i < 2; i++) for (int k = 0; k+d < 3; k++) res[k+d].v += res[k].v; printf("%d\n", res[2].v); return 0; }