<div dir="ltr">Hello,<div><br></div><div>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.</div>
<div><br></div><div>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:</div><div><div><br></div><div> checkout() {</div>
<div> cd $LLVM_SRC</div><div> local committer_date="$(git log --pretty=format:%cd -n1 'HEAD')"</div><div> cd $LLVM_SRC/tools/clang</div><div> git checkout "$(git rev-list -n 1 --before="$committer_date" origin/google/testing)"</div>
<div> cd $LLVM_SRC/projects/compiler-rt</div><div> git checkout "$(git rev-list -n 1 --before="$committer_date" origin/google/testing)"</div><div> }</div><div><br></div><div> build() {</div>
<div> cd $LLVM_BUILD<br></div><div> ninja<br></div><div> }</div><div><br></div><div> # Go for it!</div><div> checkout || exit 125</div><div> build || exit 125</div><div> run_test</div></div>
<div><br></div><div>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.</div>
<div><br></div><div>Hope this helps!</div><div>Jonas</div></div>