xaizek / for-postfix (License: GPLv2+) (since 2018-12-07)
Clang-based standalone tool that detects for-loops with postfix operators.
File Mode Size
test-files/ 040000
CMakeLists.txt 100644 214B
LICENSE 100644 18KiB
README.md 100644 1,217B
for-postfix.cpp 100644 3,774B

/README.md

Brief description

Clang-based standalone tool that detects for-loops with postfix operators.

Example

Input:

#include <cstdlib>

#include <vector>

inline void
doNothing()
{
    // do nothing on purpose
}

int
main(void)
{
    std::vector<int> v;
    typedef std::vector<int> intVector;

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); cit++) {
        doNothing();
    }

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
        doNothing();
    }

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); cit--) {
        doNothing();
    }

    for (intVector::const_iterator cit = v.begin(); cit != v.end(); --cit) {
        doNothing();
    }

    return EXIT_SUCCESS;
}

Run command:

bin/for-postfix vector-all.cpp --

Output (paths are truncated):

.../vector-all.cpp:17:dangerous use of postfix operator
.../vector-all.cpp:25:dangerous use of postfix operator

Building

  1. Clone the repository to llvm/tools/clang/tools/extra.
  2. Add add_subdirectory(for-postfix) to CMakeLists.txt in the same directory.
  3. Run ninja for-postfix 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/for-postfix

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

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