<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi.<div><br></div><div>I have a test program:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div>class A {</div></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>int A;</div><div><div>public:</div></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>virtual void test ( int x ) = 0;</div><div><div>};</div></div><div><div><br></div></div><div><div>class B : public A {</div></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>int B;</div><div><div>public:</div></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>void test ( int x ) {};</div><div><div>};</div></div><div><div><br></div></div><div><div>int main() {<span class="Apple-tab-span" style="white-space:pre">       </span></div></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>A *a = new B();<span class="Apple-tab-span" style="white-space:pre">     </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>a->test(1);</div><div><div>}</div></div></blockquote><div><br></div><div>We have call site CS: "a->test(1);". CS.getCalledFunction() - return NULL, so we can say that this call site is virtual. My optimization determines, that in this call site B::test() should be called. </div><div>I've tried to use CSn.setCalledFunction(F) (where F is B::test()), but I've got this:</div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><span class="Apple-tab-span" style="white-space:pre">   </span></div>Check function __cxa_pure_virtual</div><div><div>Call parameter type does not match function signature!</div></div><div><div>  %6 = load %class.A** %a, align 4</div></div><div><div> %class.B*  call void @_ZN1B4testEi(%class.A* %6, i32 1)</div></div></blockquote><div><br></div><div>Ok! I've tried to change the first %class.A %6 to %class.B %6 by "FirstArgumentOfCS->get()->mutateType(FunctionFirstArgement->getType());", but in this case I've got this:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><span class="Apple-tab-span" style="white-space:pre">   </span></div>Check function __cxa_pure_virtual</div><div><div>Load result type does not match pointer operand type!</div></div><div><div>  %6 = load %class.A** %a, align 4</div></div><div><div> %class.A*Instruction does not dominate all uses!</div></div><div><div>  %6 = load %class.A** %a, align 4</div></div><div><div>  %7 = bitcast %class.B* %6 to void (%class.A*, i32)***</div></div><div><div>Instruction does not dominate all uses!</div></div><div><div>  %7 = bitcast %class.B* %6 to void (%class.A*, i32)***</div></div><div><div>  %8 = load void (%class.A*, i32)*** %7</div></div><div><div>Instruction does not dominate all uses!</div></div><div><div>  %8 = load void (%class.A*, i32)*** %7</div></div><div><div>  %9 = getelementptr inbounds void (%class.A*, i32)** %8, i64 0</div></div><div><div>Instruction does not dominate all uses!</div></div><div><div>  %9 = getelementptr inbounds void (%class.A*, i32)** %8, i64 0</div></div><div><div>  %10 = load void (%class.A*, i32)** %9</div></div><div><div>Instruction does not dominate all uses!</div></div><div><div>  %6 = load %class.A** %a, align 4</div></div><div><div>  call void @_ZN1B4testEi(%class.B* %6, i32 1)</div></div></blockquote><div><br></div><div>Can you tell me how correctly I can use CSn.setCalledFunction(F) in my case. Thanks!</div><div><br></div><div><br><div><div><div apple-content-edited="true">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div></div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Yours sincerely,</div><div>Kadysev Mikhail</div></div></div>
</div>
<br></div></div></div></body></html>