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

Reply via email to