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.
- Support
malloc()
andfree()
- Filtering for false positives
- Support
std::make_unique()
,std::make_shared()
, and other allocating library functions
./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 --
mkdir build && cd build
cmake -DCMAKE_CXX_CLANG_TIDY=/path/to/tool/alloc-linter-tool ..
make
Requires LLVM and clang (w/ clang's libtooling)
sudo apt install libclang-6.0-dev
mkdir build && cd build
LIBCLANG_ROOT_DIR=/path/to/llvm/clang cmake ..
make