<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/66272>66272</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
runtimes incremental build didn't rebuild GoogleTest when it is changed
</td>
</tr>
<tr>
<th>Labels</th>
<td>
compiler-rt,
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zeroomega
</td>
</tr>
</table>
<pre>
I noticed that a few bots (e.g. https://lab.llvm.org/buildbot/#/builders/240/builds/15001) reports linker error after my GoogleTest patch was landed, error message:
```
FAILED: compiler-rt/lib/fuzzer/tests/FuzzerUtils-aarch64-Test /b/sanitizer-aarch64-linux-fuzzer/build/llvm_build0/runtimes/runtimes-bins/compiler-rt/lib/fuzzer/tests/FuzzerUtils-aarch64-Test
cd /b/sanitizer-aarch64-linux-fuzzer/build/llvm_build0/runtimes/runtimes-bins/compiler-rt/lib/fuzzer/tests && /b/sanitizer-aarch64-linux-fuzzer/build/llvm_build0/./bin/clang++ FuzzedDataProviderTestObjects.FuzzedDataProviderUnittest.cpp.aarch64.o FuzzedDataProviderTestObjects.gtest-all.cc.aarch64.o -o /b/sanitizer-aarch64-linux-fuzzer/build/llvm_build0/runtimes/runtimes-bins/compiler-rt/lib/fuzzer/tests/./FuzzerUtils-aarch64-Test -fuse-ld=lld -Wl,--color-diagnostics -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta --driver-mode=g++ -lpthread -nostdlib++ -fno-exceptions /b/sanitizer-aarch64-linux-fuzzer/build/llvm_build0/runtimes/runtimes-bins/compiler-rt/lib/fuzzer/libcxx_fuzzer_aarch64/lib/libc++.a -march=armv8-a
ld.lld: error: undefined symbol: testing::internal2::PrintBytesInObjectTo(unsigned char const*, unsigned long, std::__Fuzzer::basic_ostream<char, std::__Fuzzer::char_traits<char>>*)
>>> referenced by gtest-printers.h:158 (/b/sanitizer-aarch64-linux-fuzzer/build/llvm-project/runtimes/../third-party/unittest/googletest/include/gtest/gtest-printers.h:158)
>>> FuzzedDataProviderTestObjects.FuzzedDataProviderUnittest.cpp.aarch64.o:(std::__Fuzzer::basic_string<char, std::__Fuzzer::char_traits<char>, std::__Fuzzer::allocator<char>> testing::internal::FormatForComparisonFailureMessage<FuzzedDataProvider_ConsumeEnum_Test::TestBody()::Enum, FuzzedDataProvider_ConsumeEnum_Test::TestBody()::Enum>(FuzzedDataProvider_ConsumeEnum_Test::TestBody()::Enum const&, FuzzedDataProvider_ConsumeEnum_Test::TestBody()::Enum const&))
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
```
The line number `gtest-printers.h:158`, however, doesn't match the file patched by my PR, instead, it matches the old version before my patch was landed. This indicates that the bot was doing an incremental build and somehow the changed GoogleTest wasn't being rebuilt in this process. This issue can be reproduced in following steps locally:
In LLVM source tree:
```
$ git checkout 58d50b0cadafe118faf2e7d7bf738d2daa38bb73
$ mkdir build-incremental
$ cd build-incremental
$ /mnt/nvme_sec/SRC/llvm-prebuilts/cmake/linux-amd64/bin/cmake -DLLVM_APPEND_VC_REV=OFF -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_ASSERTIONS=OFF -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_ENABLE_RUNTIMES="compiler-rt;libunwind;libcxx;libcxxabi" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../llvm
$ ninja
$ ninja -C runtimes/runtimes-bins check-fuzzer
# Test should pass.
# Now patch the GoogleTest
$ cd ..
$ git checkout 54c1a9b20d89e85cd60d002c77b34c00f36520f4
$ cd build-incremental
$ ninja -C runtimes/runtimes-bins check-fuzzer
# Test will fail with error message above
# Test will pass if doing a clean build
```
I think this is an dependency bug in runtimes' build file and it should be fixed.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWFlv27gW_jX0y4EEifL64AfHyyB30jRI087cJ4MijyxOKNIgKTvur78gZTvO0t7BZIACRkDyLDzrx6Mw5-RGI07J4IoMFj3W-trY6Xe0xjS4Yb3SiMP0GrTxkqMAXzMPDCrcQ2m8A0LHmG5SqL3fOlLMCF0RulKsTJXaNamxG0JXZSuVKI2PxOJ0gNYRuqL97HQQtvkgy3JCJ2Bxa6x3oKR-RAtorbHAKo8WmgP8ZsxG4QM6D1vmeQ175kAxLVAQOj9yN-gc22CwKluQ7PR3mB1_cbuaXd8sF6SYATfNViq0iQ2GKlkSuqra79_RErry6HywbxUPvnqpXMKY5fWwn0QzghOErhzT0svvaM9UJXX7lJwVRU-DfrVr1nET_Let9rJBd7FMSqnD_oNmRSe5-JX2AaFDQocfNCENFKnDjYrpDaFXhF5BdFwsmGd31uykQBvc_lz-hdy79C31q5Y-GJXy7TY93p-a_6NmEyQSplTK-YVQYn5x1tOfZT6pWoeJEqRYKCUg-UMROk8SbpSxiZBso43zkjtI_vC1RSYSxyr0h9f7xGKFFjXHN5QSPYMkEVbu0CaNEUiKxSkzidp23JCEm0T0oaNU2iT4xHHrpdHuFwVRyZI_Pa27_fp45ZktUDtzUwZJE6ikWDDb7MYJ65pKiVSF8M46uAmLVguspEYB7tCURoWzkCypNwGFipnUHq1minbbOyu1vzp4dNe6K7YHQ-i41RGUBfCaWeBGO0_oLADbmaJMaIE5OC86Vet1VwndrmRO8rVx3iJrSDEPin7CHshrb5n07sRcLMMv3Do54mZ3UizhXBACygN0zbG10TWX1qSY5YNxeBj-SV6TrTUhDi8Tm4ZK97W0Itky6w-ErtpjIxO62sTH4LiRmqtWYDg-kd818B2__h0siY_g-Kd5cd7GivhnafkxP1PKcOZDLV4k8f0K7HYrYxvmV8bOTbNlVjqjV0yq1uKn0-M5f-v4em60axtc6rZZhxh1ysLqyohDTP2kOwssweKPKwmejz-s5tRNw3_FqAttk3NBXTxPL8DhOMlw0zRMC6iYVChgL30N-CQ9cCMQ8tA4rUNIduANOESQeheyKo1-rtnTDAOXk81DjeESBN02JVogw-wHtT_Mgvu12eMOYwEKg04TOvLQxHHK1wiVVNhNV12jNwe4uw_MUjuPLA5a8iiALooYJWCH1kmjocTKWAxSrye0FB5q6UBqITnzUZT5KF8aH_mEkXoDTIPU3GKD2jMFESYghM6ZBmuzjyK8ZnqD4nIi3LOjLyUGNRaDpAepwYd7t9ZwdO5khXMtAmfB4DB0WiPagGxSQ2WUMvugwnncOgjNpdTh1Tx5reHm5tsncKa1HMFbvJg4X86ahPZhEzJdI380rYfBWAyyMuNMsArzfFyxiuJIjMpqVIwFFYwV47IcFc_izaOQtgtFchGcZwYufkYldNXoAIp61-DaISd09eV-_gy-Xazi49mwR4wvYQBr1oj4Oh4nsECDZBEcX8_u7pa3i_W3-fp--Y0Ui8-rFSS_3Ur9F4NkMf80-325vvp6fbNYP_z3bkmKxT0qZO4s__XLcn1zffv78v40qnTny9vZ1c1yPfvyZXn_cP359stJ9wvy3f3n_yznD4FIKO16r7gKDzOlr1jvv94-XH9anlgvhoPiSsmy1XupRbfmT0_nBStlp6tzZb6ef_50d30TzY33PZP-_PMN8TjzxBcsxPg5FzpE6NUWkjn8aKDpyub0bB7lCogl72rTKgFb5lz64mOHFnBr9scWDP3y3CcvaiZNf1SifZ6zSUkzMZ7geMDFMBNZRvloVBZ9nmVVMRzQrOr_3Qr8kJt7qVQEziNsXn7mASvNDt8TCFEBWZ1QBbjC0O5x6ni3Tbu-DmihHzvMkC6gkcAtaoGaH6BsNwEinp0YHfEpomYAKXnOShmw9AlF2hPTQkyKCevhNB9O-kM6GedFr56y_pCVo9GQVqUY53lRDEQxzgf9SZ4NhnmW9-SUZrTIJnmRj4ssz9JRNR5W-Ujkg0zwsipIP8OGSXX-7O5FYJsOh3REe4qVqFz8xn9Z-JQSOieUatx3SBhOBouenUY8KNuNI_1MSefds2YvvcLpyfV3MFpI0QFwBycvwblGHWIj3Qm6e61V05f_P9hIX7dlyk1z6po302G0NhRP9PB_AQAA__9cp4VZ">