في الإصدار الأول ، كان لديك تعليمات بعد تعليمات Terminator ، والتي كانت غير صحيحة نظرًا لأن هذه التعليمات لم يتم تنفيذها مطلقًا.
في الإصدار الثاني (لم يرد ذكره هنا ، يرجى استخدام StackOverflow بدلاً من رسائل البريد الإلكتروني الخاصة ...) يستخدمون نسبة ٪ (في Inst store) قبل تحديده (٪ call = ...) ، لذلك من الواضح أن تعريفك لا يسبق كل شيء استخدم ... ولكن كما قلت ، يجب ألا يكون المتجر بعد الاستدعاء ، لأن الاستدعاء هو المنهي.
الحل هو وضع متجرك في الكتلة الأساسية التالية (يمكنك إنشاء واحدة جديدة):
%invoke.cont
%call = invoke i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* @loadedFile)
to label %invoke.cont2_before unwind label %lpad1
invoke.cont2_before: ; preds = %invoke.cont
store i8* %call, i8** %reduced_var
br label %invoke.cont2
invoke.cont2: ; preds = %main_block, %invoke.cont2_before
%call4 = invoke i32 @_ZStorSt13_Ios_OpenmodeS_(i32 8, i32 16)
to label %invoke.cont3_before unwind label %lpad1
إلخ...