On Mon, Nov 17, 2014 at 1:58 AM, Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> wrote: > I can confirm that this patch removes the incorrect warning during the > kernel build that triggered all of this. > However, I think your testcase is not quite correct: in particular, > this assignment > > static void*(*f1_err)(void) = pure1; I see. Thanks for the review. So the above case should not raise error. However, the following one should: static __pure void *(*f3_err) = non_pure_func; I got it the other way around. I will add that to the test case and send out the second round review. > Note the 2 calls to __efi_early(). The purpose of __pure here is to > instruct GCC to emit only a single call to __efi_early(), because it > will return the same value both times. That is good to know. > In other words, GCC is allowed emit fewer calls to a __pure function > than there are calls in the source, and the same applies to calls > through a pure function pointer. However, if the pure pointer points > to a function that is not pure, i.e., back-to-back invocations may > legally return different results, then calling it through a pure > pointer is a bug, and needs to be flagged. I am convinced :-) Chris -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html