https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118167
Bug ID: 118167 Summary: Loop invariant is not deduced in C++-iterator-style loop over pointers Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: sjames at gcc dot gnu.org Target Milestone: --- This is from https://github.com/llvm/llvm-project/issues/101372. ``` struct SpanAsPointers { int *begin, *end; }; int sum_span_as_pointers(SpanAsPointers s) { int *begin = s.begin; int *end = s.end; [[assume (begin <= end)]]; int sum = 0; int *iter = begin; while (iter != end) { assert(iter < end); /* should be optimised out */ sum += *iter; iter++; } return sum; } ``` godbolt link with more explanation: https://godbolt.org/z/fjevMcYKf