<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 23, 2008, at 6:19 PM, Gordon Henriksen wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>Yup. The code in question verifies more than the prototypes.</div><div><br></div><div><blockquote type="cite">-        Assert1(isa<AllocaInst>(CI.getOperand(1)->stripPointerCasts()),<br>-                "llvm.gcroot parameter #1 must be an alloca.", &CI);<br>-        Assert1(isa<Constant>(CI.getOperand(2)),<br>-                "llvm.gcroot parameter #2 must be a constant.", &CI);<br></blockquote></div><div><br></div><div><blockquote type="cite">-      Assert1(CI.getParent()->getParent()->hasGC(),<br>-              "Enclosing function does not use GC.",<br>-              &CI);<br></blockquote><div><font class="Apple-style-span" color="#144FAE"><br></font></div><div><font class="Apple-style-span" color="#144FAE"><span class="Apple-style-span" style="color: rgb(0, 0, 0); ">The rest is a holdover from when these intrinsics allowed arbitrary types.</span></font></div><div><font class="Apple-style-span" color="#144FAE"><br></font></div><div><font class="Apple-style-span" color="#000000"><span class="Apple-style-span" style="background-color: transparent;">We could verify these 3 cases and fall through to the default case for the rest; or just drop the type checks if the prototypes are already verified.</span></font></div></div></div></div></blockquote></div><br><div>Done, thanks!</div><div><br></div><div>-Chris</div></body></html>