在文档[1]中,invoke
指令被列为终止指令,但在语法上它被写为:LLVM的'invoke'指令是一个终止符,如果是这样,为什么不用语法?
<result> = invoke [cconv] [ret attrs] <ty>|<fnty> <fnptrval>(<function args>)
[fn attrs] [operand bundles] to label <normal label>
unwind label <exception label>
和说明书中它表示,它是像一个call
(其还结合的结果)。
为什么指令是用这种方式写的,如果它是终止指令,并且它有可能使用那个<result>
?确实,invoke
之后的任何指令都可以访问?
在实验中,似乎在成功返回时,控制流向<normal label>
。有没有一种特殊的方式返回,而不是返回控制invoke
后的指令?
与此相关,如果控件总是传递给<normal label>
,是否有可能访问从被调用的函数返回的值(假设不返回void
)?
既然你正在阅读文档,为什么不检查'invoke'本身的引理? – harold