<div dir="ltr"><div>Apologies for the noop question in advance (just getting started with LLVM), and I'm not entirely sure if this is the right list to post to. is it?</div><div><br></div>I have some lambda functions as member variables that I want to have my LLVM language make calls to. I've added a mapping to them, but this doesn't seem to enable LLVM to resolve the functions. I asked on stackoverflow but the suggestion there didn't help. The minimal test case to reproduce what I'm trying to do is:<div><br></div><div><pre class="" style="margin-top:0px;padding:5px;border:0px;font-size:13px;overflow:auto;width:auto;max-height:600px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;color:rgb(57,51,24);word-wrap:normal;background-color:rgb(238,238,238)"><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,128,128)">#include</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"llvm/ExecutionEngine/GenericValue.h"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,128,128)">#include</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"llvm/ExecutionEngine/Interpreter.h"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,128,128)">#include</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"llvm/IR/Constants.h"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,128,128)">#include</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"llvm/IR/IRBuilder.h"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,128,128)">#include</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"llvm/Support/ManagedStatic.h"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,128,128)">#include</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"llvm/Support/TargetSelect.h"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">using</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">namespace</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> llvm</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">int</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> main</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">{</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">InitializeNativeTarget</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">();</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">LLVMContext</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Context</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  std</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">unique_ptr</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Module</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">></span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Owner</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> make_unique</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Module</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">>(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"SomeModule"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Context</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Module</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">M </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Owner</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">.</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">get</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">();</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">FunctionType</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaFT </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">FunctionType</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">get</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Type</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">getInt32Ty</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Context</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">),</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">false</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Function</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaFN </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Function</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Create</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaFT</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Function</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">ExternalLinkage</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"lambda"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Owner</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">.</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">get</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">());</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">auto</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> lambdaBody </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">[]()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">{</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">return</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">100</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">};</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Function</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">mainF </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> cast</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Function</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">>(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">M</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">-></span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">getOrInsertFunction</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"main"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Type</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">getInt32Ty</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Context</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">),</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Type</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*)</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">0</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">));</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">BasicBlock</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">BB </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">BasicBlock</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Create</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Context</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"EntryBlock"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> mainF</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">IRBuilder</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><></span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> builder</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">BB</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">CallInst</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaRes </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> builder</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">.</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">CreateCall</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaFN</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> std</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">vector</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Value</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*>(),</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"lambdaRetVar"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  builder</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">.</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">CreateRet</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaRes</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">ExecutionEngine</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">EE </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">EngineBuilder</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">std</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">move</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Owner</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">)).</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">create</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">();</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  EE</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">-></span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">addGlobalMapping</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaFN</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">&</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaBody</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  outs</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><<</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"We just constructed this LLVM module:\n\n"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><<</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">*</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">M</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  outs</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><<</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"\n\nRunning main: "</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  std</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">::</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">vector</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">GenericValue</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">></span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> noargs</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">GenericValue</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> gv </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> EE</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">-></span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">runFunction</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">mainF</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">,</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> noargs</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">);</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

  outs</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><<</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"Result: "</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><<</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> gv</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">.</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">IntVal</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><<</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">"\n"</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  llvm_shutdown</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">();</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">delete</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> EE</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">return</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">0</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">}</span></code></pre><div>The output is:</div><div><br></div><div><pre class="" style="margin-top:0px;padding:5px;border:0px;font-size:13px;overflow:auto;width:auto;max-height:600px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;color:rgb(57,51,24);word-wrap:normal;background-color:rgb(238,238,238)"><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">We</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> just constructed </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,139)">this</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> LLVM module</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">:</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">;</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">ModuleID</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">'SomeModule'</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

declare i32 </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">@lambda</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

define i32 </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">@main</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">{</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">EntryBlock</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">:</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">%</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaRetVar </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">=</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> call i32 </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(128,0,0)">@lambda</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">()</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">
  ret i32 </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">%</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">lambdaRetVar
</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">}</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">

</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Running</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> main</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">:</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> 
LLVM ERROR</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">:</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> </span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(43,145,175)">Tried</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> to execute an unknown external function</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">:</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"> lambda</span></code></pre></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">The following suggestion was made on StackOveflow:</span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">"</span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><span style="color:rgb(34,34,34);font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:19.5px">Your lambda body is a class. You must pass the address of its function call operator, which you can do by converting it to a function pointer: </span><code style="margin:0px;padding:1px 5px;border:0px;font-size:13px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:pre-wrap;color:rgb(34,34,34);background-color:rgb(238,238,238)">auto lambdaBody = +[]() { return 100; };</code><span style="color:rgb(34,34,34);font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:19.5px"> and passing it as a </span><code style="margin:0px;padding:1px 5px;border:0px;font-size:13px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:pre-wrap;color:rgb(34,34,34);background-color:rgb(238,238,238)">void*</code><span style="color:rgb(34,34,34);font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:19.5px">: </span><code style="margin:0px;padding:1px 5px;border:0px;font-size:13px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:pre-wrap;color:rgb(34,34,34);background-color:rgb(238,238,238)">EE->addGlobalMapping(lambdaFN, reinterpret_cast<void*>(lambdaBody));</code><span style="color:rgb(34,34,34);font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:15px;line-height:19.5px">.</span><br></span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">"</span></code></div><div><span style="color:rgb(0,0,0);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit">However, after doing that, I get the same LLVM error message. How do I get LLVM to call to a lambda? I am likely to have some C functions loaded from a dynamic lib (I'll know the name and signatures), is it the same process to call these as it is for lambdas?</span><br></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><br></span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">I know the Kaleidoscope example does std::sin so when it says it finds it because it is within the same address space I thought this would work too...<br></span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><br></span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">No suggestions or code samples welcome.</span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)"><br></span></code></div><div><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif;white-space:inherit"><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,0)">Thanks in advance.</span></code></div>-- <br><div class="gmail_signature">Courtney Robinson<br><div><div><br></div></div></div>
</div></div>