The code was "modernized" (the term is too ambiguous and subjective to take it seriously) and thus has slightly diverged from the way it's presented in the post. Original tree that corresponds to the text can be browsed here.
Clang-based standalone tool that diagnoses the following cases of defining functions:
- completely unused functions declared as
extern
; - functions declared as
extern
which are used only locally and thus can be madestatic
.
Input:
static void firstStatic(void);
static void secondStatic(void);
void firstExtern(void);
extern void secondExtern(void);
static void firstStatic(void) { }
static void secondStatic(void) { }
void firstExtern(void) { }
void secondExtern(void) { }
int
main(void)
{
firstExtern();
secondStatic();
return 0;
}
Run command:
bin/unused-funcs main.c --
Output (paths are truncated):
.../main.c:20:firstExtern:can be made static
.../main.c:25:secondExtern:unused
- Clone the repository to
llvm/tools/clang/tools/extra
. - Add
add_subdirectory(unused-funcs)
toCMakeLists.txt
in the same directory. - Run
ninja unused-funcs
inside your LLVM'sbuild/
directory.