aaronj0 wrote:
Follow-up to https://github.com/llvm/llvm-project/pull/226975: the sanitizer
bots failed on the added unittest, see
https://lab.llvm.org/buildbot/#/builders/55/builds/33928:
```
==ClangReplInterpreterTests==1819891==ERROR: LeakSanitizer: detected memory
leaks
Indirect leak of 514328 byte(s) in 1 object(s) allocated from:
#0 0xabfb71844c20 in operator new(unsigned long)
/home/b/sanitizer-aarch64-linux-bootstrap-hwasan/build/llvm-project/compiler-rt/lib/hwasan/hwasan_new_delete.cpp:122:3
#1 0xabfb74672ef4 in
llvm::RegisterTargetMachine<llvm::NVPTXTargetMachine>::Allocator(llvm::Target
const&, llvm::Triple const&, llvm::StringRef, llvm::StringRef,
llvm::TargetOptions const&, std::__1::optional<llvm::Reloc::Model>,
std::__1::optional<llvm::CodeModel::Model>, llvm::CodeGenOptLevel, bool)
/home/b/sanitizer-aarch64-linux-bootstrap-hwasan/build/llvm-project/llvm/include/llvm/MC/TargetRegistry.h:1288:12
#2 0xabfb78c0b980 in createTargetMachine
/home/b/sanitizer-aarch64-linux-bootstrap-hwasan/build/llvm-project/llvm/include/llvm/MC/TargetRegistry.h:475:12
#3 0xabfb78c0b980 in clang::IncrementalCUDADeviceParser::GeneratePTX()
/home/b/sanitizer-aarch64-linux-bootstrap-hwasan/build/llvm-project/clang/lib/Interpreter/DeviceOffload.cpp:56:48
#4 0xabfb78bf064c in clang::Interpreter::Parse(llvm::StringRef)
/home/b/sanitizer-aarch64-linux-bootstrap-hwasan/build/llvm-project/clang/lib/Interpreter/Interpreter.cpp:582:57
#5 0xabfb7189dd54 in (anonymous
namespace)::DeviceOffloadTest_FirstDeviceModuleVerifies_Test::TestBody()
/home/b/sanitizer-aarch64-linux-bootstrap-hwasan/build/llvm-project/clang/unittests/Interpreter/DeviceOffloadTest.cpp:67:32
...
```
I tried reproducing locally with an ASan build:
```
[----------] 1 test from DeviceOffloadTest
[ RUN ] DeviceOffloadTest.FirstDeviceModuleVerifies
/home/maximus/llvm-dev/wt-asan/clang/unittests/Interpreter/DeviceOffloadTe
Death test: { IncrementalCompilerBuilder CB; CB.SetCompilerArgs( {"-nocudainc",
"-nocudalib", "-fverify-intermediate-code"}); auto DeviceCI =
llvm::cantFail(CB.CreateDevice(OffloadType::CUDA)); auto HostCI =
llvm::caype::CUDA)); auto Interp =
llvm::cantFail(Interpreter::createWithDevice(OffloadType::CUDA,
std::move(HostCI), std::move(DeviceCI)));
llvm::cantFail(Interp->Parse("__attribute__((device)) void f() {}")); exit(0); }
Result: died but not with expected exit code:
Exited with exit status 1
Actual msg:
[ DEATH ]
[ DEATH ] =============================================================
[ DEATH ] ==1453170==ERROR: LeakSanitizer: detected memory leaks
[ DEATH ]
[ DEATH ] Indirect leak of 514576 byte(s) in 1 object(s) allocated from:
[ DEATH ] #0 0x73b0ad6fe548 in operator new(unsigned long)
../../..n_new_delete.cpp:95
[ DEATH ] #1 0x574c28df5546 in
llvm::RegisterTargetMachine<llvm::NVPTXTargetMachine>::Allocator(llvm::Target
const&, llvm::Triple const&, llvm::StringRef, llvm::StringRef,
llvm::TargetOptions const&, std::optional<llvm::Reloc::Model>,
std::optionlvm::CodeGenOptLevel,
bool)(/home/maximus/llvm-dev/wt-asan/build/tools/clang/unittests/Interpreter/ClangReplInterpreterTests+0xefe546)
(BuildId: 1e83ecc39d1883f21ce500833ada23601b019e39)
[ DEATH ] #2 0x574c2f4a3b78 in
clang::IncrementalCUDADeviceParser::(/home/maximus/llvm-dev/wt-asan/build/tools/clang/unittests/Interpreter/ClangReplInterpreterTests+0x75acb78)
(BuildId: 1e83ecc39d1883f21ce500833ada23601b019e39)
[ DEATH ] #3 0x574c2f480a49 in
clang::Interpreter::Parse(llvm::Stri(/home/maximus/llvm-dev/wt-asan/build/tools/clang/unittests/Interpreter/ClangReplInterpreterTests+0x7589a49)
(BuildId: 1e83ecc39d1883f21ce500833ada23601b019e39)
[ DEATH ] #4 0x574c28c49817 in (anonymous
namespace)::DeviceOffloads_Test::TestBody()(/home/maximus/llvm-dev/wt-asan/build/tools/clang/unittests/Interpreter/ClangReplInterpreterTests+0xd52817)
(BuildId: 1e83ecc39d1883f21ce500833ada23601b019e39)
[ DEATH ] #5 0x574c2c1db314 in void
testing::internal::HandleExceptng::Test, void>(testing::Test*, void
(testing::Test::*)(), char const*)[clone .isra.0]
(/home/maximus/llvm-dev/wt-asan/build/tools/clang/unittests/Interpreter/ClangReplInterpreterTests+0x42e4314)
(BuildId: 1e83ecc39d1883f21ce500833ada23601b019e39)
...
[ DEATH ] SUMMARY: AddressSanitizer: 521880 byte(s) leaked in 46
allocation(s).
[ DEATH ]
[ FAILED ] DeviceOffloadTest.FirstDeviceModuleVerifies (181 ms)
[----------] 1 test from DeviceOffloadTest (181 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (181 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] DeviceOffloadTest.FirstDeviceModuleVerifies
1 FAILED TEST
```
All 46 allocations are the NVPTX TargetMachine and its owned objects. With this
patch:
```
$ ./tools/clang/unittests/Interpreter/ClangReplInterpreterTests
--gtest_filter=DeviceOffloadTest.*
Note: Google Test filter = DeviceOffloadTest.*
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from DeviceOffloadTest
[ RUN ] DeviceOffloadTest.FirstDeviceModuleVerifies
[ OK ] DeviceOffloadTest.FirstDeviceModuleVerifies (70 ms)
[----------] 1 test from DeviceOffloadTest (70 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (71 ms total)
[ PASSED ] 1 test.
```
and the ClangReplInterpreterTests binary runs cleanly.
https://github.com/llvm/llvm-project/pull/228208
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits