CallDescriptions for builtin functions relaxes the match rules
somewhat, so that the CallDescription will match for calls that have
some prefix or suffix. This was achieved by doing a StringRef::contains().
However, this is somewhat problematic for builtins that are substrings
of each other.
Consider the following:
CallDescription{ builtin, "memcpy"} will match for
__builtin_wmemcpy() calls, which is unfortunate.
This patch addresses/works around the issue by checking if the
characters around the function's name are not part of the 'name'
semantically. In other words, to accept a match for "memcpy" the call
should not have alphanumeric ([a-zA-Z]) characters around the 'match'.
So, CallDescription{ builtin, "memcpy"} will not match on:
- __builtin_wmemcpy: there is a w alphanumeric character before the match.
- __builtin_memcpyFOoBar_inline: there is a F character after the match.
- __builtin_memcpyX_inline: there is an X character after the match.
But it will still match for:
- memcpy: exact match
- __builtin_memcpy: there is an _ before the match
- __builtin_memcpy_inline: there is an _ after the match
- memcpy_inline_builtinFooBar: there is an _ after the match
std::size_t