[llvm-dev] "corrupted size vs. prev_size" when calling ExecutionSession::lookup()

Yafei Liu via llvm-dev llvm-dev at lists.llvm.org
Thu Sep 19 05:02:52 PDT 2019


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.

Here's how I created the JIT:


llvm::InitializeNativeTarget();
  llvm::InitializeNativeTargetAsmPrinter();
  llvm::InitializeNativeTargetAsmParser();
  // create jit
  llvm::orc::ExecutionSession ES;
  llvm::orc::RTDyldObjectLinkingLayer ObjectLayer(ES,
                                                  []() { return
std::make_unique<llvm::SectionMemoryManager>(); });
  auto JTMB = llvm::orc::JITTargetMachineBuilder::detectHost();
  auto DL = JTMB->getDefaultDataLayoutForTarget();
  llvm::orc::IRCompileLayer CompileLayer(ES, ObjectLayer,
llvm::orc::ConcurrentIRCompiler(std::move(*JTMB)));
  llvm::orc::MangleAndInterner Mangle(ES, *DL);
  ES.getMainJITDylib().setGenerator(

llvm::cantFail(llvm::orc::DynamicLibrarySearchGenerator::GetForCurrentProcess(*DL)));

// ... large part to generate IR code
.

  if (llvm::verifyModule(*AST::getModule(), &llvm::errs())) {
    return 0;
  } else {
    std::cout << "Verified success\n";
  }

  // run the generated IR code
  llvm::cantFail(CompileLayer.add(ES.getMainJITDylib(),

llvm::orc::ThreadSafeModule(std::move(AST::takeModule()),

AST::takeContext())));

  auto symbol = llvm::cantFail(ES.lookup({&ES.getMainJITDylib()},
Mangle("main")));

  int (*entry)() = (decltype(entry)) symbol.getAddress();
  std::cout << entry() << std::endl;


and the "corrupted size vs. prev_size" will happen if the IR code is this:

; ModuleID = 'top'
source_filename = "top"

@0 = global [3 x i32] [i32 1, i32 2, i32 3]

define i32 @main() {
  %1 = alloca i32
  store i32 0, i32* %1
  br label %2

; <label>:2:                                      ; preds = %0
  %3 = load i32, i32* %1
  ret i32 %3
}

I put this IR code to lli, and it works fine.

So any idea why I get "corrupted size vs. prev_size" when calling calling
ExecutionSession::lookup()?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190919/0b4d5eec/attachment-0001.html>


More information about the llvm-dev mailing list