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