On 03/12/2020 11:47, Andrea Corallo via Gcc-help wrote: > Hi all, > > I've a piece of code that reduced looks like this: > > #+begin_src C > typedef struct { > void (*fun_ptr)(void); > } x_t; > > x_t *x; > > void > f (void) > { > const x_t const *y = x; > for (int i = 0; i < 1000; ++i) > y->fun_ptr (); > } > #+end_src > > What is the correct way (if any) to express to the compiler that the > value of y->fun_ptr does not get clobbered by the function call itself > so the corresponding load to obtain its value can be moved out of the > loop? > > My understanding is that the const qualifier is more for diagnostic > reasons and is not sufficient for GCC to make this assumption. OTOH I > cannot give 'fun_ptr' the attribute pure as it's not. > > Thanks > > Andrea > Why not just put the function pointer in a local variable? Then the compiler will know that the value can't change. R.