blob: 6e1f997b3fd0d6f17da85596e4c267632539a66e [file] [log] [blame] [view]
This is a tool that can be used to detect usage of the global or system versions
of `operator new()` and `operator delete()` (and their other allocating
variants). This tool is useful for finding and preventing calls that go around
a library's or application's custom allocator.
# TODO
* Support `malloc()` and `free()`
* Filtering for false positives
* Support `std::make_unique()`, `std::make_shared()`, and other allocating
library functions
# To run
```
./alloc-linter-tool /path/to/source/cluster.cpp -- -I/some/include/directory
In file included from .../Code/cpp-driver/src/cluster.cpp:17:
In file included from .../Code/cpp-driver/src/cluster.hpp:20:
In file included from .../Code/cpp-driver/src/config.hpp:20:
In file included from .../Code/cpp-driver/src/auth.hpp:22:
In file included from .../Code/cpp-driver/src/host.hpp:22:
.../Code/cpp-driver/src/copy_on_write_ptr.hpp:85:7: error: Using `operator delete()` from /usr/lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/new:124:6
delete ref;
^
.../Code/cpp-driver/src/copy_on_write_ptr.hpp:74:54: error: Using `operator new()` from /usr/lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/new:120:7
ptr_ = SharedRefPtr<Referenced>(new Referenced(new T(*(temp->ref))));
^
.../Code/cpp-driver/src/copy_on_write_ptr.hpp:85:7: error: Using `operator delete()` from /usr/lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/new:124:6
delete ref;
```
*Note:* Includes and other compiler flags can be specified after `--`
# To run in a cmake project
```
mkdir build && cd build
cmake -DCMAKE_CXX_CLANG_TIDY=/path/to/tool/alloc-linter-tool ..
make
```
# Dependencies
Requires LLVM and clang (w/ clang's libtooling)
## On Ubuntu
```
sudo apt install libclang-6.0-dev
```
# To build
```
mkdir build && cd build
LIBCLANG_ROOT_DIR=/path/to/llvm/clang cmake ..
make
```