https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118970

            Bug ID: 118970
           Summary: Const local array not considered to be const unless
                    `static` is added
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: agriff at tin dot it
  Target Milestone: ---

in the following code example

```
int foo(int x) {
    static int tt[] = {
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
    };
    return tt[x & 15];
}
```

the code generated is ok (the array ends up being statically initialized and
just looked up in the function); so the optimizer sees that no one can legally
access and change its content.

In the other hand if `static` is removed this doesn't happen (the data is
copied and the copy is looked up).

Adding `const` or (even `constexpr` in C++) doesn't help.

This happens at -O1 -O2 -O3 and -Os (exactly how is copied changes, but still
looks like a copy is made and then the copy is looked up immediately).

Reply via email to