xaizek / unused-funcs (License: GPLv2+) (since 2018-12-07)
Clang-based standalone tool that detects unused external functions in a set of source files.
<root> / README.md (13b91f833749da351abf2d8e332ae05cf6ffb72b) (1,325B) (mode 100644) [raw]
Note
----

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](https://github.com/xaizek/unused-funcs/tree/post).

Brief description
-----------------

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 
 made `static`.

Example
-------

Input:

```c
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:

```sh
bin/unused-funcs main.c --
```

Output (paths are truncated):

```
.../main.c:20:firstExtern:can be made static
.../main.c:25:secondExtern:unused
```

Building
--------

1. Clone the repository to `llvm/tools/clang/tools/extra`.
2. Add `add_subdirectory(unused-funcs)` to `CMakeLists.txt` in the same 
   directory.
3. Run `ninja unused-funcs` inside your LLVM's `build/` directory.
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/unused-funcs

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/unused-funcs

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master