On Wed, Feb 19, 2020 at 11:54 AM Jason Gunthorpe <jgg@xxxxxxxx> wrote: > > On Wed, Feb 19, 2020 at 11:11:19AM -0800, Nick Desaulniers wrote: > > > Godbolt says clang is happy if it is written as: > > > > > > if (&__stop___trace_bprintk_fmt[0] != &__start___trace_bprintk_fmt[0]) > > > > > > Which is probably the best compromise. The type here is const char > > > *[], so it would be a shame to see it go. > > > > If the "address" is never dereferenced, but only used for arithmetic > > (in a way that the the pointed to type is irrelevant), does the > > pointed to type matter? > > The type is used here: > > if (*pos < start_index) > return __start___trace_bprintk_fmt + *pos; > > The return expression should be a const char ** > > Presumably the caller of find_next derferences it. > > Jason And the callers of find_next just return the return value from find_next, but suddenly as `void*` (find_next()'s return type is `char**`). So it doesn't seem like the pointed to type matters, hence the recommendation of `void` and then address-of (&) used in comparison+arithmetic. -- Thanks, ~Nick Desaulniers