[LLVMdev] Using git bisect with LLVM

Jonas Wagner jonas.wagner at epfl.ch
Fri Jul 4 11:05:12 PDT 2014


Hello,

git bisect helped me today in tracking down a regression in LLVM/Clang.
Because LLVM/Clang code is split across multiple git repositories, there
were a few obstacles to overcome prior to using git bisect. I thought I
would share them here, in the hope that they're useful for others.

The main difficulty was to check out the version of clang and compiler-rt
that would compile with a given LLVM revision. I used the following code in
the bisect script:

    checkout() {
        cd $LLVM_SRC
        local committer_date="$(git log --pretty=format:%cd -n1 'HEAD')"
        cd $LLVM_SRC/tools/clang
        git checkout "$(git rev-list -n 1 --before="$committer_date"
origin/google/testing)"
        cd $LLVM_SRC/projects/compiler-rt
        git checkout "$(git rev-list -n 1 --before="$committer_date"
origin/google/testing)"
    }

    build() {
        cd $LLVM_BUILD
        ninja
    }

    # Go for it!
    checkout  || exit 125
    build  || exit 125
    run_test

The code will, for a given LLVM revision, checkout the latest revision from
the google/testing branch for both clang and compiler-rt. It will then
compile everything. If either fails, the script exits with code 125, which
tells git bisect to skip the current commit and try another one.

Hope this helps!
Jonas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140704/582164d4/attachment.html>


More information about the llvm-dev mailing list