I'm looking for a review of the patch below (beyond using DEF_EXT_LIB_BUILTIN to declare the built-in rather than DEF_LIB_BUILTIN, as already pointed out by Jakub):
https://gcc.gnu.org/ml/gcc-patches/2018-06/msg00267.html On 06/05/2018 03:43 PM, Martin Sebor wrote:
The attached patch adds basic support for handling strnlen as a built-in function. It touches the strlen pass where it folds constant results of the function, and builtins.c to add simple support for expanding strnlen calls with known results. It also changes calls.c to detect excessive bounds to the function and unsafe calls with arguments declared attribute nonstring. A side-effect of the strlen change I should call out is that strlen() calls to all zero-length arrays that aren't considered flexible array members (i.e., internal members or non-members) are folded into zero. No warning is issued for such invalid uses of zero-length arrays but based on the responses to my question Re: aliasing between internal zero-length-arrays and other members(*) it sounds like one would be appropriate. I will see about adding one in a separate patch. Martin [*] https://gcc.gnu.org/ml/gcc/2018-06/msg00046.html