NagyDonat wrote: > With the current version I have the following observations: > > * There is a warning for `(&x + 1) - &x` and `(&x - 1) - &x`. Should this > be fixed?
The expression `(&x + 1) - &x` is valid and should not produce a warning. It could appear e.g. in code that's structured like ``` void log_observations(double *begin, double *end, /*...*/) { log_observation_count(end - begin); // also log the actual observations } void do_observations(/*...*/) { double array[1024], *p = array; //... while (can_observe()) { *p++ = /* ... */ } log_observations(array, p); } void do_single_observation(/*...*/) { if (!can_observe()) return; double result = /* ... */ // ... log_observations(&result, &result + 1); } ``` On the other hand `(&x - 1) - &x` is not standard-compliant, because the standard guarantees an "after-the-end" pointer (which is valid in calculations but must not be dereferenced) but it doesn't accept a "before-the-begin" pointer. > * The code `(int *)((char *)(&a[4]) + sizeof(int)) - &a[4]` produces no > warning but `(int *)((char *)(&a[4]) + 1) - &a[4]` produces warning. That's very nice, even a slightly less accurate solution would be acceptable. > For 2-dimensional arrays there is warning for all of these cases (lines 44-47 > in the test file). Is this possible to fix (to get warning in all cases), or > no warning is needed here? I'd say that the current behavior (warning on all of 44-47) is OK here -- this is very unusual trickery and deserves a highlight. However I could also accept a situation where there was no warning for these complex multidimensional cases. https://github.com/llvm/llvm-project/pull/93676 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits