<div dir="ltr">Its hard to see how this change could have triggered a leak.  Are you sure it was this commit?  If you are, I can try to make lsan build locally and reproduce.  I don't suppose you are able to symbolize that backtrace can you?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 3, 2020 at 2:49 AM Mikael Holmén <<a href="mailto:mikael.holmen@ericsson.com">mikael.holmen@ericsson.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I noticed on one of my organization's build bots that runs with<br>
sanatizers that we got a warning about a leak with this commit. So when<br>
running the testcase<br>
 test/CodeGen/WebAssembly/irreducible-cfg-exceptions.ll<br>
<br>
build-sana/bin/llc < test/CodeGen/WebAssembly/irreducible-cfg-<br>
exceptions.ll -asm-verbose=false -verify-machineinstrs -disable-block-<br>
placement -wasm-disable-explicit-locals -wasm-keep-registers -enable-<br>
emscripten-cxx-exceptions | build-sana/bin/FileCheck<br>
test/CodeGen/WebAssembly/irreducible-cfg-exceptions.ll<br>
<br>
I get<br>
<br>
=================================================================<br>
==5081==ERROR: LeakSanitizer: detected memory leaks<br>
<br>
Direct leak of 32 byte(s) in 1 object(s) allocated from:<br>
    #0 0x421d520  (/data/repo/master/llvm/build-sana/bin/llc+0x421d520)<br>
    #1 0x46a9ec9  (/data/repo/master/llvm/build-sana/bin/llc+0x46a9ec9)<br>
    #2 0x676cc32  (/data/repo/master/llvm/build-sana/bin/llc+0x676cc32)<br>
    #3 0x7bbf0ca  (/data/repo/master/llvm/build-sana/bin/llc+0x7bbf0ca)<br>
    #4 0x8e2374d  (/data/repo/master/llvm/build-sana/bin/llc+0x8e2374d)<br>
    #5 0x8e245e0  (/data/repo/master/llvm/build-sana/bin/llc+0x8e245e0)<br>
    #6 0x4228f89  (/data/repo/master/llvm/build-sana/bin/llc+0x4228f89)<br>
    #7 0x42235a0  (/data/repo/master/llvm/build-sana/bin/llc+0x42235a0)<br>
    #8 0x7f50ee2f4b96  (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)<br>
<br>
SUMMARY: AddressSanitizer: 32 byte(s) leaked in 1 allocation(s).<br>
<br>
/Mikael<br>
<br>
On Wed, 2020-04-01 at 16:33 -0700, Sam Clegg via llvm-commits wrote:<br>
> Author: Sam Clegg<br>
> Date: 2020-04-01T16:33:33-07:00<br>
> New Revision: 296ccef70363df9195bc678ad5501dd44de7f8fb<br>
> <br>
> URL: <br>
> <a href="https://protect2.fireeye.com/v1/url?k=6f7ff692-33f65951-6f7fb609-0cc47ad93d36-d092eb1748b9557d&q=1&e=1ca40782-7747-4f20-89e4-55dbb09d830d&u=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project%2Fcommit%2F296ccef70363df9195bc678ad5501dd44de7f8fb" rel="noreferrer" target="_blank">https://protect2.fireeye.com/v1/url?k=6f7ff692-33f65951-6f7fb609-0cc47ad93d36-d092eb1748b9557d&q=1&e=1ca40782-7747-4f20-89e4-55dbb09d830d&u=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project%2Fcommit%2F296ccef70363df9195bc678ad5501dd44de7f8fb</a><br>
> DIFF: <br>
> <a href="https://protect2.fireeye.com/v1/url?k=4a3efd3f-16b752fc-4a3ebda4-0cc47ad93d36-ac161843750d844e&q=1&e=1ca40782-7747-4f20-89e4-55dbb09d830d&u=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project%2Fcommit%2F296ccef70363df9195bc678ad5501dd44de7f8fb.diff" rel="noreferrer" target="_blank">https://protect2.fireeye.com/v1/url?k=4a3efd3f-16b752fc-4a3ebda4-0cc47ad93d36-ac161843750d844e&q=1&e=1ca40782-7747-4f20-89e4-55dbb09d830d&u=https%3A%2F%2Fgithub.com%2Fllvm%2Fllvm-project%2Fcommit%2F296ccef70363df9195bc678ad5501dd44de7f8fb.diff</a><br>
> <br>
> LOG: [WebAssembly] EmscriptenEHSjLj: Mark __invoke_ functions as<br>
> imported<br>
> <br>
> This means the linker will be expect them be undefined at link time<br>
> an<br>
> will generate imports from the `env` module rather than reporting<br>
> undefined externals.<br>
> <br>
> Differential Revision: <a href="https://reviews.llvm.org/D77192" rel="noreferrer" target="_blank">https://reviews.llvm.org/D77192</a><br>
> <br>
> Added: <br>
>     <br>
> <br>
> Modified: <br>
>     llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
>     llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll<br>
> <br>
> Removed: <br>
>     <br>
> <br>
> <br>
> #####################################################################<br>
> ###########<br>
> diff  --git<br>
> a/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> b/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> index 89265a3a9520..c8878a48b243 100644<br>
> ---<br>
> a/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> +++<br>
> b/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp<br>
> @@ -344,6 +344,21 @@ static std::string getSignature(FunctionType<br>
> *FTy) {<br>
>    return Sig;<br>
>  }<br>
>  <br>
> +static void markAsImported(Function *F) {<br>
> +  // Tell the linker that this function is expected to be imported<br>
> from the<br>
> +  // 'env' module.<br>
> +  if (!F->hasFnAttribute("wasm-import-module")) {<br>
> +    llvm::AttrBuilder B;<br>
> +    B.addAttribute("wasm-import-module", "env");<br>
> +    F->addAttributes(llvm::AttributeList::FunctionIndex, B);<br>
> +  }<br>
> +  if (!F->hasFnAttribute("wasm-import-name")) {<br>
> +    llvm::AttrBuilder B;<br>
> +    B.addAttribute("wasm-import-name", F->getName());<br>
> +    F->addAttributes(llvm::AttributeList::FunctionIndex, B);<br>
> +  }<br>
> +}<br>
> +<br>
>  // Returns __cxa_find_matching_catch_N function, where N =<br>
> NumClauses + 2.<br>
>  // This is because a landingpad instruction contains two more<br>
> arguments, a<br>
>  // personality function and a cleanup bit, and<br>
> __cxa_find_matching_catch_N<br>
> @@ -360,6 +375,7 @@<br>
> WebAssemblyLowerEmscriptenEHSjLj::getFindMatchingCatch(Module &M,<br>
>    Function *F = Function::Create(<br>
>        FTy, GlobalValue::ExternalLinkage,<br>
>        "__cxa_find_matching_catch_" + Twine(NumClauses + 2), &M);<br>
> +  markAsImported(F);<br>
>    FindMatchingCatches[NumClauses] = F;<br>
>    return F;<br>
>  }<br>
> @@ -469,6 +485,7 @@ Function<br>
> *WebAssemblyLowerEmscriptenEHSjLj::getInvokeWrapper(CallOrInvoke *CI)<br>
> {<br>
>                                          CalleeFTy->isVarArg());<br>
>    Function *F =<br>
>        Function::Create(FTy, GlobalValue::ExternalLinkage,<br>
> "__invoke_" + Sig, M);<br>
> +  markAsImported(F);<br>
>    InvokeWrappers[Sig] = F;<br>
>    return F;<br>
>  }<br>
> <br>
> diff  --git a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll<br>
> b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll<br>
> index cad6c4ac855b..ad42cc5f8615 100644<br>
> --- a/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll<br>
> +++ b/llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll<br>
> @@ -308,6 +308,10 @@ attributes #0 = { returns_twice }<br>
>  attributes #1 = { noreturn }<br>
>  attributes #2 = { nounwind }<br>
>  attributes #3 = { allocsize(0) }<br>
> +; CHECK: attributes #{{[0-9]+}} = { "wasm-import-module"="env"<br>
> "wasm-import-name"="__invoke_void" }<br>
> +; CHECK: attributes #{{[0-9]+}} = { "wasm-import-module"="env"<br>
> "wasm-import-name"="__cxa_find_matching_catch_3" }<br>
> +; CHECK: attributes #{{[0-9]+}} = { "wasm-import-module"="env"<br>
> "wasm-import-name"="__invoke_i8*_i32_%struct.__jmp_buf_tag*" }<br>
> +; CHECK: attributes #{{[0-9]+}} = { "wasm-import-module"="env"<br>
> "wasm-import-name"="__invoke_void_%struct.__jmp_buf_tag*_i32" }<br>
>  ; CHECK: attributes #[[ALLOCSIZE_ATTR]] = { allocsize(1) }<br>
>  <br>
>  !<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!2}<br>
> <br>
> <br>
>         <br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>