<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:等线;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@等线";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        font-variant:normal !important;
        color:black;
        text-transform:none;
        font-emphasize:none;
        font-weight:normal;
        font-style:normal;
        text-decoration:none none;
        vertical-align:baseline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black">Hello Yafei,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black">Could you open a bug report with the reproducer? This may expose an issue that shares the same root cause with PR35547 which gets a little bit tricky to reproduce.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black">-Yuanfang<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:black"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> llvm-dev <llvm-dev-bounces@lists.llvm.org>
<b>On Behalf Of </b>Yafei Liu via llvm-dev<br>
<b>Sent:</b> Thursday, September 19, 2019 5:03 AM<br>
<b>To:</b> llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> [llvm-dev] "corrupted size vs. prev_size" when calling ExecutionSession::lookup()<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">Hi, I wrote a compiler that generate IR code and run it on the JIT, and there randomly crashed due to "corrupted size vs. prev_size" depends on the IR code generated from the source code.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Here's how I created the JIT:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<blockquote style="margin-left:30.0pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">llvm::InitializeNativeTarget();<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::InitializeNativeTargetAsmPrinter();<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::InitializeNativeTargetAsmParser();<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  // create jit<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::orc::ExecutionSession ES;<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::orc::RTDyldObjectLinkingLayer ObjectLayer(ES,<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">                                                  []() { return std::make_unique<llvm::SectionMemoryManager>(); });<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  auto JTMB = llvm::orc::JITTargetMachineBuilder::detectHost();<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  auto DL = JTMB->getDefaultDataLayoutForTarget();<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::orc::IRCompileLayer CompileLayer(ES, ObjectLayer, llvm::orc::ConcurrentIRCompiler(std::move(*JTMB)));<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::orc::MangleAndInterner Mangle(ES, *DL);<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  ES.getMainJITDylib().setGenerator(<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">      llvm::cantFail(llvm::orc::DynamicLibrarySearchGenerator::GetForCurrentProcess(*DL)));<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">// ... large part to generate IR code<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  if (llvm::verifyModule(*AST::getModule(), &llvm::errs())) {<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">    return 0;<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  } else {<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">    std::cout << "Verified success\n";<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  }<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  // run the generated IR code<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  llvm::cantFail(CompileLayer.add(ES.getMainJITDylib(),<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">                                  llvm::orc::ThreadSafeModule(std::move(AST::takeModule()),<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">                                                              AST::takeContext())));<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  auto symbol = llvm::cantFail(ES.lookup({&ES.getMainJITDylib()}, Mangle("main")));<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  int (*entry)() = (decltype(entry)) symbol.getAddress();<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">  std::cout << entry() << std::endl;<o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">and the "corrupted size vs. prev_size" will happen if the IR code is this:<o:p></o:p></p>
</div>
<blockquote style="margin-left:30.0pt;margin-right:0in">
<div>
<p class="MsoNormal">; ModuleID = 'top'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">source_filename = "top"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">@0 = global [3 x i32] [i32 1, i32 2, i32 3]<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">define i32 @main() {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  %1 = alloca i32<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  store i32 0, i32* %1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  br label %2<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">; <label>:2:                                      ; preds = %0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  %3 = load i32, i32* %1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  ret i32 %3<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
</blockquote>
<p class="MsoNormal">I put this IR code to lli, and it works fine.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">So any idea why I get "corrupted size vs. prev_size" when calling calling ExecutionSession::lookup()?<o:p></o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>