On Wed, May 27, 2020 at 06:04:21PM -0500, Zach Riggle wrote: > It looks like that does the trick for "goto" labels, but there are > also some issue on function name parsing with attributes when they are > split onto a second line. > > $ cat attr.cpp > int main() __attribute__ ( (no_sanitize("alignment")) ) > { > FOO > } > $ git grep --no-index --show-function -e FOO attr.cpp > attr.cpp=2=__attribute__ ( (no_sanitize("alignment")) ) > attr.cpp:4: FOO >From your output, I assume the problematic input actually splits the attribute onto the second line? I agree that's not ideal. The baked-in regex we use for matching C function lines is: $ git grep -nA4 cpp userdiff.c userdiff.c:173:PATTERNS("cpp", userdiff.c-174- /* Jump targets or access declarations */ userdiff.c-175- "!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:[[:space:]]*($|/[/*])\n" userdiff.c-176- /* functions/methods, variables, and compounds at top level */ userdiff.c-177- "^((::[[:space:]]*)?[A-Za-z_].*)$", so we mistake it for a function name. I'm not sure how easy it is to do better, though. We can add a line like: diff --git a/userdiff.c b/userdiff.c index 1df884ef0b..de8e1a3d72 100644 --- a/userdiff.c +++ b/userdiff.c @@ -173,6 +173,8 @@ PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$", PATTERNS("cpp", /* Jump targets or access declarations */ "!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:[[:space:]]*($|/[/*])\n" + /* skip over attribute declarations are on their own lines */ + "!((::[[:space:]]*))?__attribute__\n" /* functions/methods, variables, and compounds at top level */ "^((::[[:space:]]*)?[A-Za-z_].*)$", /* -- */ which works for your case, but would regress: __attribute__((whatever) int main() { FOO } Handling both means skipping past the attribute, not counting it as a function, and then checking for a plausible function afterwards. That's a much trickier regex. But if you come up with something that works, I think we'd be happy to take a patch. :) You can also just override this regex via config for your personal use. If you know you'd never use that style, then the problem becomes much easier. -Peff