<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">I have implemented a recursive loop to go through all the user of a global variable but I have one issue left.</div><div class=""><br class=""></div><div class="">Depending the code, the global variable is using itself: </div><div class=""><br class=""></div><div class=""><i class="">@sSelectedAccount = internal constant %struct.KVObserver { %0* bitcast (%struct.__NSConstantString_tag* @_unnamed_cfstring_.744 to %0*), i8* bitcast (%struct.KVObserver* @sSelectedAccount to i8*), i32 3 }, align 4</i></div><div class=""><br class=""></div><div class="">With the IR code above, I am stuck in an infinite loop:</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>1) The global <i class="">sSelectedAccount</i> has the following user: "<i class="">i8* bitcast (%struct.KVObserver* @sSelectedAccount to i8*)</i>"</div><div class=""><span class="Apple-tab-span" style="white-space:pre"> </span>2) The bit cast has the following user: "<i class="">%struct.KVObserver { %"type 0x7ff164027360"* bitcast (%struct.__NSConstantString_tag* @_unnamed_cfstring_.744 to %"type 0x7ff164027360"*), i8* bitcast (%struct.KVObserver* @sSelectedAccount to i8*), i32 3 }</i>"</div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>3) The previous has the user <i class="">sSelectedAccount</i> -> so this create the infinite loop.</div><div class=""><br class=""></div><div class="">I was looking for a way to detect the loop and I think there is two possibilities:</div><div class=""><span class="Apple-tab-span" style="white-space:pre">       </span>- from the global value, iterate through all the element and find the loop, but this need a lot of cast and another recursive loop (need to handle ConstantStruct, ConstantExpr, ConstantArray, etc.) Does anyone know if there is an easier way to do this?</div><div class=""><span class="Apple-tab-span" style="white-space:pre">      </span>-during the recursive loop, can I find the “main” global value? e.g: when I am on "<i class="">i8* bitcast (%struct.KVObserver* @sSelectedAccount to i8*)</i>”, how can I get the global variable <i class="">sSelectedAccount </i>?</div><div class=""><br class=""></div><div class="">Greetings,</div><div class=""><br class=""></div><div class="">Johan</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class="">
<br class=""></div></body></html>