<div dir="ltr"><div><div>Check out the generated code for:<br><br>--<br>#include <stdio.h><br><br>int main(int argc, char **argv) {<br>  static void *array[] = { &&foo, &&bar };<br><br>  goto *array[argc % 2];<br>
<br>foo:<br>  puts("foo");<br>  return 0;<br><br>bar:<br>  puts("bar");<br>  return 0;<br>}<br>--<br><br></div><div>Also, take a look at the class BlockAddress in llvm/IR/Constants.h.<br>I think those might help you out.<br>
</div><br></div>H.<br><div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Nov 1, 2013 at 11:48 PM, dw <span dir="ltr"><<a href="mailto:dw.dev.mailing@gmail.com" target="_blank">dw.dev.mailing@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I'm currently writing a function pass for LLVM and face the following<br>
problem. I want to store the address of a BasicBlock (or the label, as<br>
LLVM refers to it) in a local variable (AllocaInst). Later on I intend<br>
to indirectly branch to this address by "dereferencing" the variable.<br>
<br>
Is this possible? I tried creating an instance of AllocaInst but I'm not<br>
quite sure which type to use. Using block->getType() results in a<br>
segmentation fault (Cannot allocate unsized type %myVar = alloca label).<br>
<br>
Code might help:<br>
<br>
AllocaInst *myVar = new AllocaInst(blockToStore.getType(), "myVar",<br>
curBlock);<br>
new StoreInst(&blockToStore, myVar);<br>
<br>
I guess I should use an integer type to store the address but then LLVM<br>
complains about type mismatch as I don not know how to cast the block's<br>
label to an integer. I am not sure where to look this up, might be I<br>
missed an important part in the docs.<br>
<br>
<br>
Kind regards<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote></div><br></div>