I'd like to find unused functions in a codebase - including across compilations units. I'm using gcc as my compiler.
Here's an example:
foo.c
(assume appropriate foo.h
):
void foo() {
....
}
void bar() {
....
}
main.c
:
#include <stdio.h>
#include "foo.h"
int main(void) {
bar();
return 0;
}
In this example, I'd like to get warned about foo()
not being used.
There is the -Wunused-function
gcc option:
-Wunused-function
Warn whenever a static function is declared but not defined or a non-inline static function is unused. This warning is enabled by -Wall.
but it's only for static functions - it won't produce a warning on the example above.
I'll also accept suggestions of tools/scripts/other compilers that can do this for me - though I'd prefer to stick with gcc
if possible.
Caolan Mc Namara, a LibreOffice developer, has made a small tool to detect this type of thing in LibreOffice source code. They had around thousands functions & methods unused in LibreOffice. His tool is a key element for removing them.
It's called callcatcher. It can
collect functions/methods defined and subtract called/referenced
It works directly on assembler output and so, it works only for x86 and x86_64 architecture. It can produce output like this. You can integrate it with your traditional compiling and linking call to gcc.
Caolan agrees that it should become a gcc plugin.