restrict
only applies to the annotated pointer itself (or pointers generated from it, such as by pointer arithmetic), not any of the values retrieved through that pointer.
I'm not sure what 'levels of strict aliasing' is supposed to mean, but restrict
is a more powerful promise than that of strict aliasing. Strict aliasing allows pointers of compatible type to alias: restrict
is a promise that there is no aliasing at all.