
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: void undefined_symbol(Errors * this, Symbol * sym, string * location)
    */

void __thiscall gold::Errors::undefined_symbol(Errors *this,Symbol *sym,string *location)

{
  Lock *pLVar1;
  ulong uVar2;
  _Hash_node_base *p_Var3;
  pointer pcVar4;
  _func_int_varargs *p_Var5;
  _Alloc_hider _Var6;
  bool bVar7;
  int *piVar8;
  undefined8 uVar9;
  char *pcVar10;
  char *pcVar11;
  __node_type *__node;
  _Node_iterator_base<std::pair<const_gold::Symbol*_const,_int>,_false> _Var12;
  undefined4 extraout_var;
  long lVar13;
  int iVar14;
  ulong __bkt;
  Symbol *pSVar15;
  byte *pbVar16;
  __bucket_type p_Var17;
  byte *pbVar18;
  __bucket_type p_Var19;
  undefined1 uVar20;
  undefined1 uVar21;
  byte bVar22;
  string local_58;
  
  bVar22 = 0;
  bVar7 = Initialize_lock::initialize(&this->initialize_lock_);
  if (!bVar7) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");
  }
  pLVar1 = this->lock_;
  (*pLVar1->lock_->_vptr_Lock_impl[2])();
  uVar2 = (this->undefined_symbols_)._M_h._M_bucket_count;
  __bkt = (ulong)sym % uVar2;
  p_Var19 = (this->undefined_symbols_)._M_h._M_buckets[__bkt];
  if (p_Var19 != (__bucket_type)0x0) {
    pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;
    p_Var3 = p_Var19->_M_nxt;
    while (p_Var17 = p_Var3, pSVar15 != sym) {
      p_Var3 = p_Var17->_M_nxt;
      if ((p_Var3 == (_Hash_node_base *)0x0) ||
         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))
      goto LAB_00185ac0;
    }
    _Var12._M_cur = (__node_type *)p_Var19->_M_nxt;
    if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;
  }
LAB_00185ac0:
                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */
  __node = (__node_type *)operator_new(0x18);
  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).
  super__Hash_node_base._M_nxt = (_Hash_node_base *)0x0;
  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.
  _M_storage.__align = (anon_struct_8_0_00000001_for___align)sym;
  *(undefined4 *)
   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).
           _M_storage._M_storage + 8) = 0;
  _Var12._M_cur =
       (__node_type *)
       std::
       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>
       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);
LAB_00185928:
  piVar8 = (int *)((long)&((_Var12._M_cur)->
                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).
                          _M_storage._M_storage + 8);
  iVar14 = *piVar8 + 1;
  *piVar8 = iVar14;
  if (4 < iVar14) {
    (*pLVar1->lock_->_vptr_Lock_impl[3])();
    return;
  }
  if (parameters->options_ == (General_options *)0x0) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */
    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");
  }
  if ((parameters->options_->warn_unresolved_symbols_).value == false) {
    this->error_count_ = this->error_count_ + 1;
    uVar9 = gettext("error");
  }
  else {
    this->warning_count_ = this->warning_count_ + 1;
    uVar9 = gettext("warning");
  }
  (*pLVar1->lock_->_vptr_Lock_impl[3])();
  pcVar11 = sym->version_;
  if (pcVar11 == (char *)0x0) {
    Symbol::demangled_name(&local_58,sym);
    _Var6._M_p = local_58._M_dataplus._M_p;
    pcVar4 = (location->_M_dataplus)._M_p;
    pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");
                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */
    fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);
  }
  else {
    Symbol::demangled_name(&local_58,sym);
    _Var6._M_p = local_58._M_dataplus._M_p;
    pcVar4 = (location->_M_dataplus)._M_p;
    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");
                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */
    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);
  }
  uVar20 = local_58._M_dataplus._M_p < &local_58.field_2;
  uVar21 = (anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9
            *)local_58._M_dataplus._M_p == &local_58.field_2;
  if (!(bool)uVar21) {
    operator_delete(local_58._M_dataplus._M_p);
  }
  pcVar11 = program_name;
  lVar13 = 4;
  pbVar16 = (byte *)0x3883dd;
  pbVar18 = (byte *)sym->name_;
  do {
    if (lVar13 == 0) break;
    lVar13 = lVar13 + -1;
    uVar20 = *pbVar16 < *pbVar18;
    uVar21 = *pbVar16 == *pbVar18;
    pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;
    pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;
  } while ((bool)uVar21);
  if ((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20) {
    pcVar10 = (char *)gettext(
                             "%s: the vtable symbol may be undefined because the class is missing its key function"
                             );
    gold_info(pcVar10,pcVar11);
  }
  if ((sym->field_0x3a & 7) == 0) {
    p_Var5 = ((sym->u1_).object)->_vptr_Object[5];
    if (p_Var5 != Object::do_pluginobj) {
      iVar14 = (*p_Var5)();
      pcVar11 = program_name;
      if (CONCAT44(extraout_var,iVar14) != 0) {
        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");
        gold_info(pcVar10,pcVar11);
        return;
      }
    }
  }
  return;
}



void FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)

{
  undefined8 *puVar1;
  long *plVar2;
  undefined1 *puVar3;
  char cVar4;
  undefined8 uVar5;
  char *pcVar6;
  undefined8 *puVar7;
  undefined8 uVar8;
  long lVar9;
  int iVar10;
  ulong uVar11;
  byte *pbVar12;
  long *plVar13;
  byte *pbVar14;
  long *plVar15;
  undefined1 uVar16;
  undefined1 uVar17;
  byte bVar18;
  undefined1 *local_58 [2];
  undefined1 auStack_48 [24];
  
  bVar18 = 0;
  cVar4 = FUN_00190ae0(param_1 + 0x10);
  if (cVar4 == '\0') {
                    /* WARNING: Subroutine does not return */
    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");
  }
  puVar1 = *(undefined8 **)(param_1 + 8);
  (**(code **)(*(long *)*puVar1 + 0x10))();
  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);
  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);
  if (plVar15 != (long *)0x0) {
    puVar7 = (undefined8 *)((long *)*plVar15)[1];
    plVar2 = (long *)*plVar15;
    do {
      plVar13 = plVar2;
      if (puVar7 == param_2) {
        lVar9 = *plVar15;
        if (lVar9 != 0) goto LAB_00185928;
        break;
      }
      plVar2 = (long *)*plVar13;
      if (plVar2 == (long *)0x0) break;
      puVar7 = (undefined8 *)plVar2[1];
      plVar15 = plVar13;
    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));
  }
                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */
  puVar7 = (undefined8 *)FUN_002ee780(0x18);
  *puVar7 = 0;
  puVar7[1] = param_2;
  *(undefined4 *)(puVar7 + 2) = 0;
  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);
LAB_00185928:
  iVar10 = *(int *)(lVar9 + 0x10) + 1;
  *(int *)(lVar9 + 0x10) = iVar10;
  if (4 < iVar10) {
    (**(code **)(*(long *)*puVar1 + 0x18))();
    return;
  }
  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */
    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");
  }
  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {
    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;
    uVar5 = gettext("error");
  }
  else {
    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;
    uVar5 = gettext("warning");
  }
  (**(code **)(*(long *)*puVar1 + 0x18))();
  lVar9 = param_2[1];
  if (lVar9 == 0) {
    FUN_00283d10(local_58,param_2);
    puVar3 = local_58[0];
    uVar8 = *param_3;
    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");
                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */
    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);
  }
  else {
    FUN_00283d10(local_58,param_2);
    puVar3 = local_58[0];
    uVar8 = *param_3;
    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");
                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */
    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);
  }
  uVar16 = local_58[0] < auStack_48;
  uVar17 = local_58[0] == auStack_48;
  if (!(bool)uVar17) {
    FUN_002eff50();
  }
  uVar5 = DAT_004589b8;
  lVar9 = 4;
  pbVar12 = (byte *)0x3883dd;
  pbVar14 = (byte *)*param_2;
  do {
    if (lVar9 == 0) break;
    lVar9 = lVar9 + -1;
    uVar16 = *pbVar12 < *pbVar14;
    uVar17 = *pbVar12 == *pbVar14;
    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;
    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;
  } while ((bool)uVar17);
  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {
    uVar8 = gettext(
                   "%s: the vtable symbol may be undefined because the class is missing its key function"
                   );
    FUN_001857e0(uVar8,uVar5);
  }
  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {
    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {
      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();
      uVar5 = DAT_004589b8;
      if (lVar9 != 0) {
        uVar8 = gettext("%s: the symbol should have been defined by a plugin");
        FUN_001857e0(uVar8,uVar5);
        return;
      }
    }
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
MOV R13,RDX
PUSH R12
PUSH RBP
MOV RBP,RDI
ADD RDI,0x10
PUSH RBX
MOV RBX,RSI
SUB RSP,0x28
CALL 0x00190ae0
TEST AL,AL
JZ 0x00185b3a
MOV R12,qword ptr [RBP + 0x8]
MOV RDI,qword ptr [R12]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x10]
MOV RCX,qword ptr [RBP + 0x40]
MOV RAX,RBX
XOR EDX,EDX
DIV RCX
MOV RAX,qword ptr [RBP + 0x38]
MOV R8,qword ptr [RAX + RDX*0x8]
MOV R14,RDX
TEST R8,R8
JZ 0x00185ac0
MOV RDI,qword ptr [R8]
MOV RSI,qword ptr [RDI + 0x8]
JMP 0x00185917
MOV RAX,qword ptr [RDI]
TEST RAX,RAX
JZ 0x00185ac0
MOV RSI,qword ptr [RAX + 0x8]
MOV R8,RDI
XOR EDX,EDX
MOV RDI,RAX
MOV RAX,RSI
DIV RCX
CMP R14,RDX
JNZ 0x00185ac0
CMP RSI,RBX
JNZ 0x001858f0
MOV RAX,qword ptr [R8]
TEST RAX,RAX
JZ 0x00185ac0
ADD RAX,0x10
MOV ECX,dword ptr [RAX]
LEA EDX,[RCX + 0x1]
MOV dword ptr [RAX],EDX
CMP EDX,0x4
JG 0x00185a40
MOV RAX,qword ptr [0x004586c8]
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x00185b52
CMP byte ptr [RAX + 0x7421],0x0
JNZ 0x00185a28
ADD dword ptr [RBP + 0x30],0x1
LEA RDI,[0x3a991e]
CALL 0x00149320
MOV R14,RAX
MOV RDI,qword ptr [R12]
MOV RBP,RSP
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
MOV R12,qword ptr [RBX + 0x8]
MOV RSI,RBX
MOV RDI,RBP
TEST R12,R12
JZ 0x00185a88
CALL 0x00283d10
MOV R15,qword ptr [RSP]
MOV R13,qword ptr [R13]
LEA RDI,[0x389110]
CALL 0x00149320
MOV RDI,qword ptr [0x00458860]
MOV R9,R12
MOV RCX,R14
MOV RSI,RAX
MOV R8,R15
MOV RDX,R13
XOR EAX,EAX
CALL 0x001499f0
MOV RDI,qword ptr [RSP]
ADD RBP,0x10
CMP RDI,RBP
JZ 0x001859d8
CALL 0x002eff50
MOV RDI,qword ptr [RBX]
MOV ECX,0x4
LEA RSI,[0x3883dd]
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x00185a60
TEST byte ptr [RBX + 0x3a],0x7
JNZ 0x00185a13
MOV RDI,qword ptr [RBX + 0x10]
LEA RDX,[0x170d00]
MOV RAX,qword ptr [RDI]
MOV RAX,qword ptr [RAX + 0x28]
CMP RAX,RDX
JNZ 0x00185b00
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
ADD dword ptr [RBP + 0x34],0x1
LEA RDI,[0x390fd5]
CALL 0x00149320
MOV R14,RAX
JMP 0x00185970
MOV RDI,qword ptr [R12]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x18]
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RBP,qword ptr [0x004589b8]
LEA RDI,[0x389148]
CALL 0x00149320
MOV RDI,RAX
MOV RSI,RBP
XOR EAX,EAX
CALL 0x001857e0
JMP 0x001859f2
CALL 0x00283d10
MOV R15,qword ptr [RSP]
MOV R12,qword ptr [R13]
LEA RDI,[0x3890e8]
CALL 0x00149320
MOV RDI,qword ptr [0x00458860]
MOV RCX,R14
MOV RSI,RAX
MOV R8,R15
MOV RDX,R12
XOR EAX,EAX
CALL 0x001499f0
JMP 0x001859c6
MOV EDI,0x18
CALL 0x002ee780
MOV qword ptr [RAX],0x0
MOV RCX,RAX
MOV RDX,RBX
MOV RSI,R14
MOV qword ptr [RAX + 0x8],RBX
LEA RDI,[RBP + 0x38]
MOV R8D,0x1
MOV dword ptr [RAX + 0x10],0x0
CALL 0x001866c0
JMP 0x00185928
CALL RAX
TEST RAX,RAX
JZ 0x00185a13
MOV RBX,qword ptr [0x004589b8]
LEA RDI,[0x3891a0]
CALL 0x00149320
MOV RDI,RAX
MOV RSI,RBX
XOR EAX,EAX
CALL 0x001857e0
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
LEA RDX,[0x3891f0]
MOV ESI,0xa9
LEA RDI,[0x3890d3]
CALL 0x0018dcf0
LEA RDX,[0x3891e8]
MOV ESI,0x5c
LEA RDI,[0x380279]
CALL 0x0018dcf0
(translation_unit "void FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)" identifier (parameter_list "(long param_1,undefined8 *param_2,undefined8 *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "byte *pbVar12;" type_identifier (pointer_declarator "*pbVar12" * identifier) ;) (declaration "long *plVar13;" (sized_type_specifier "long" long) (pointer_declarator "*plVar13" * identifier) ;) (declaration "byte *pbVar14;" type_identifier (pointer_declarator "*pbVar14" * identifier) ;) (declaration "long *plVar15;" (sized_type_specifier "long" long) (pointer_declarator "*plVar15" * identifier) ;) (declaration "undefined1 uVar16;" type_identifier identifier ;) (declaration "undefined1 uVar17;" type_identifier identifier ;) (declaration "byte bVar18;" type_identifier identifier ;) (declaration "undefined1 *local_58 [2];" type_identifier (pointer_declarator "*local_58 [2]" * (array_declarator "local_58 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 auStack_48 [24];" type_identifier (array_declarator "auStack_48 [24]" identifier [ number_literal ]) ;) (expression_statement "bVar18 = 0;" (assignment_expression "bVar18 = 0" identifier = number_literal) ;) (expression_statement "cVar4 = FUN_00190ae0(param_1 + 0x10);" (assignment_expression "cVar4 = FUN_00190ae0(param_1 + 0x10)" identifier = (call_expression "FUN_00190ae0(param_1 + 0x10)" identifier (argument_list "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) ;) (if_statement "if (cVar4 == '\0') {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" { comment (expression_statement "FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");" (call_expression "FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol")" identifier (argument_list "("../../gold/errors.cc",0xa9,"undefined_symbol")" ( (string_literal ""../../gold/errors.cc"" " string_content ") , number_literal , (string_literal ""undefined_symbol"" " string_content ") ))) ;) })) (expression_statement "puVar1 = *(undefined8 **)(param_1 + 8);" (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 8)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 8)" * (cast_expression "(undefined8 **)(param_1 + 8)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "(**(code **)(*(long *)*puVar1 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x10)" ( (binary_expression "*(long *)*puVar1 + 0x10" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);" (assignment_expression "uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40)" identifier = (binary_expression "(ulong)param_2 % *(ulong *)(param_1 + 0x40)" (cast_expression "(ulong)param_2" ( (type_descriptor "ulong" type_identifier) ) identifier) % (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))))) ;) (expression_statement "plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);" (assignment_expression "plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" identifier = (pointer_expression "*(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" * (cast_expression "(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_1 + 0x38) + uVar11 * 8)" ( (binary_expression "*(long *)(param_1 + 0x38) + uVar11 * 8" (pointer_expression "*(long *)(param_1 + 0x38)" * (cast_expression "(long *)(param_1 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) + (binary_expression "uVar11 * 8" identifier * number_literal)) ))))) ;) (if_statement "if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }" if (parenthesized_expression "(plVar15 != (long *)0x0)" ( (binary_expression "plVar15 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }" { (expression_statement "puVar7 = (undefined8 *)((long *)*plVar15)[1];" (assignment_expression "puVar7 = (undefined8 *)((long *)*plVar15)[1]" identifier = (cast_expression "(undefined8 *)((long *)*plVar15)[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "((long *)*plVar15)[1]" (parenthesized_expression "((long *)*plVar15)" ( (cast_expression "(long *)*plVar15" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar15" * identifier)) )) [ number_literal ]))) ;) (expression_statement "plVar2 = (long *)*plVar15;" (assignment_expression "plVar2 = (long *)*plVar15" identifier = (cast_expression "(long *)*plVar15" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar15" * identifier))) ;) (do_statement "do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));" do (compound_statement "{\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    }" { (expression_statement "plVar13 = plVar2;" (assignment_expression "plVar13 = plVar2" identifier = identifier) ;) (if_statement "if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }" if (parenthesized_expression "(puVar7 == param_2)" ( (binary_expression "puVar7 == param_2" identifier == identifier) )) (compound_statement "{\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }" { (expression_statement "lVar9 = *plVar15;" (assignment_expression "lVar9 = *plVar15" identifier = (pointer_expression "*plVar15" * identifier)) ;) (if_statement "if (lVar9 != 0) goto LAB_00185928;" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00185928;" goto statement_identifier ;)) (break_statement "break;" break ;) })) (expression_statement "plVar2 = (long *)*plVar13;" (assignment_expression "plVar2 = (long *)*plVar13" identifier = (cast_expression "(long *)*plVar13" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar13" * identifier))) ;) (if_statement "if (plVar2 == (long *)0x0) break;" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "puVar7 = (undefined8 *)plVar2[1];" (assignment_expression "puVar7 = (undefined8 *)plVar2[1]" identifier = (cast_expression "(undefined8 *)plVar2[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ]))) ;) (expression_statement "plVar15 = plVar13;" (assignment_expression "plVar15 = plVar13" identifier = identifier) ;) }) while (parenthesized_expression "(uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40))" ( (binary_expression "uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40)" identifier == (binary_expression "(ulong)puVar7 % *(ulong *)(param_1 + 0x40)" (cast_expression "(ulong)puVar7" ( (type_descriptor "ulong" type_identifier) ) identifier) % (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))))) )) ;) })) comment (expression_statement "puVar7 = (undefined8 *)FUN_002ee780(0x18);" (assignment_expression "puVar7 = (undefined8 *)FUN_002ee780(0x18)" identifier = (cast_expression "(undefined8 *)FUN_002ee780(0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ee780(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7[1] = param_2;" (assignment_expression "puVar7[1] = param_2" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + 2) = 0;" (assignment_expression "*(undefined4 *)(puVar7 + 2) = 0" (pointer_expression "*(undefined4 *)(puVar7 + 2)" * (cast_expression "(undefined4 *)(puVar7 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 2)" ( (binary_expression "puVar7 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);" (assignment_expression "lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1)" identifier = (call_expression "FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1)" identifier (argument_list "(param_1 + 0x38,uVar11,param_2,puVar7,1)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) , identifier , identifier , identifier , number_literal )))) ;) (labeled_statement "LAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;" statement_identifier : (expression_statement "iVar10 = *(int *)(lVar9 + 0x10) + 1;" (assignment_expression "iVar10 = *(int *)(lVar9 + 0x10) + 1" identifier = (binary_expression "*(int *)(lVar9 + 0x10) + 1" (pointer_expression "*(int *)(lVar9 + 0x10)" * (cast_expression "(int *)(lVar9 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) )))) + number_literal)) ;)) (expression_statement "*(int *)(lVar9 + 0x10) = iVar10;" (assignment_expression "*(int *)(lVar9 + 0x10) = iVar10" (pointer_expression "*(int *)(lVar9 + 0x10)" * (cast_expression "(int *)(lVar9 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) )))) = identifier) ;) (if_statement "if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }" if (parenthesized_expression "(4 < iVar10)" ( (binary_expression "4 < iVar10" number_literal < identifier) )) (compound_statement "{\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }" { (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x18)" ( (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (if_statement "if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" if (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" { comment comment (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;) })) (if_statement "if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" if (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0')" ( (binary_expression "*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" * (cast_expression "(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }" { (expression_statement "*(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;" (assignment_expression "*(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1" (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x30) + 1" (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar5 = gettext("error");" (assignment_expression "uVar5 = gettext("error")" identifier = (call_expression "gettext("error")" identifier (argument_list "("error")" ( (string_literal ""error"" " string_content ") )))) ;) }) (else_clause "else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" else (compound_statement "{\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" { (expression_statement "*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;" (assignment_expression "*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1" (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x34) + 1" (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar5 = gettext("warning");" (assignment_expression "uVar5 = gettext("warning")" identifier = (call_expression "gettext("warning")" identifier (argument_list "("warning")" ( (string_literal ""warning"" " string_content ") )))) ;) }))) (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x18)" ( (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "lVar9 = param_2[1];" (assignment_expression "lVar9 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }" { (expression_statement "FUN_00283d10(local_58,param_2);" (call_expression "FUN_00283d10(local_58,param_2)" identifier (argument_list "(local_58,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = local_58[0];" (assignment_expression "puVar3 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = *param_3;" (assignment_expression "uVar8 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");" (assignment_expression "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n")" identifier = (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\'\n")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: %s: undefined reference to \'%s\'\n")" identifier (argument_list "("%s: %s: undefined reference to \'%s\'\n")" ( (string_literal ""%s: %s: undefined reference to \'%s\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) comment (expression_statement "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);" (call_expression "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3)" identifier (argument_list "(stderr,pcVar6,uVar8,uVar5,puVar3)" ( identifier , identifier , identifier , identifier , identifier ))) ;) }) (else_clause "else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" else (compound_statement "{\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" { (expression_statement "FUN_00283d10(local_58,param_2);" (call_expression "FUN_00283d10(local_58,param_2)" identifier (argument_list "(local_58,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = local_58[0];" (assignment_expression "puVar3 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = *param_3;" (assignment_expression "uVar8 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");" (assignment_expression "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" identifier = (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" identifier (argument_list "("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" ( (string_literal ""%s: %s: undefined reference to \'%s\', version \'%s\'\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) comment (expression_statement "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);" (call_expression "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9)" identifier (argument_list "(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) }))) (expression_statement "uVar16 = local_58[0] < auStack_48;" (assignment_expression "uVar16 = local_58[0] < auStack_48" identifier = (binary_expression "local_58[0] < auStack_48" (subscript_expression "local_58[0]" identifier [ number_literal ]) < identifier)) ;) (expression_statement "uVar17 = local_58[0] == auStack_48;" (assignment_expression "uVar17 = local_58[0] == auStack_48" identifier = (binary_expression "local_58[0] == auStack_48" (subscript_expression "local_58[0]" identifier [ number_literal ]) == identifier)) ;) (if_statement "if (!(bool)uVar17) {\n    FUN_002eff50();\n  }" if (parenthesized_expression "(!(bool)uVar17)" ( (unary_expression "!(bool)uVar17" ! (cast_expression "(bool)uVar17" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    FUN_002eff50();\n  }" { (expression_statement "FUN_002eff50();" (call_expression "FUN_002eff50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar5 = DAT_004589b8;" (assignment_expression "uVar5 = DAT_004589b8" identifier = identifier) ;) (expression_statement "lVar9 = 4;" (assignment_expression "lVar9 = 4" identifier = number_literal) ;) (expression_statement "pbVar12 = (byte *)0x3883dd;" (assignment_expression "pbVar12 = (byte *)0x3883dd" identifier = (cast_expression "(byte *)0x3883dd" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pbVar14 = (byte *)*param_2;" (assignment_expression "pbVar14 = (byte *)*param_2" identifier = (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (do_statement "do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);" do (compound_statement "{\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  }" { (if_statement "if (lVar9 == 0) break;" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar9 = lVar9 + -1;" (assignment_expression "lVar9 = lVar9 + -1" identifier = (binary_expression "lVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *pbVar12 < *pbVar14;" (assignment_expression "uVar16 = *pbVar12 < *pbVar14" identifier = (binary_expression "*pbVar12 < *pbVar14" (pointer_expression "*pbVar12" * identifier) < (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "uVar17 = *pbVar12 == *pbVar14;" (assignment_expression "uVar17 = *pbVar12 == *pbVar14" identifier = (binary_expression "*pbVar12 == *pbVar14" (pointer_expression "*pbVar12" * identifier) == (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;" (assignment_expression "pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1" identifier = (binary_expression "pbVar12 + (ulong)bVar18 * -2 + 1" (binary_expression "pbVar12 + (ulong)bVar18 * -2" identifier + (binary_expression "(ulong)bVar18 * -2" (cast_expression "(ulong)bVar18" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;" (assignment_expression "pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1" identifier = (binary_expression "pbVar14 + (ulong)bVar18 * -2 + 1" (binary_expression "pbVar14 + (ulong)bVar18 * -2" identifier + (binary_expression "(ulong)bVar18 * -2" (cast_expression "(ulong)bVar18" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar17)" ( (cast_expression "(bool)uVar17" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (if_statement "if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }" if (parenthesized_expression "((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16)" ( (binary_expression "(!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16" (parenthesized_expression "(!(bool)uVar16 && !(bool)uVar17)" ( (binary_expression "!(bool)uVar16 && !(bool)uVar17" (unary_expression "!(bool)uVar16" ! (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar17" ! (cast_expression "(bool)uVar17" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }" { (expression_statement "uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );" (assignment_expression "uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" identifier = (call_expression "gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" identifier (argument_list "(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" ( (string_literal ""%s: the vtable symbol may be undefined because the class is missing its key function"" " string_content ") )))) ;) (expression_statement "FUN_001857e0(uVar8,uVar5);" (call_expression "FUN_001857e0(uVar8,uVar5)" identifier (argument_list "(uVar8,uVar5)" ( identifier , identifier ))) ;) })) (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }" if (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" ( (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" * (cast_expression "(byte *)((long)param_2 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3a)" ( (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }" { (if_statement "if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }" if (parenthesized_expression "(*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00)" ( (binary_expression "*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00" (pointer_expression "*(code **)(*(long *)param_2[2] + 0x28)" * (cast_expression "(code **)(*(long *)param_2[2] + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_2[2] + 0x28)" ( (binary_expression "*(long *)param_2[2] + 0x28" (pointer_expression "*(long *)param_2[2]" * (cast_expression "(long *)param_2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[2]" identifier [ number_literal ]))) + number_literal) )))) != identifier) )) (compound_statement "{\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }" { (expression_statement "lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();" (assignment_expression "lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))()" identifier = (call_expression "(**(code **)(*(long *)param_2[2] + 0x28))()" (parenthesized_expression "(**(code **)(*(long *)param_2[2] + 0x28))" ( (pointer_expression "**(code **)(*(long *)param_2[2] + 0x28)" * (pointer_expression "*(code **)(*(long *)param_2[2] + 0x28)" * (cast_expression "(code **)(*(long *)param_2[2] + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_2[2] + 0x28)" ( (binary_expression "*(long *)param_2[2] + 0x28" (pointer_expression "*(long *)param_2[2]" * (cast_expression "(long *)param_2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[2]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "uVar5 = DAT_004589b8;" (assignment_expression "uVar5 = DAT_004589b8" identifier = identifier) ;) (if_statement "if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }" { (expression_statement "uVar8 = gettext("%s: the symbol should have been defined by a plugin");" (assignment_expression "uVar8 = gettext("%s: the symbol should have been defined by a plugin")" identifier = (call_expression "gettext("%s: the symbol should have been defined by a plugin")" identifier (argument_list "("%s: the symbol should have been defined by a plugin")" ( (string_literal ""%s: the symbol should have been defined by a plugin"" " string_content ") )))) ;) (expression_statement "FUN_001857e0(uVar8,uVar5);" (call_expression "FUN_001857e0(uVar8,uVar5)" identifier (argument_list "(uVar8,uVar5)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": Some values do not have unique names */\n/* DWARF original prototype: void undefined_symbol(Errors * this, Symbol * sym, string * location)\n    */\n\nvoid __thiscall gold::Errors::undefined_symbol(Errors *this,Symbol *sym,string *location)\n\n{\n  Lock *pLVar1;\n  ulong uVar2;\n  _Hash_node_base *p_Var3;\n  pointer pcVar4;\n  _func_int_varargs *p_Var5;\n  _Alloc_hider _Var6;\n  bool bVar7;\n  int *piVar8;\n  undefined8 uVar9;\n  char *pcVar10;\n  char *pcVar11;\n  __node_type *__node;\n  _Node_iterator_base<std::pair<const_gold::Symbol*_const,_int>,_false> _Var12;\n  undefined4 extraout_var;\n  long lVar13;\n  int iVar14;\n  ulong __bkt;\n  Symbol *pSVar15;\n  byte *pbVar16;\n  __bucket_type p_Var17;\n  byte *pbVar18;\n  __bucket_type p_Var19;\n  undefined1 uVar20;\n  undefined1 uVar21;\n  byte bVar22;\n  string local_58;\n  \n  bVar22 = 0;\n  bVar7 = Initialize_lock::initialize(&this->initialize_lock_);\n  if (!bVar7) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  pLVar1 = this->lock_;\n  (*pLVar1->lock_->_vptr_Lock_impl[2])();\n  uVar2 = (this->undefined_symbols_)._M_h._M_bucket_count;\n  __bkt = (ulong)sym % uVar2;\n  p_Var19 = (this->undefined_symbols_)._M_h._M_buckets[__bkt];\n  if (p_Var19 != (__bucket_type)0x0) {\n    pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;\n    p_Var3 = p_Var19->_M_nxt;\n    while (p_Var17 = p_Var3, pSVar15 != sym) {\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }\n    _Var12._M_cur = (__node_type *)p_Var19->_M_nxt;\n    if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;\n  }\nLAB_00185ac0:\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  __node = (__node_type *)operator_new(0x18);\n  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base._M_nxt = (_Hash_node_base *)0x0;\n  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage.__align = (anon_struct_8_0_00000001_for___align)sym;\n  *(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8) = 0;\n  _Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);\nLAB_00185928:\n  piVar8 = (int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8);\n  iVar14 = *piVar8 + 1;\n  *piVar8 = iVar14;\n  if (4 < iVar14) {\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    return;\n  }\n  if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }\n  if ((parameters->options_->warn_unresolved_symbols_).value == false) {\n    this->error_count_ = this->error_count_ + 1;\n    uVar9 = gettext("error");\n  }\n  else {\n    this->warning_count_ = this->warning_count_ + 1;\n    uVar9 = gettext("warning");\n  }\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  pcVar11 = sym->version_;\n  if (pcVar11 == (char *)0x0) {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);\n  }\n  else {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);\n  }\n  uVar20 = local_58._M_dataplus._M_p < &local_58.field_2;\n  uVar21 = (anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2;\n  if (!(bool)uVar21) {\n    operator_delete(local_58._M_dataplus._M_p);\n  }\n  pcVar11 = program_name;\n  lVar13 = 4;\n  pbVar16 = (byte *)0x3883dd;\n  pbVar18 = (byte *)sym->name_;\n  do {\n    if (lVar13 == 0) break;\n    lVar13 = lVar13 + -1;\n    uVar20 = *pbVar16 < *pbVar18;\n    uVar21 = *pbVar16 == *pbVar18;\n    pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;\n    pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;\n  } while ((bool)uVar21);\n  if ((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20) {\n    pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             );\n    gold_info(pcVar10,pcVar11);\n  }\n  if ((sym->field_0x3a & 7) == 0) {\n    p_Var5 = ((sym->u1_).object)->_vptr_Object[5];\n    if (p_Var5 != Object::do_pluginobj) {\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" comment comment comment (function_definition "void __thiscall gold::Errors::undefined_symbol(Errors *this,Symbol *sym,string *location)\n\n{\n  Lock *pLVar1;\n  ulong uVar2;\n  _Hash_node_base *p_Var3;\n  pointer pcVar4;\n  _func_int_varargs *p_Var5;\n  _Alloc_hider _Var6;\n  bool bVar7;\n  int *piVar8;\n  undefined8 uVar9;\n  char *pcVar10;\n  char *pcVar11;\n  __node_type *__node;\n  _Node_iterator_base<std::pair<const_gold::Symbol*_const,_int>,_false> _Var12;\n  undefined4 extraout_var;\n  long lVar13;\n  int iVar14;\n  ulong __bkt;\n  Symbol *pSVar15;\n  byte *pbVar16;\n  __bucket_type p_Var17;\n  byte *pbVar18;\n  __bucket_type p_Var19;\n  undefined1 uVar20;\n  undefined1 uVar21;\n  byte bVar22;\n  string local_58;\n  \n  bVar22 = 0;\n  bVar7 = Initialize_lock::initialize(&this->initialize_lock_);\n  if (!bVar7) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  pLVar1 = this->lock_;\n  (*pLVar1->lock_->_vptr_Lock_impl[2])();\n  uVar2 = (this->undefined_symbols_)._M_h._M_bucket_count;\n  __bkt = (ulong)sym % uVar2;\n  p_Var19 = (this->undefined_symbols_)._M_h._M_buckets[__bkt];\n  if (p_Var19 != (__bucket_type)0x0) {\n    pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;\n    p_Var3 = p_Var19->_M_nxt;\n    while (p_Var17 = p_Var3, pSVar15 != sym) {\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }\n    _Var12._M_cur = (__node_type *)p_Var19->_M_nxt;\n    if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;\n  }\nLAB_00185ac0:\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  __node = (__node_type *)operator_new(0x18);\n  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base._M_nxt = (_Hash_node_base *)0x0;\n  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage.__align = (anon_struct_8_0_00000001_for___align)sym;\n  *(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8) = 0;\n  _Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);\nLAB_00185928:\n  piVar8 = (int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8);\n  iVar14 = *piVar8 + 1;\n  *piVar8 = iVar14;\n  if (4 < iVar14) {\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    return;\n  }\n  if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }\n  if ((parameters->options_->warn_unresolved_symbols_).value == false) {\n    this->error_count_ = this->error_count_ + 1;\n    uVar9 = gettext("error");\n  }\n  else {\n    this->warning_count_ = this->warning_count_ + 1;\n    uVar9 = gettext("warning");\n  }\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  pcVar11 = sym->version_;\n  if (pcVar11 == (char *)0x0) {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);\n  }\n  else {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);\n  }\n  uVar20 = local_58._M_dataplus._M_p < &local_58.field_2;\n  uVar21 = (anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2;\n  if (!(bool)uVar21) {\n    operator_delete(local_58._M_dataplus._M_p);\n  }\n  pcVar11 = program_name;\n  lVar13 = 4;\n  pbVar16 = (byte *)0x3883dd;\n  pbVar18 = (byte *)sym->name_;\n  do {\n    if (lVar13 == 0) break;\n    lVar13 = lVar13 + -1;\n    uVar20 = *pbVar16 < *pbVar18;\n    uVar21 = *pbVar16 == *pbVar18;\n    pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;\n    pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;\n  } while ((bool)uVar21);\n  if ((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20) {\n    pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             );\n    gold_info(pcVar10,pcVar11);\n  }\n  if ((sym->field_0x3a & 7) == 0) {\n    p_Var5 = ((sym->u1_).object)->_vptr_Object[5];\n    if (p_Var5 != Object::do_pluginobj) {\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Errors::" identifier : : identifier : :) (function_declarator "undefined_symbol(Errors *this,Symbol *sym,string *location)" identifier (parameter_list "(Errors *this,Symbol *sym,string *location)" ( (parameter_declaration "Errors *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol *sym" type_identifier (pointer_declarator "*sym" * identifier)) , (parameter_declaration "string *location" type_identifier (pointer_declarator "*location" * identifier)) ))) (compound_statement "{\n  Lock *pLVar1;\n  ulong uVar2;\n  _Hash_node_base *p_Var3;\n  pointer pcVar4;\n  _func_int_varargs *p_Var5;\n  _Alloc_hider _Var6;\n  bool bVar7;\n  int *piVar8;\n  undefined8 uVar9;\n  char *pcVar10;\n  char *pcVar11;\n  __node_type *__node;\n  _Node_iterator_base<std::pair<const_gold::Symbol*_const,_int>,_false> _Var12;\n  undefined4 extraout_var;\n  long lVar13;\n  int iVar14;\n  ulong __bkt;\n  Symbol *pSVar15;\n  byte *pbVar16;\n  __bucket_type p_Var17;\n  byte *pbVar18;\n  __bucket_type p_Var19;\n  undefined1 uVar20;\n  undefined1 uVar21;\n  byte bVar22;\n  string local_58;\n  \n  bVar22 = 0;\n  bVar7 = Initialize_lock::initialize(&this->initialize_lock_);\n  if (!bVar7) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  pLVar1 = this->lock_;\n  (*pLVar1->lock_->_vptr_Lock_impl[2])();\n  uVar2 = (this->undefined_symbols_)._M_h._M_bucket_count;\n  __bkt = (ulong)sym % uVar2;\n  p_Var19 = (this->undefined_symbols_)._M_h._M_buckets[__bkt];\n  if (p_Var19 != (__bucket_type)0x0) {\n    pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;\n    p_Var3 = p_Var19->_M_nxt;\n    while (p_Var17 = p_Var3, pSVar15 != sym) {\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }\n    _Var12._M_cur = (__node_type *)p_Var19->_M_nxt;\n    if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;\n  }\nLAB_00185ac0:\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  __node = (__node_type *)operator_new(0x18);\n  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base._M_nxt = (_Hash_node_base *)0x0;\n  (__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage.__align = (anon_struct_8_0_00000001_for___align)sym;\n  *(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8) = 0;\n  _Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);\nLAB_00185928:\n  piVar8 = (int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8);\n  iVar14 = *piVar8 + 1;\n  *piVar8 = iVar14;\n  if (4 < iVar14) {\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    return;\n  }\n  if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }\n  if ((parameters->options_->warn_unresolved_symbols_).value == false) {\n    this->error_count_ = this->error_count_ + 1;\n    uVar9 = gettext("error");\n  }\n  else {\n    this->warning_count_ = this->warning_count_ + 1;\n    uVar9 = gettext("warning");\n  }\n  (*pLVar1->lock_->_vptr_Lock_impl[3])();\n  pcVar11 = sym->version_;\n  if (pcVar11 == (char *)0x0) {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);\n  }\n  else {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);\n  }\n  uVar20 = local_58._M_dataplus._M_p < &local_58.field_2;\n  uVar21 = (anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2;\n  if (!(bool)uVar21) {\n    operator_delete(local_58._M_dataplus._M_p);\n  }\n  pcVar11 = program_name;\n  lVar13 = 4;\n  pbVar16 = (byte *)0x3883dd;\n  pbVar18 = (byte *)sym->name_;\n  do {\n    if (lVar13 == 0) break;\n    lVar13 = lVar13 + -1;\n    uVar20 = *pbVar16 < *pbVar18;\n    uVar21 = *pbVar16 == *pbVar18;\n    pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;\n    pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;\n  } while ((bool)uVar21);\n  if ((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20) {\n    pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             );\n    gold_info(pcVar10,pcVar11);\n  }\n  if ((sym->field_0x3a & 7) == 0) {\n    p_Var5 = ((sym->u1_).object)->_vptr_Object[5];\n    if (p_Var5 != Object::do_pluginobj) {\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "Lock *pLVar1;" type_identifier (pointer_declarator "*pLVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "pointer pcVar4;" type_identifier identifier ;) (declaration "_func_int_varargs *p_Var5;" type_identifier (pointer_declarator "*p_Var5" * identifier) ;) (declaration "_Alloc_hider _Var6;" type_identifier identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "undefined8 uVar9;" type_identifier identifier ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "char *pcVar11;" primitive_type (pointer_declarator "*pcVar11" * identifier) ;) (declaration "__node_type *__node;" type_identifier (pointer_declarator "*__node" * identifier) ;) (expression_statement "_Node_iterator_base<std::pair<const_gold::Symbol*_const,_int>,_false> _Var12;" (comma_expression "_Node_iterator_base<std::pair<const_gold::Symbol*_const,_int>,_false> _Var12" (binary_expression "_Node_iterator_base<std::pair<const_gold::Symbol*_const" (binary_expression "_Node_iterator_base<std::pair<const_gold" (binary_expression "_Node_iterator_base<std" identifier < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , (binary_expression "_int>,_false> _Var12" (binary_expression "_int>,_false" identifier > (ERROR "," ,) identifier) > identifier)) ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "ulong __bkt;" type_identifier identifier ;) (declaration "Symbol *pSVar15;" type_identifier (pointer_declarator "*pSVar15" * identifier) ;) (declaration "byte *pbVar16;" type_identifier (pointer_declarator "*pbVar16" * identifier) ;) (declaration "__bucket_type p_Var17;" type_identifier identifier ;) (declaration "byte *pbVar18;" type_identifier (pointer_declarator "*pbVar18" * identifier) ;) (declaration "__bucket_type p_Var19;" type_identifier identifier ;) (declaration "undefined1 uVar20;" type_identifier identifier ;) (declaration "undefined1 uVar21;" type_identifier identifier ;) (declaration "byte bVar22;" type_identifier identifier ;) (declaration "string local_58;" type_identifier identifier ;) (expression_statement "bVar22 = 0;" (assignment_expression "bVar22 = 0" identifier = number_literal) ;) (ERROR "bVar7 = Initialize_lock::" (assignment_expression "bVar7 = Initialize_lock" identifier = identifier) : :) (expression_statement "initialize(&this->initialize_lock_);" (call_expression "initialize(&this->initialize_lock_)" identifier (argument_list "(&this->initialize_lock_)" ( (pointer_expression "&this->initialize_lock_" & (field_expression "this->initialize_lock_" identifier -> field_identifier)) ))) ;) (if_statement "if (!bVar7) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" if (parenthesized_expression "(!bVar7)" ( (unary_expression "!bVar7" ! identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol");" (call_expression "do_gold_unreachable("../../gold/errors.cc",0xa9,"undefined_symbol")" identifier (argument_list "("../../gold/errors.cc",0xa9,"undefined_symbol")" ( (string_literal ""../../gold/errors.cc"" " string_content ") , number_literal , (string_literal ""undefined_symbol"" " string_content ") ))) ;) })) (expression_statement "pLVar1 = this->lock_;" (assignment_expression "pLVar1 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[2])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[2])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[2]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[2]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (expression_statement "uVar2 = (this->undefined_symbols_)._M_h._M_bucket_count;" (assignment_expression "uVar2 = (this->undefined_symbols_)._M_h._M_bucket_count" identifier = (field_expression "(this->undefined_symbols_)._M_h._M_bucket_count" (field_expression "(this->undefined_symbols_)._M_h" (parenthesized_expression "(this->undefined_symbols_)" ( (field_expression "this->undefined_symbols_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "__bkt = (ulong)sym % uVar2;" (assignment_expression "__bkt = (ulong)sym % uVar2" identifier = (binary_expression "(ulong)sym % uVar2" (cast_expression "(ulong)sym" ( (type_descriptor "ulong" type_identifier) ) identifier) % identifier)) ;) (expression_statement "p_Var19 = (this->undefined_symbols_)._M_h._M_buckets[__bkt];" (assignment_expression "p_Var19 = (this->undefined_symbols_)._M_h._M_buckets[__bkt]" identifier = (subscript_expression "(this->undefined_symbols_)._M_h._M_buckets[__bkt]" (field_expression "(this->undefined_symbols_)._M_h._M_buckets" (field_expression "(this->undefined_symbols_)._M_h" (parenthesized_expression "(this->undefined_symbols_)" ( (field_expression "this->undefined_symbols_" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ identifier ])) ;) (if_statement "if (p_Var19 != (__bucket_type)0x0) {\n    pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;\n    p_Var3 = p_Var19->_M_nxt;\n    while (p_Var17 = p_Var3, pSVar15 != sym) {\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }\n    _Var12._M_cur = (__node_type *)p_Var19->_M_nxt;\n    if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;\n  }" if (parenthesized_expression "(p_Var19 != (__bucket_type)0x0)" ( (binary_expression "p_Var19 != (__bucket_type)0x0" identifier != (cast_expression "(__bucket_type)0x0" ( (type_descriptor "__bucket_type" type_identifier) ) number_literal)) )) (compound_statement "{\n    pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;\n    p_Var3 = p_Var19->_M_nxt;\n    while (p_Var17 = p_Var3, pSVar15 != sym) {\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }\n    _Var12._M_cur = (__node_type *)p_Var19->_M_nxt;\n    if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;\n  }" { (expression_statement "pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt;" (assignment_expression "pSVar15 = (Symbol *)p_Var19->_M_nxt[1]._M_nxt" identifier = (cast_expression "(Symbol *)p_Var19->_M_nxt[1]._M_nxt" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var19->_M_nxt[1]._M_nxt" (subscript_expression "p_Var19->_M_nxt[1]" (field_expression "p_Var19->_M_nxt" identifier -> field_identifier) [ number_literal ]) . field_identifier))) ;) (expression_statement "p_Var3 = p_Var19->_M_nxt;" (assignment_expression "p_Var3 = p_Var19->_M_nxt" identifier = (field_expression "p_Var19->_M_nxt" identifier -> field_identifier)) ;) (while_statement "while (p_Var17 = p_Var3, pSVar15 != sym) {\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }" while (parenthesized_expression "(p_Var17 = p_Var3, pSVar15 != sym)" ( (comma_expression "p_Var17 = p_Var3, pSVar15 != sym" (assignment_expression "p_Var17 = p_Var3" identifier = identifier) , (binary_expression "pSVar15 != sym" identifier != identifier)) )) (compound_statement "{\n      p_Var3 = p_Var17->_M_nxt;\n      if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;\n    }" { (expression_statement "p_Var3 = p_Var17->_M_nxt;" (assignment_expression "p_Var3 = p_Var17->_M_nxt" identifier = (field_expression "p_Var17->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if ((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))\n      goto LAB_00185ac0;" if (parenthesized_expression "((p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2))" ( (binary_expression "(p_Var3 == (_Hash_node_base *)0x0) ||\n         (pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2)" (parenthesized_expression "(p_Var3 == (_Hash_node_base *)0x0)" ( (binary_expression "p_Var3 == (_Hash_node_base *)0x0" identifier == (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2)" ( (comma_expression "pSVar15 = (Symbol *)p_Var3[1]._M_nxt, p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2" (assignment_expression "pSVar15 = (Symbol *)p_Var3[1]._M_nxt" identifier = (cast_expression "(Symbol *)p_Var3[1]._M_nxt" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var3[1]._M_nxt" (subscript_expression "p_Var3[1]" identifier [ number_literal ]) . field_identifier))) , (comma_expression "p_Var19 = p_Var17, __bkt != (ulong)pSVar15 % uVar2" (assignment_expression "p_Var19 = p_Var17" identifier = identifier) , (binary_expression "__bkt != (ulong)pSVar15 % uVar2" identifier != (binary_expression "(ulong)pSVar15 % uVar2" (cast_expression "(ulong)pSVar15" ( (type_descriptor "ulong" type_identifier) ) identifier) % identifier)))) ))) )) (goto_statement "goto LAB_00185ac0;" goto statement_identifier ;)) })) (expression_statement "_Var12._M_cur = (__node_type *)p_Var19->_M_nxt;" (assignment_expression "_Var12._M_cur = (__node_type *)p_Var19->_M_nxt" (field_expression "_Var12._M_cur" identifier . field_identifier) = (cast_expression "(__node_type *)p_Var19->_M_nxt" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var19->_M_nxt" identifier -> field_identifier))) ;) (if_statement "if (_Var12._M_cur != (__node_type *)0x0) goto LAB_00185928;" if (parenthesized_expression "(_Var12._M_cur != (__node_type *)0x0)" ( (binary_expression "_Var12._M_cur != (__node_type *)0x0" (field_expression "_Var12._M_cur" identifier . field_identifier) != (cast_expression "(__node_type *)0x0" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00185928;" goto statement_identifier ;)) })) (labeled_statement "LAB_00185ac0:\n                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */\n  __node = (__node_type *)operator_new(0x18);" statement_identifier : comment (expression_statement "__node = (__node_type *)operator_new(0x18);" (assignment_expression "__node = (__node_type *)operator_new(0x18)" identifier = (cast_expression "(__node_type *)operator_new(0x18)" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;)) (expression_statement "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base._M_nxt = (_Hash_node_base *)0x0;" (assignment_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base._M_nxt = (_Hash_node_base *)0x0" (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base._M_nxt" (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n  super__Hash_node_base" (parenthesized_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)" ( (comma_expression "__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_" (binary_expression "__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const" (binary_expression "__node->super__Hash_node_value_base<std::pair<const_gold" (binary_expression "__node->super__Hash_node_value_base<std" (field_expression "__node->super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , (binary_expression "_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier) = (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage.__align = (anon_struct_8_0_00000001_for___align)sym;" (assignment_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage.__align = (anon_struct_8_0_00000001_for___align)sym" (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage.__align" (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage.\n  _M_storage" (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)._M_storage" (parenthesized_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)" ( (comma_expression "__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_" (binary_expression "__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const" (binary_expression "__node->super__Hash_node_value_base<std::pair<const_gold" (binary_expression "__node->super__Hash_node_value_base<std" (field_expression "__node->super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , (binary_expression "_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier) . field_identifier) = (cast_expression "(anon_struct_8_0_00000001_for___align)sym" ( (type_descriptor "anon_struct_8_0_00000001_for___align" type_identifier) ) identifier)) ;) (expression_statement "*(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8) = 0;" (assignment_expression "*(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8) = 0" (pointer_expression "*(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8)" * (cast_expression "(undefined4 *)\n   ((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8)" ( (binary_expression "(long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage + 8" (cast_expression "(long)&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage" & (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage._M_storage" (field_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n           _M_storage" (parenthesized_expression "(__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)" ( (comma_expression "__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_" (binary_expression "__node->super__Hash_node_value_base<std::pair<const_gold::Symbol*_const" (binary_expression "__node->super__Hash_node_value_base<std::pair<const_gold" (binary_expression "__node->super__Hash_node_value_base<std" (field_expression "__node->super__Hash_node_value_base" identifier -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , (binary_expression "_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier))) + number_literal) )))) = number_literal) ;) (ERROR "_Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std::allocator<std::pair<const_gold::Symbol*_const,_int>_>,_std::" (comma_expression "_Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_int>,_std" (binary_expression "_Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const" (binary_expression "_Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std::pair<const_gold" (binary_expression "_Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold::Symbol*,_std" (binary_expression "_Var12._M_cur =\n       (__node_type *)\n       std::\n       _Hashtable<const_gold" (assignment_expression "_Var12._M_cur =\n       (__node_type *)\n       std" (field_expression "_Var12._M_cur" identifier . field_identifier) = (cast_expression "(__node_type *)\n       std" ( (type_descriptor "__node_type *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) (ERROR "::\n       _Hashtable" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , (binary_expression "_int>,_std" identifier > (ERROR "," ,) identifier)) : : identifier < identifier : : identifier < identifier : : (comma_expression "Symbol*_const,_int>_>,_std" (binary_expression "Symbol*_const" identifier * identifier) , (binary_expression "_int>_>,_std" (binary_expression "_int>_" identifier > identifier) > (ERROR "," ,) identifier)) : :) (labeled_statement "__detail::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);" statement_identifier (ERROR "::_Select1st,_std::equal_to<const_gold::Symbol*>,_std::hash<const_gold::Symbol*>,_std:" : : (comma_expression "_Select1st,_std" identifier , identifier) : : (binary_expression "equal_to<const_gold" identifier < identifier) : : (comma_expression "Symbol*>,_std" identifier (ERROR "*>" * >) , identifier) : : (binary_expression "hash<const_gold" identifier < identifier) : : (comma_expression "Symbol*>,_std" identifier (ERROR "*>" * >) , identifier) :) : (labeled_statement "__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);" statement_identifier (ERROR "::_Mod_range_hashing,_std:" : : (comma_expression "_Mod_range_hashing,_std" identifier , identifier) :) : (labeled_statement "__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);" statement_identifier (ERROR "::_Default_ranged_hash,_std:" : : (comma_expression "_Default_ranged_hash,_std" identifier , identifier) :) : (labeled_statement "__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);" statement_identifier (ERROR "::_Prime_rehash_policy,_std:" : : (comma_expression "_Prime_rehash_policy,_std" identifier , identifier) :) : (labeled_statement "__detail::_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);" statement_identifier : (ERROR ":" :) (expression_statement "_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1);" (comma_expression "_Hashtable_traits<false,_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1)" (binary_expression "_Hashtable_traits<false" identifier < false) , (comma_expression "_false,_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1)" identifier , (binary_expression "_true>_>\n       ::_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1)" (binary_expression "_true>_" identifier > identifier) > (ERROR "::" : :) (call_expression "_M_insert_unique_node(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1)" identifier (argument_list "(&(this->undefined_symbols_)._M_h,__bkt,(__hash_code)sym,__node,1)" ( (pointer_expression "&(this->undefined_symbols_)._M_h" & (field_expression "(this->undefined_symbols_)._M_h" (parenthesized_expression "(this->undefined_symbols_)" ( (field_expression "this->undefined_symbols_" identifier -> field_identifier) )) . field_identifier)) , identifier , (cast_expression "(__hash_code)sym" ( (type_descriptor "__hash_code" type_identifier) ) identifier) , identifier , number_literal )))))) ;)))))) (labeled_statement "LAB_00185928:\n  piVar8 = (int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8);" statement_identifier : (expression_statement "piVar8 = (int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8);" (assignment_expression "piVar8 = (int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8)" identifier = (cast_expression "(int *)((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8)" ( (binary_expression "(long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage + 8" (cast_expression "(long)&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage" & (field_expression "((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage._M_storage" (field_expression "((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>).\n                          _M_storage" (parenthesized_expression "((_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_>)" ( (comma_expression "(_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const,_int>_" (binary_expression "(_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold::Symbol*_const" (binary_expression "(_Var12._M_cur)->\n                          super__Hash_node_value_base<std::pair<const_gold" (binary_expression "(_Var12._M_cur)->\n                          super__Hash_node_value_base<std" (field_expression "(_Var12._M_cur)->\n                          super__Hash_node_value_base" (parenthesized_expression "(_Var12._M_cur)" ( (field_expression "_Var12._M_cur" identifier . field_identifier) )) -> field_identifier) < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , (binary_expression "_int>_" identifier > identifier)) (ERROR ">" >) )) . field_identifier) . field_identifier))) + number_literal) )))) ;)) (expression_statement "iVar14 = *piVar8 + 1;" (assignment_expression "iVar14 = *piVar8 + 1" identifier = (binary_expression "*piVar8 + 1" (pointer_expression "*piVar8" * identifier) + number_literal)) ;) (expression_statement "*piVar8 = iVar14;" (assignment_expression "*piVar8 = iVar14" (pointer_expression "*piVar8" * identifier) = identifier) ;) (if_statement "if (4 < iVar14) {\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    return;\n  }" if (parenthesized_expression "(4 < iVar14)" ( (binary_expression "4 < iVar14" number_literal < identifier) )) (compound_statement "{\n    (*pLVar1->lock_->_vptr_Lock_impl[3])();\n    return;\n  }" { (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (if_statement "if (parameters->options_ == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }" if (parenthesized_expression "(parameters->options_ == (General_options *)0x0)" ( (binary_expression "parameters->options_ == (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }" { comment comment (expression_statement "do_gold_unreachable("../../gold/parameters.h",0x5c,"options");" (call_expression "do_gold_unreachable("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;) })) (if_statement "if ((parameters->options_->warn_unresolved_symbols_).value == false) {\n    this->error_count_ = this->error_count_ + 1;\n    uVar9 = gettext("error");\n  }\n  else {\n    this->warning_count_ = this->warning_count_ + 1;\n    uVar9 = gettext("warning");\n  }" if (parenthesized_expression "((parameters->options_->warn_unresolved_symbols_).value == false)" ( (binary_expression "(parameters->options_->warn_unresolved_symbols_).value == false" (field_expression "(parameters->options_->warn_unresolved_symbols_).value" (parenthesized_expression "(parameters->options_->warn_unresolved_symbols_)" ( (field_expression "parameters->options_->warn_unresolved_symbols_" (field_expression "parameters->options_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) == false) )) (compound_statement "{\n    this->error_count_ = this->error_count_ + 1;\n    uVar9 = gettext("error");\n  }" { (expression_statement "this->error_count_ = this->error_count_ + 1;" (assignment_expression "this->error_count_ = this->error_count_ + 1" (field_expression "this->error_count_" identifier -> field_identifier) = (binary_expression "this->error_count_ + 1" (field_expression "this->error_count_" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar9 = gettext("error");" (assignment_expression "uVar9 = gettext("error")" identifier = (call_expression "gettext("error")" identifier (argument_list "("error")" ( (string_literal ""error"" " string_content ") )))) ;) }) (else_clause "else {\n    this->warning_count_ = this->warning_count_ + 1;\n    uVar9 = gettext("warning");\n  }" else (compound_statement "{\n    this->warning_count_ = this->warning_count_ + 1;\n    uVar9 = gettext("warning");\n  }" { (expression_statement "this->warning_count_ = this->warning_count_ + 1;" (assignment_expression "this->warning_count_ = this->warning_count_ + 1" (field_expression "this->warning_count_" identifier -> field_identifier) = (binary_expression "this->warning_count_ + 1" (field_expression "this->warning_count_" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar9 = gettext("warning");" (assignment_expression "uVar9 = gettext("warning")" identifier = (call_expression "gettext("warning")" identifier (argument_list "("warning")" ( (string_literal ""warning"" " string_content ") )))) ;) }))) (expression_statement "(*pLVar1->lock_->_vptr_Lock_impl[3])();" (call_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])()" (parenthesized_expression "(*pLVar1->lock_->_vptr_Lock_impl[3])" ( (pointer_expression "*pLVar1->lock_->_vptr_Lock_impl[3]" * (subscript_expression "pLVar1->lock_->_vptr_Lock_impl[3]" (field_expression "pLVar1->lock_->_vptr_Lock_impl" (field_expression "pLVar1->lock_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( ))) ;) (expression_statement "pcVar11 = sym->version_;" (assignment_expression "pcVar11 = sym->version_" identifier = (field_expression "sym->version_" identifier -> field_identifier)) ;) (if_statement "if (pcVar11 == (char *)0x0) {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);\n  }\n  else {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);\n  }" if (parenthesized_expression "(pcVar11 == (char *)0x0)" ( (binary_expression "pcVar11 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */\n    fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);\n  }" { (labeled_statement "Symbol::demangled_name(&local_58,sym);" statement_identifier : (ERROR ":" :) (expression_statement "demangled_name(&local_58,sym);" (call_expression "demangled_name(&local_58,sym)" identifier (argument_list "(&local_58,sym)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;)) (expression_statement "_Var6._M_p = local_58._M_dataplus._M_p;" (assignment_expression "_Var6._M_p = local_58._M_dataplus._M_p" (field_expression "_Var6._M_p" identifier . field_identifier) = (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier)) ;) (expression_statement "pcVar4 = (location->_M_dataplus)._M_p;" (assignment_expression "pcVar4 = (location->_M_dataplus)._M_p" identifier = (field_expression "(location->_M_dataplus)._M_p" (parenthesized_expression "(location->_M_dataplus)" ( (field_expression "location->_M_dataplus" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");" (assignment_expression "pcVar11 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n")" identifier = (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\'\n")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: %s: undefined reference to \'%s\'\n")" identifier (argument_list "("%s: %s: undefined reference to \'%s\'\n")" ( (string_literal ""%s: %s: undefined reference to \'%s\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) comment (expression_statement "fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p);" (call_expression "fprintf(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p)" identifier (argument_list "(stderr,pcVar11,pcVar4,uVar9,_Var6._M_p)" ( identifier , identifier , identifier , identifier , (field_expression "_Var6._M_p" identifier . field_identifier) ))) ;) }) (else_clause "else {\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);\n  }" else (compound_statement "{\n    Symbol::demangled_name(&local_58,sym);\n    _Var6._M_p = local_58._M_dataplus._M_p;\n    pcVar4 = (location->_M_dataplus)._M_p;\n    pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */\n    fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);\n  }" { (labeled_statement "Symbol::demangled_name(&local_58,sym);" statement_identifier : (ERROR ":" :) (expression_statement "demangled_name(&local_58,sym);" (call_expression "demangled_name(&local_58,sym)" identifier (argument_list "(&local_58,sym)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;)) (expression_statement "_Var6._M_p = local_58._M_dataplus._M_p;" (assignment_expression "_Var6._M_p = local_58._M_dataplus._M_p" (field_expression "_Var6._M_p" identifier . field_identifier) = (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier)) ;) (expression_statement "pcVar4 = (location->_M_dataplus)._M_p;" (assignment_expression "pcVar4 = (location->_M_dataplus)._M_p" identifier = (field_expression "(location->_M_dataplus)._M_p" (parenthesized_expression "(location->_M_dataplus)" ( (field_expression "location->_M_dataplus" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");" (assignment_expression "pcVar10 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" identifier = (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" identifier (argument_list "("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" ( (string_literal ""%s: %s: undefined reference to \'%s\', version \'%s\'\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) comment (expression_statement "fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11);" (call_expression "fprintf(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11)" identifier (argument_list "(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,pcVar11)" ( identifier , identifier , identifier , identifier , (field_expression "_Var6._M_p" identifier . field_identifier) , identifier ))) ;) }))) (expression_statement "uVar20 = local_58._M_dataplus._M_p < &local_58.field_2;" (assignment_expression "uVar20 = local_58._M_dataplus._M_p < &local_58.field_2" identifier = (binary_expression "local_58._M_dataplus._M_p < &local_58.field_2" (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier) < (pointer_expression "&local_58.field_2" & (field_expression "local_58.field_2" identifier . field_identifier)))) ;) (expression_statement "uVar21 = (anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2;" (assignment_expression "uVar21 = (anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2" identifier = (parenthesized_expression "(anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2" ( (ERROR "anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::" (comma_expression "anon_union_16_2_edb7204a_for_basic_string<char,_std" (binary_expression "anon_union_16_2_edb7204a_for_basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_9\n            *)local_58._M_dataplus._M_p == &local_58.field_2" (binary_expression "allocator<char>_>_9\n            *)local_58._M_dataplus._M_p" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (binary_expression "_9\n            *)local_58._M_dataplus._M_p" identifier * (ERROR ")" )) (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier))) == (pointer_expression "&local_58.field_2" & (field_expression "local_58.field_2" identifier . field_identifier))) ))) ;) (if_statement "if (!(bool)uVar21) {\n    operator_delete(local_58._M_dataplus._M_p);\n  }" if (parenthesized_expression "(!(bool)uVar21)" ( (unary_expression "!(bool)uVar21" ! (cast_expression "(bool)uVar21" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    operator_delete(local_58._M_dataplus._M_p);\n  }" { (expression_statement "operator_delete(local_58._M_dataplus._M_p);" (call_expression "operator_delete(local_58._M_dataplus._M_p)" identifier (argument_list "(local_58._M_dataplus._M_p)" ( (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier) ))) ;) })) (expression_statement "pcVar11 = program_name;" (assignment_expression "pcVar11 = program_name" identifier = identifier) ;) (expression_statement "lVar13 = 4;" (assignment_expression "lVar13 = 4" identifier = number_literal) ;) (expression_statement "pbVar16 = (byte *)0x3883dd;" (assignment_expression "pbVar16 = (byte *)0x3883dd" identifier = (cast_expression "(byte *)0x3883dd" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pbVar18 = (byte *)sym->name_;" (assignment_expression "pbVar18 = (byte *)sym->name_" identifier = (cast_expression "(byte *)sym->name_" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "sym->name_" identifier -> field_identifier))) ;) (do_statement "do {\n    if (lVar13 == 0) break;\n    lVar13 = lVar13 + -1;\n    uVar20 = *pbVar16 < *pbVar18;\n    uVar21 = *pbVar16 == *pbVar18;\n    pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;\n    pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;\n  } while ((bool)uVar21);" do (compound_statement "{\n    if (lVar13 == 0) break;\n    lVar13 = lVar13 + -1;\n    uVar20 = *pbVar16 < *pbVar18;\n    uVar21 = *pbVar16 == *pbVar18;\n    pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;\n    pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;\n  }" { (if_statement "if (lVar13 == 0) break;" if (parenthesized_expression "(lVar13 == 0)" ( (binary_expression "lVar13 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar13 = lVar13 + -1;" (assignment_expression "lVar13 = lVar13 + -1" identifier = (binary_expression "lVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar20 = *pbVar16 < *pbVar18;" (assignment_expression "uVar20 = *pbVar16 < *pbVar18" identifier = (binary_expression "*pbVar16 < *pbVar18" (pointer_expression "*pbVar16" * identifier) < (pointer_expression "*pbVar18" * identifier))) ;) (expression_statement "uVar21 = *pbVar16 == *pbVar18;" (assignment_expression "uVar21 = *pbVar16 == *pbVar18" identifier = (binary_expression "*pbVar16 == *pbVar18" (pointer_expression "*pbVar16" * identifier) == (pointer_expression "*pbVar18" * identifier))) ;) (expression_statement "pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1;" (assignment_expression "pbVar16 = pbVar16 + (ulong)bVar22 * -2 + 1" identifier = (binary_expression "pbVar16 + (ulong)bVar22 * -2 + 1" (binary_expression "pbVar16 + (ulong)bVar22 * -2" identifier + (binary_expression "(ulong)bVar22 * -2" (cast_expression "(ulong)bVar22" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1;" (assignment_expression "pbVar18 = pbVar18 + (ulong)bVar22 * -2 + 1" identifier = (binary_expression "pbVar18 + (ulong)bVar22 * -2 + 1" (binary_expression "pbVar18 + (ulong)bVar22 * -2" identifier + (binary_expression "(ulong)bVar22 * -2" (cast_expression "(ulong)bVar22" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar21)" ( (cast_expression "(bool)uVar21" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (if_statement "if ((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20) {\n    pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             );\n    gold_info(pcVar10,pcVar11);\n  }" if (parenthesized_expression "((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20)" ( (binary_expression "(!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20" (parenthesized_expression "(!(bool)uVar20 && !(bool)uVar21)" ( (binary_expression "!(bool)uVar20 && !(bool)uVar21" (unary_expression "!(bool)uVar20" ! (cast_expression "(bool)uVar20" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar21" ! (cast_expression "(bool)uVar21" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar20" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             );\n    gold_info(pcVar10,pcVar11);\n  }" { (expression_statement "pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             );" (assignment_expression "pcVar10 = (char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             )" identifier = (cast_expression "(char *)gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             )" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             )" identifier (argument_list "(\n                             "%s: the vtable symbol may be undefined because the class is missing its key function"\n                             )" ( (string_literal ""%s: the vtable symbol may be undefined because the class is missing its key function"" " string_content ") ))))) ;) (expression_statement "gold_info(pcVar10,pcVar11);" (call_expression "gold_info(pcVar10,pcVar11)" identifier (argument_list "(pcVar10,pcVar11)" ( identifier , identifier ))) ;) })) (if_statement "if ((sym->field_0x3a & 7) == 0) {\n    p_Var5 = ((sym->u1_).object)->_vptr_Object[5];\n    if (p_Var5 != Object::do_pluginobj) {\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }\n  }" if (parenthesized_expression "((sym->field_0x3a & 7) == 0)" ( (binary_expression "(sym->field_0x3a & 7) == 0" (parenthesized_expression "(sym->field_0x3a & 7)" ( (binary_expression "sym->field_0x3a & 7" (field_expression "sym->field_0x3a" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    p_Var5 = ((sym->u1_).object)->_vptr_Object[5];\n    if (p_Var5 != Object::do_pluginobj) {\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }\n  }" { (expression_statement "p_Var5 = ((sym->u1_).object)->_vptr_Object[5];" (assignment_expression "p_Var5 = ((sym->u1_).object)->_vptr_Object[5]" identifier = (subscript_expression "((sym->u1_).object)->_vptr_Object[5]" (field_expression "((sym->u1_).object)->_vptr_Object" (parenthesized_expression "((sym->u1_).object)" ( (field_expression "(sym->u1_).object" (parenthesized_expression "(sym->u1_)" ( (field_expression "sym->u1_" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier) [ number_literal ])) ;) (if_statement "if (p_Var5 != Object::do_pluginobj) {\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }" if (parenthesized_expression "(p_Var5 != Object::do_pluginobj)" ( (binary_expression "p_Var5 != Object" identifier != identifier) (ERROR "::do_pluginobj" : : identifier) )) (compound_statement "{\n      iVar14 = (*p_Var5)();\n      pcVar11 = program_name;\n      if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }\n    }" { (expression_statement "iVar14 = (*p_Var5)();" (assignment_expression "iVar14 = (*p_Var5)()" identifier = (call_expression "(*p_Var5)()" (parenthesized_expression "(*p_Var5)" ( (pointer_expression "*p_Var5" * identifier) )) (argument_list "()" ( )))) ;) (expression_statement "pcVar11 = program_name;" (assignment_expression "pcVar11 = program_name" identifier = identifier) ;) (if_statement "if (CONCAT44(extraout_var,iVar14) != 0) {\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }" if (parenthesized_expression "(CONCAT44(extraout_var,iVar14) != 0)" ( (binary_expression "CONCAT44(extraout_var,iVar14) != 0" (call_expression "CONCAT44(extraout_var,iVar14)" identifier (argument_list "(extraout_var,iVar14)" ( identifier , identifier ))) != number_literal) )) (compound_statement "{\n        pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");\n        gold_info(pcVar10,pcVar11);\n        return;\n      }" { (expression_statement "pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin");" (assignment_expression "pcVar10 = (char *)gettext("%s: the symbol should have been defined by a plugin")" identifier = (cast_expression "(char *)gettext("%s: the symbol should have been defined by a plugin")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: the symbol should have been defined by a plugin")" identifier (argument_list "("%s: the symbol should have been defined by a plugin")" ( (string_literal ""%s: the symbol should have been defined by a plugin"" " string_content ") ))))) ;) (expression_statement "gold_info(pcVar10,pcVar11);" (call_expression "gold_info(pcVar10,pcVar11)" identifier (argument_list "(pcVar10,pcVar11)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) })) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    \n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    \n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)" identifier (parameter_list "(long param_1,undefined8 *param_2,undefined8 *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    \n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}" { (declaration "undefined8 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "undefined1 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char cVar4;" primitive_type identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "byte *pbVar12;" type_identifier (pointer_declarator "*pbVar12" * identifier) ;) (declaration "long *plVar13;" (sized_type_specifier "long" long) (pointer_declarator "*plVar13" * identifier) ;) (declaration "byte *pbVar14;" type_identifier (pointer_declarator "*pbVar14" * identifier) ;) (declaration "long *plVar15;" (sized_type_specifier "long" long) (pointer_declarator "*plVar15" * identifier) ;) (declaration "undefined1 uVar16;" type_identifier identifier ;) (declaration "undefined1 uVar17;" type_identifier identifier ;) (declaration "byte bVar18;" type_identifier identifier ;) (declaration "undefined1 *local_58 [2];" type_identifier (pointer_declarator "*local_58 [2]" * (array_declarator "local_58 [2]" identifier [ number_literal ])) ;) (declaration "undefined1 auStack_48 [24];" type_identifier (array_declarator "auStack_48 [24]" identifier [ number_literal ]) ;) (expression_statement "bVar18 = 0;" (assignment_expression "bVar18 = 0" identifier = number_literal) ;) (expression_statement "cVar4 = FUN_00190ae0(param_1 + 0x10);" (assignment_expression "cVar4 = FUN_00190ae0(param_1 + 0x10)" identifier = (call_expression "FUN_00190ae0(param_1 + 0x10)" identifier (argument_list "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) ;) (if_statement "if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" if (parenthesized_expression "(cVar4 == '\0')" ( (binary_expression "cVar4 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" { (expression_statement "FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");" (call_expression "FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol")" identifier (argument_list "("../../gold/errors.cc",0xa9,"undefined_symbol")" ( (string_literal ""../../gold/errors.cc"" " string_content ") , number_literal , (string_literal ""undefined_symbol"" " string_content ") ))) ;) })) (expression_statement "puVar1 = *(undefined8 **)(param_1 + 8);" (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 8)" identifier = (pointer_expression "*(undefined8 **)(param_1 + 8)" * (cast_expression "(undefined8 **)(param_1 + 8)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "(**(code **)(*(long *)*puVar1 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x10))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x10)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x10)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x10)" ( (binary_expression "*(long *)*puVar1 + 0x10" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);" (assignment_expression "uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40)" identifier = (binary_expression "(ulong)param_2 % *(ulong *)(param_1 + 0x40)" (cast_expression "(ulong)param_2" ( (type_descriptor "ulong" type_identifier) ) identifier) % (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))))) ;) (expression_statement "plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);" (assignment_expression "plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" identifier = (pointer_expression "*(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" * (cast_expression "(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_1 + 0x38) + uVar11 * 8)" ( (binary_expression "*(long *)(param_1 + 0x38) + uVar11 * 8" (pointer_expression "*(long *)(param_1 + 0x38)" * (cast_expression "(long *)(param_1 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) + (binary_expression "uVar11 * 8" identifier * number_literal)) ))))) ;) (if_statement "if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }" if (parenthesized_expression "(plVar15 != (long *)0x0)" ( (binary_expression "plVar15 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }" { (expression_statement "puVar7 = (undefined8 *)((long *)*plVar15)[1];" (assignment_expression "puVar7 = (undefined8 *)((long *)*plVar15)[1]" identifier = (cast_expression "(undefined8 *)((long *)*plVar15)[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "((long *)*plVar15)[1]" (parenthesized_expression "((long *)*plVar15)" ( (cast_expression "(long *)*plVar15" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar15" * identifier)) )) [ number_literal ]))) ;) (expression_statement "plVar2 = (long *)*plVar15;" (assignment_expression "plVar2 = (long *)*plVar15" identifier = (cast_expression "(long *)*plVar15" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar15" * identifier))) ;) (do_statement "do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));" do (compound_statement "{\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    }" { (expression_statement "plVar13 = plVar2;" (assignment_expression "plVar13 = plVar2" identifier = identifier) ;) (if_statement "if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }" if (parenthesized_expression "(puVar7 == param_2)" ( (binary_expression "puVar7 == param_2" identifier == identifier) )) (compound_statement "{\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }" { (expression_statement "lVar9 = *plVar15;" (assignment_expression "lVar9 = *plVar15" identifier = (pointer_expression "*plVar15" * identifier)) ;) (if_statement "if (lVar9 != 0) goto LAB_00185928;" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00185928;" goto statement_identifier ;)) (break_statement "break;" break ;) })) (expression_statement "plVar2 = (long *)*plVar13;" (assignment_expression "plVar2 = (long *)*plVar13" identifier = (cast_expression "(long *)*plVar13" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar13" * identifier))) ;) (if_statement "if (plVar2 == (long *)0x0) break;" if (parenthesized_expression "(plVar2 == (long *)0x0)" ( (binary_expression "plVar2 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (break_statement "break;" break ;)) (expression_statement "puVar7 = (undefined8 *)plVar2[1];" (assignment_expression "puVar7 = (undefined8 *)plVar2[1]" identifier = (cast_expression "(undefined8 *)plVar2[1]" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ]))) ;) (expression_statement "plVar15 = plVar13;" (assignment_expression "plVar15 = plVar13" identifier = identifier) ;) }) while (parenthesized_expression "(uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40))" ( (binary_expression "uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40)" identifier == (binary_expression "(ulong)puVar7 % *(ulong *)(param_1 + 0x40)" (cast_expression "(ulong)puVar7" ( (type_descriptor "ulong" type_identifier) ) identifier) % (pointer_expression "*(ulong *)(param_1 + 0x40)" * (cast_expression "(ulong *)(param_1 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))))) )) ;) })) (expression_statement "puVar7 = (undefined8 *)FUN_002ee780(0x18);" (assignment_expression "puVar7 = (undefined8 *)FUN_002ee780(0x18)" identifier = (cast_expression "(undefined8 *)FUN_002ee780(0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ee780(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7[1] = param_2;" (assignment_expression "puVar7[1] = param_2" (subscript_expression "puVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined4 *)(puVar7 + 2) = 0;" (assignment_expression "*(undefined4 *)(puVar7 + 2) = 0" (pointer_expression "*(undefined4 *)(puVar7 + 2)" * (cast_expression "(undefined4 *)(puVar7 + 2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 2)" ( (binary_expression "puVar7 + 2" identifier + number_literal) )))) = number_literal) ;) (expression_statement "lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);" (assignment_expression "lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1)" identifier = (call_expression "FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1)" identifier (argument_list "(param_1 + 0x38,uVar11,param_2,puVar7,1)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) , identifier , identifier , identifier , number_literal )))) ;) (labeled_statement "LAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;" statement_identifier : (expression_statement "iVar10 = *(int *)(lVar9 + 0x10) + 1;" (assignment_expression "iVar10 = *(int *)(lVar9 + 0x10) + 1" identifier = (binary_expression "*(int *)(lVar9 + 0x10) + 1" (pointer_expression "*(int *)(lVar9 + 0x10)" * (cast_expression "(int *)(lVar9 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) )))) + number_literal)) ;)) (expression_statement "*(int *)(lVar9 + 0x10) = iVar10;" (assignment_expression "*(int *)(lVar9 + 0x10) = iVar10" (pointer_expression "*(int *)(lVar9 + 0x10)" * (cast_expression "(int *)(lVar9 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) )))) = identifier) ;) (if_statement "if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }" if (parenthesized_expression "(4 < iVar10)" ( (binary_expression "4 < iVar10" number_literal < identifier) )) (compound_statement "{\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }" { (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x18)" ( (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (if_statement "if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" if (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) == 0)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" { (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;) })) (if_statement "if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" if (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0')" ( (binary_expression "*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" * (cast_expression "(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" ( (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" * (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" ( (binary_expression "PTR_DAT_004586c8 + 0x10" identifier + number_literal) )))) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }" { (expression_statement "*(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;" (assignment_expression "*(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1" (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x30) + 1" (pointer_expression "*(int *)(param_1 + 0x30)" * (cast_expression "(int *)(param_1 + 0x30)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar5 = gettext("error");" (assignment_expression "uVar5 = gettext("error")" identifier = (call_expression "gettext("error")" identifier (argument_list "("error")" ( (string_literal ""error"" " string_content ") )))) ;) }) (else_clause "else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" else (compound_statement "{\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" { (expression_statement "*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;" (assignment_expression "*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1" (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x34) + 1" (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar5 = gettext("warning");" (assignment_expression "uVar5 = gettext("warning")" identifier = (call_expression "gettext("warning")" identifier (argument_list "("warning")" ( (string_literal ""warning"" " string_content ") )))) ;) }))) (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" ( (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" * (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" * (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*puVar1 + 0x18)" ( (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" * (cast_expression "(long *)*puVar1" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar1" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "lVar9 = param_2[1];" (assignment_expression "lVar9 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }" { (expression_statement "FUN_00283d10(local_58,param_2);" (call_expression "FUN_00283d10(local_58,param_2)" identifier (argument_list "(local_58,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = local_58[0];" (assignment_expression "puVar3 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = *param_3;" (assignment_expression "uVar8 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");" (assignment_expression "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n")" identifier = (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\'\n")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: %s: undefined reference to \'%s\'\n")" identifier (argument_list "("%s: %s: undefined reference to \'%s\'\n")" ( (string_literal ""%s: %s: undefined reference to \'%s\'\n"" " string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) (expression_statement "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);" (call_expression "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3)" identifier (argument_list "(stderr,pcVar6,uVar8,uVar5,puVar3)" ( identifier , identifier , identifier , identifier , identifier ))) ;) }) (else_clause "else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" else (compound_statement "{\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" { (expression_statement "FUN_00283d10(local_58,param_2);" (call_expression "FUN_00283d10(local_58,param_2)" identifier (argument_list "(local_58,param_2)" ( identifier , identifier ))) ;) (expression_statement "puVar3 = local_58[0];" (assignment_expression "puVar3 = local_58[0]" identifier = (subscript_expression "local_58[0]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = *param_3;" (assignment_expression "uVar8 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");" (assignment_expression "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" identifier = (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" identifier (argument_list "("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" ( (string_literal ""%s: %s: undefined reference to \'%s\', version \'%s\'\n"" " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) (expression_statement "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);" (call_expression "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9)" identifier (argument_list "(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9)" ( identifier , identifier , identifier , identifier , identifier , identifier ))) ;) }))) (expression_statement "uVar16 = local_58[0] < auStack_48;" (assignment_expression "uVar16 = local_58[0] < auStack_48" identifier = (binary_expression "local_58[0] < auStack_48" (subscript_expression "local_58[0]" identifier [ number_literal ]) < identifier)) ;) (expression_statement "uVar17 = local_58[0] == auStack_48;" (assignment_expression "uVar17 = local_58[0] == auStack_48" identifier = (binary_expression "local_58[0] == auStack_48" (subscript_expression "local_58[0]" identifier [ number_literal ]) == identifier)) ;) (if_statement "if (!(bool)uVar17) {\n    FUN_002eff50();\n  }" if (parenthesized_expression "(!(bool)uVar17)" ( (unary_expression "!(bool)uVar17" ! (cast_expression "(bool)uVar17" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    FUN_002eff50();\n  }" { (expression_statement "FUN_002eff50();" (call_expression "FUN_002eff50()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar5 = DAT_004589b8;" (assignment_expression "uVar5 = DAT_004589b8" identifier = identifier) ;) (expression_statement "lVar9 = 4;" (assignment_expression "lVar9 = 4" identifier = number_literal) ;) (expression_statement "pbVar12 = (byte *)0x3883dd;" (assignment_expression "pbVar12 = (byte *)0x3883dd" identifier = (cast_expression "(byte *)0x3883dd" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pbVar14 = (byte *)*param_2;" (assignment_expression "pbVar14 = (byte *)*param_2" identifier = (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (do_statement "do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);" do (compound_statement "{\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  }" { (if_statement "if (lVar9 == 0) break;" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar9 = lVar9 + -1;" (assignment_expression "lVar9 = lVar9 + -1" identifier = (binary_expression "lVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar16 = *pbVar12 < *pbVar14;" (assignment_expression "uVar16 = *pbVar12 < *pbVar14" identifier = (binary_expression "*pbVar12 < *pbVar14" (pointer_expression "*pbVar12" * identifier) < (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "uVar17 = *pbVar12 == *pbVar14;" (assignment_expression "uVar17 = *pbVar12 == *pbVar14" identifier = (binary_expression "*pbVar12 == *pbVar14" (pointer_expression "*pbVar12" * identifier) == (pointer_expression "*pbVar14" * identifier))) ;) (expression_statement "pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;" (assignment_expression "pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1" identifier = (binary_expression "pbVar12 + (ulong)bVar18 * -2 + 1" (binary_expression "pbVar12 + (ulong)bVar18 * -2" identifier + (binary_expression "(ulong)bVar18 * -2" (cast_expression "(ulong)bVar18" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;" (assignment_expression "pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1" identifier = (binary_expression "pbVar14 + (ulong)bVar18 * -2 + 1" (binary_expression "pbVar14 + (ulong)bVar18 * -2" identifier + (binary_expression "(ulong)bVar18 * -2" (cast_expression "(ulong)bVar18" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar17)" ( (cast_expression "(bool)uVar17" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (if_statement "if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }" if (parenthesized_expression "((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16)" ( (binary_expression "(!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16" (parenthesized_expression "(!(bool)uVar16 && !(bool)uVar17)" ( (binary_expression "!(bool)uVar16 && !(bool)uVar17" (unary_expression "!(bool)uVar16" ! (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar17" ! (cast_expression "(bool)uVar17" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar16" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }" { (expression_statement "uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );" (assignment_expression "uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" identifier = (call_expression "gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" identifier (argument_list "(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" ( (string_literal ""%s: the vtable symbol may be undefined because the class is missing its key function"" " string_content ") )))) ;) (expression_statement "FUN_001857e0(uVar8,uVar5);" (call_expression "FUN_001857e0(uVar8,uVar5)" identifier (argument_list "(uVar8,uVar5)" ( identifier , identifier ))) ;) })) (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }" if (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" ( (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" * (cast_expression "(byte *)((long)param_2 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3a)" ( (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }" { (if_statement "if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }" if (parenthesized_expression "(*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00)" ( (binary_expression "*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00" (pointer_expression "*(code **)(*(long *)param_2[2] + 0x28)" * (cast_expression "(code **)(*(long *)param_2[2] + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_2[2] + 0x28)" ( (binary_expression "*(long *)param_2[2] + 0x28" (pointer_expression "*(long *)param_2[2]" * (cast_expression "(long *)param_2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[2]" identifier [ number_literal ]))) + number_literal) )))) != identifier) )) (compound_statement "{\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }" { (expression_statement "lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();" (assignment_expression "lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))()" identifier = (call_expression "(**(code **)(*(long *)param_2[2] + 0x28))()" (parenthesized_expression "(**(code **)(*(long *)param_2[2] + 0x28))" ( (pointer_expression "**(code **)(*(long *)param_2[2] + 0x28)" * (pointer_expression "*(code **)(*(long *)param_2[2] + 0x28)" * (cast_expression "(code **)(*(long *)param_2[2] + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_2[2] + 0x28)" ( (binary_expression "*(long *)param_2[2] + 0x28" (pointer_expression "*(long *)param_2[2]" * (cast_expression "(long *)param_2[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[2]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "uVar5 = DAT_004589b8;" (assignment_expression "uVar5 = DAT_004589b8" identifier = identifier) ;) (if_statement "if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }" if (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }" { (expression_statement "uVar8 = gettext("%s: the symbol should have been defined by a plugin");" (assignment_expression "uVar8 = gettext("%s: the symbol should have been defined by a plugin")" identifier = (call_expression "gettext("%s: the symbol should have been defined by a plugin")" identifier (argument_list "("%s: the symbol should have been defined by a plugin")" ( (string_literal ""%s: the symbol should have been defined by a plugin"" " string_content ") )))) ;) (expression_statement "FUN_001857e0(uVar8,uVar5);" (call_expression "FUN_001857e0(uVar8,uVar5)" identifier (argument_list "(uVar8,uVar5)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) % (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT == (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) % (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , IDENT , IDENT , LIT )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) }))) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence string_content escape_sequence string_content escape_sequence string_content escape_sequence escape_sequence ") ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) < IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) == IDENT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) && (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) == (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) + LIT) )))) != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) + LIT) ))))) )) (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return ;) })) })) })) (return_statement return ;) })))
(function_definition "void FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)\n\n{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    \n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00185890(long param_1,undefined8 *param_2,undefined8 *param_3)" (identifier "FUN_00185890") (parameter_list "(long param_1,undefined8 *param_2,undefined8 *param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  undefined8 *puVar1;\n  long *plVar2;\n  undefined1 *puVar3;\n  char cVar4;\n  undefined8 uVar5;\n  char *pcVar6;\n  undefined8 *puVar7;\n  undefined8 uVar8;\n  long lVar9;\n  int iVar10;\n  ulong uVar11;\n  byte *pbVar12;\n  long *plVar13;\n  byte *pbVar14;\n  long *plVar15;\n  undefined1 uVar16;\n  undefined1 uVar17;\n  byte bVar18;\n  undefined1 *local_58 [2];\n  undefined1 auStack_48 [24];\n  \n  bVar18 = 0;\n  cVar4 = FUN_00190ae0(param_1 + 0x10);\n  if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }\n  puVar1 = *(undefined8 **)(param_1 + 8);\n  (**(code **)(*(long *)*puVar1 + 0x10))();\n  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);\n  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);\n  if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }\n                    \n  puVar7 = (undefined8 *)FUN_002ee780(0x18);\n  *puVar7 = 0;\n  puVar7[1] = param_2;\n  *(undefined4 *)(puVar7 + 2) = 0;\n  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);\nLAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;\n  *(int *)(lVar9 + 0x10) = iVar10;\n  if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }\n  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }\n  (**(code **)(*(long *)*puVar1 + 0x18))();\n  lVar9 = param_2[1];\n  if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }\n  uVar16 = local_58[0] < auStack_48;\n  uVar17 = local_58[0] == auStack_48;\n  if (!(bool)uVar17) {\n    FUN_002eff50();\n  }\n  uVar5 = DAT_004589b8;\n  lVar9 = 4;\n  pbVar12 = (byte *)0x3883dd;\n  pbVar14 = (byte *)*param_2;\n  do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);\n  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }\n  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }\n  return;\n}" ({ "{") (declaration "undefined8 *puVar1;" (type_identifier "undefined8") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "undefined1 *puVar3;" (type_identifier "undefined1") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "char cVar4;" (primitive_type "char") (identifier "cVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "undefined8 *puVar7;" (type_identifier "undefined8") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined8 uVar8;" (type_identifier "undefined8") (identifier "uVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "ulong uVar11;" (type_identifier "ulong") (identifier "uVar11") (; ";")) (declaration "byte *pbVar12;" (type_identifier "byte") (pointer_declarator "*pbVar12" (* "*") (identifier "pbVar12")) (; ";")) (declaration "long *plVar13;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar13" (* "*") (identifier "plVar13")) (; ";")) (declaration "byte *pbVar14;" (type_identifier "byte") (pointer_declarator "*pbVar14" (* "*") (identifier "pbVar14")) (; ";")) (declaration "long *plVar15;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar15" (* "*") (identifier "plVar15")) (; ";")) (declaration "undefined1 uVar16;" (type_identifier "undefined1") (identifier "uVar16") (; ";")) (declaration "undefined1 uVar17;" (type_identifier "undefined1") (identifier "uVar17") (; ";")) (declaration "byte bVar18;" (type_identifier "byte") (identifier "bVar18") (; ";")) (declaration "undefined1 *local_58 [2];" (type_identifier "undefined1") (pointer_declarator "*local_58 [2]" (* "*") (array_declarator "local_58 [2]" (identifier "local_58") ([ "[") (number_literal "2") (] "]"))) (; ";")) (declaration "undefined1 auStack_48 [24];" (type_identifier "undefined1") (array_declarator "auStack_48 [24]" (identifier "auStack_48") ([ "[") (number_literal "24") (] "]")) (; ";")) (expression_statement "bVar18 = 0;" (assignment_expression "bVar18 = 0" (identifier "bVar18") (= "=") (number_literal "0")) (; ";")) (expression_statement "cVar4 = FUN_00190ae0(param_1 + 0x10);" (assignment_expression "cVar4 = FUN_00190ae0(param_1 + 0x10)" (identifier "cVar4") (= "=") (call_expression "FUN_00190ae0(param_1 + 0x10)" (identifier "FUN_00190ae0") (argument_list "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (if_statement "if (cVar4 == '\0') {\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" (if "if") (parenthesized_expression "(cVar4 == '\0')" (( "(") (binary_expression "cVar4 == '\0'" (identifier "cVar4") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                    \n    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");\n  }" ({ "{") (expression_statement "FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");" (call_expression "FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol")" (identifier "FUN_0018dcf0") (argument_list "("../../gold/errors.cc",0xa9,"undefined_symbol")" (( "(") (string_literal ""../../gold/errors.cc"" (" """) (string_content "../../gold/errors.cc") (" """)) (, ",") (number_literal "0xa9") (, ",") (string_literal ""undefined_symbol"" (" """) (string_content "undefined_symbol") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "puVar1 = *(undefined8 **)(param_1 + 8);" (assignment_expression "puVar1 = *(undefined8 **)(param_1 + 8)" (identifier "puVar1") (= "=") (pointer_expression "*(undefined8 **)(param_1 + 8)" (* "*") (cast_expression "(undefined8 **)(param_1 + 8)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "(**(code **)(*(long *)*puVar1 + 0x10))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x10))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x10))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar1 + 0x10)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar1 + 0x10)" (* "*") (cast_expression "(code **)(*(long *)*puVar1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar1 + 0x10)" (( "(") (binary_expression "*(long *)*puVar1 + 0x10" (pointer_expression "*(long *)*puVar1" (* "*") (cast_expression "(long *)*puVar1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);" (assignment_expression "uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40)" (identifier "uVar11") (= "=") (binary_expression "(ulong)param_2 % *(ulong *)(param_1 + 0x40)" (cast_expression "(ulong)param_2" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_2")) (% "%") (pointer_expression "*(ulong *)(param_1 + 0x40)" (* "*") (cast_expression "(ulong *)(param_1 + 0x40)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))))) (; ";")) (expression_statement "plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);" (assignment_expression "plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" (identifier "plVar15") (= "=") (pointer_expression "*(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" (* "*") (cast_expression "(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x38) + uVar11 * 8)" (( "(") (binary_expression "*(long *)(param_1 + 0x38) + uVar11 * 8" (pointer_expression "*(long *)(param_1 + 0x38)" (* "*") (cast_expression "(long *)(param_1 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")")))) (+ "+") (binary_expression "uVar11 * 8" (identifier "uVar11") (* "*") (number_literal "8"))) () ")"))))) (; ";")) (if_statement "if (plVar15 != (long *)0x0) {\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }" (if "if") (parenthesized_expression "(plVar15 != (long *)0x0)" (( "(") (binary_expression "plVar15 != (long *)0x0" (identifier "plVar15") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    puVar7 = (undefined8 *)((long *)*plVar15)[1];\n    plVar2 = (long *)*plVar15;\n    do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));\n  }" ({ "{") (expression_statement "puVar7 = (undefined8 *)((long *)*plVar15)[1];" (assignment_expression "puVar7 = (undefined8 *)((long *)*plVar15)[1]" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)((long *)*plVar15)[1]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "((long *)*plVar15)[1]" (parenthesized_expression "((long *)*plVar15)" (( "(") (cast_expression "(long *)*plVar15" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar15" (* "*") (identifier "plVar15"))) () ")")) ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "plVar2 = (long *)*plVar15;" (assignment_expression "plVar2 = (long *)*plVar15" (identifier "plVar2") (= "=") (cast_expression "(long *)*plVar15" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar15" (* "*") (identifier "plVar15")))) (; ";")) (do_statement "do {\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));" (do "do") (compound_statement "{\n      plVar13 = plVar2;\n      if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }\n      plVar2 = (long *)*plVar13;\n      if (plVar2 == (long *)0x0) break;\n      puVar7 = (undefined8 *)plVar2[1];\n      plVar15 = plVar13;\n    }" ({ "{") (expression_statement "plVar13 = plVar2;" (assignment_expression "plVar13 = plVar2" (identifier "plVar13") (= "=") (identifier "plVar2")) (; ";")) (if_statement "if (puVar7 == param_2) {\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }" (if "if") (parenthesized_expression "(puVar7 == param_2)" (( "(") (binary_expression "puVar7 == param_2" (identifier "puVar7") (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n        lVar9 = *plVar15;\n        if (lVar9 != 0) goto LAB_00185928;\n        break;\n      }" ({ "{") (expression_statement "lVar9 = *plVar15;" (assignment_expression "lVar9 = *plVar15" (identifier "lVar9") (= "=") (pointer_expression "*plVar15" (* "*") (identifier "plVar15"))) (; ";")) (if_statement "if (lVar9 != 0) goto LAB_00185928;" (if "if") (parenthesized_expression "(lVar9 != 0)" (( "(") (binary_expression "lVar9 != 0" (identifier "lVar9") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00185928;" (goto "goto") (statement_identifier "LAB_00185928") (; ";"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "plVar2 = (long *)*plVar13;" (assignment_expression "plVar2 = (long *)*plVar13" (identifier "plVar2") (= "=") (cast_expression "(long *)*plVar13" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar13" (* "*") (identifier "plVar13")))) (; ";")) (if_statement "if (plVar2 == (long *)0x0) break;" (if "if") (parenthesized_expression "(plVar2 == (long *)0x0)" (( "(") (binary_expression "plVar2 == (long *)0x0" (identifier "plVar2") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar7 = (undefined8 *)plVar2[1];" (assignment_expression "puVar7 = (undefined8 *)plVar2[1]" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)plVar2[1]" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "plVar15 = plVar13;" (assignment_expression "plVar15 = plVar13" (identifier "plVar15") (= "=") (identifier "plVar13")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40))" (( "(") (binary_expression "uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40)" (identifier "uVar11") (== "==") (binary_expression "(ulong)puVar7 % *(ulong *)(param_1 + 0x40)" (cast_expression "(ulong)puVar7" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "puVar7")) (% "%") (pointer_expression "*(ulong *)(param_1 + 0x40)" (* "*") (cast_expression "(ulong *)(param_1 + 0x40)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))))) () ")")) (; ";")) (} "}"))) (expression_statement "puVar7 = (undefined8 *)FUN_002ee780(0x18);" (assignment_expression "puVar7 = (undefined8 *)FUN_002ee780(0x18)" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)FUN_002ee780(0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002ee780(0x18)" (identifier "FUN_002ee780") (argument_list "(0x18)" (( "(") (number_literal "0x18") () ")"))))) (; ";")) (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7[1] = param_2;" (assignment_expression "puVar7[1] = param_2" (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "*(undefined4 *)(puVar7 + 2) = 0;" (assignment_expression "*(undefined4 *)(puVar7 + 2) = 0" (pointer_expression "*(undefined4 *)(puVar7 + 2)" (* "*") (cast_expression "(undefined4 *)(puVar7 + 2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + 2)" (( "(") (binary_expression "puVar7 + 2" (identifier "puVar7") (+ "+") (number_literal "2")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);" (assignment_expression "lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1)" (identifier "lVar9") (= "=") (call_expression "FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1)" (identifier "FUN_001866c0") (argument_list "(param_1 + 0x38,uVar11,param_2,puVar7,1)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) (, ",") (identifier "uVar11") (, ",") (identifier "param_2") (, ",") (identifier "puVar7") (, ",") (number_literal "1") () ")")))) (; ";")) (labeled_statement "LAB_00185928:\n  iVar10 = *(int *)(lVar9 + 0x10) + 1;" (statement_identifier "LAB_00185928") (: ":") (expression_statement "iVar10 = *(int *)(lVar9 + 0x10) + 1;" (assignment_expression "iVar10 = *(int *)(lVar9 + 0x10) + 1" (identifier "iVar10") (= "=") (binary_expression "*(int *)(lVar9 + 0x10) + 1" (pointer_expression "*(int *)(lVar9 + 0x10)" (* "*") (cast_expression "(int *)(lVar9 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x10)" (( "(") (binary_expression "lVar9 + 0x10" (identifier "lVar9") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "*(int *)(lVar9 + 0x10) = iVar10;" (assignment_expression "*(int *)(lVar9 + 0x10) = iVar10" (pointer_expression "*(int *)(lVar9 + 0x10)" (* "*") (cast_expression "(int *)(lVar9 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x10)" (( "(") (binary_expression "lVar9 + 0x10" (identifier "lVar9") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "iVar10")) (; ";")) (if_statement "if (4 < iVar10) {\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }" (if "if") (parenthesized_expression "(4 < iVar10)" (( "(") (binary_expression "4 < iVar10" (number_literal "4") (< "<") (identifier "iVar10")) () ")")) (compound_statement "{\n    (**(code **)(*(long *)*puVar1 + 0x18))();\n    return;\n  }" ({ "{") (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar1 + 0x18)" (( "(") (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" (* "*") (cast_expression "(long *)*puVar1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" (if "if") (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) == 0" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" (( "(") (binary_expression "PTR_DAT_004586c8 + 0x10" (identifier "PTR_DAT_004586c8") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" ({ "{") (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" (identifier "FUN_0018dcf0") (argument_list "("../../gold/parameters.h",0x5c,"options")" (( "(") (string_literal ""../../gold/parameters.h"" (" """) (string_content "../../gold/parameters.h") (" """)) (, ",") (number_literal "0x5c") (, ",") (string_literal ""options"" (" """) (string_content "options") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }\n  else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" (if "if") (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0')" (( "(") (binary_expression "*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" (* "*") (cast_expression "(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421)" (( "(") (binary_expression "*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421" (pointer_expression "*(long *)(PTR_DAT_004586c8 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_004586c8 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_004586c8 + 0x10)" (( "(") (binary_expression "PTR_DAT_004586c8 + 0x10" (identifier "PTR_DAT_004586c8") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "0x7421")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;\n    uVar5 = gettext("error");\n  }" ({ "{") (expression_statement "*(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;" (assignment_expression "*(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1" (pointer_expression "*(int *)(param_1 + 0x30)" (* "*") (cast_expression "(int *)(param_1 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x30) + 1" (pointer_expression "*(int *)(param_1 + 0x30)" (* "*") (cast_expression "(int *)(param_1 + 0x30)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = gettext("error");" (assignment_expression "uVar5 = gettext("error")" (identifier "uVar5") (= "=") (call_expression "gettext("error")" (identifier "gettext") (argument_list "("error")" (( "(") (string_literal ""error"" (" """) (string_content "error") (" """)) () ")")))) (; ";")) (} "}")) (else_clause "else {\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" (else "else") (compound_statement "{\n    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;\n    uVar5 = gettext("warning");\n  }" ({ "{") (expression_statement "*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;" (assignment_expression "*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1" (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x34) + 1" (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = gettext("warning");" (assignment_expression "uVar5 = gettext("warning")" (identifier "uVar5") (= "=") (call_expression "gettext("warning")" (identifier "gettext") (argument_list "("warning")" (( "(") (string_literal ""warning"" (" """) (string_content "warning") (" """)) () ")")))) (; ";")) (} "}")))) (expression_statement "(**(code **)(*(long *)*puVar1 + 0x18))();" (call_expression "(**(code **)(*(long *)*puVar1 + 0x18))()" (parenthesized_expression "(**(code **)(*(long *)*puVar1 + 0x18))" (( "(") (pointer_expression "**(code **)(*(long *)*puVar1 + 0x18)" (* "*") (pointer_expression "*(code **)(*(long *)*puVar1 + 0x18)" (* "*") (cast_expression "(code **)(*(long *)*puVar1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*puVar1 + 0x18)" (( "(") (binary_expression "*(long *)*puVar1 + 0x18" (pointer_expression "*(long *)*puVar1" (* "*") (cast_expression "(long *)*puVar1" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar1" (* "*") (identifier "puVar1")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "lVar9 = param_2[1];" (assignment_expression "lVar9 = param_2[1]" (identifier "lVar9") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (lVar9 == 0) {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }\n  else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" (if "if") (parenthesized_expression "(lVar9 == 0)" (( "(") (binary_expression "lVar9 == 0" (identifier "lVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);\n  }" ({ "{") (expression_statement "FUN_00283d10(local_58,param_2);" (call_expression "FUN_00283d10(local_58,param_2)" (identifier "FUN_00283d10") (argument_list "(local_58,param_2)" (( "(") (identifier "local_58") (, ",") (identifier "param_2") () ")"))) (; ";")) (expression_statement "puVar3 = local_58[0];" (assignment_expression "puVar3 = local_58[0]" (identifier "puVar3") (= "=") (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]"))) (; ";")) (expression_statement "uVar8 = *param_3;" (assignment_expression "uVar8 = *param_3" (identifier "uVar8") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");" (assignment_expression "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n")" (identifier "pcVar6") (= "=") (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\'\n")" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "gettext("%s: %s: undefined reference to \'%s\'\n")" (identifier "gettext") (argument_list "("%s: %s: undefined reference to \'%s\'\n")" (( "(") (string_literal ""%s: %s: undefined reference to \'%s\'\n"" (" """) (string_content "%s: %s: undefined reference to ") (escape_sequence "\'") (string_content "%s") (escape_sequence "\'") (escape_sequence "\n") (" """)) () ")"))))) (; ";")) (expression_statement "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);" (call_expression "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3)" (identifier "fprintf") (argument_list "(stderr,pcVar6,uVar8,uVar5,puVar3)" (( "(") (identifier "stderr") (, ",") (identifier "pcVar6") (, ",") (identifier "uVar8") (, ",") (identifier "uVar5") (, ",") (identifier "puVar3") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" (else "else") (compound_statement "{\n    FUN_00283d10(local_58,param_2);\n    puVar3 = local_58[0];\n    uVar8 = *param_3;\n    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");\n                    \n    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);\n  }" ({ "{") (expression_statement "FUN_00283d10(local_58,param_2);" (call_expression "FUN_00283d10(local_58,param_2)" (identifier "FUN_00283d10") (argument_list "(local_58,param_2)" (( "(") (identifier "local_58") (, ",") (identifier "param_2") () ")"))) (; ";")) (expression_statement "puVar3 = local_58[0];" (assignment_expression "puVar3 = local_58[0]" (identifier "puVar3") (= "=") (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]"))) (; ";")) (expression_statement "uVar8 = *param_3;" (assignment_expression "uVar8 = *param_3" (identifier "uVar8") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");" (assignment_expression "pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" (identifier "pcVar6") (= "=") (cast_expression "(char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" (identifier "gettext") (argument_list "("%s: %s: undefined reference to \'%s\', version \'%s\'\n")" (( "(") (string_literal ""%s: %s: undefined reference to \'%s\', version \'%s\'\n"" (" """) (string_content "%s: %s: undefined reference to ") (escape_sequence "\'") (string_content "%s") (escape_sequence "\'") (string_content ", version ") (escape_sequence "\'") (string_content "%s") (escape_sequence "\'") (escape_sequence "\n") (" """)) () ")"))))) (; ";")) (expression_statement "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);" (call_expression "fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9)" (identifier "fprintf") (argument_list "(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9)" (( "(") (identifier "stderr") (, ",") (identifier "pcVar6") (, ",") (identifier "uVar8") (, ",") (identifier "uVar5") (, ",") (identifier "puVar3") (, ",") (identifier "lVar9") () ")"))) (; ";")) (} "}")))) (expression_statement "uVar16 = local_58[0] < auStack_48;" (assignment_expression "uVar16 = local_58[0] < auStack_48" (identifier "uVar16") (= "=") (binary_expression "local_58[0] < auStack_48" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (< "<") (identifier "auStack_48"))) (; ";")) (expression_statement "uVar17 = local_58[0] == auStack_48;" (assignment_expression "uVar17 = local_58[0] == auStack_48" (identifier "uVar17") (= "=") (binary_expression "local_58[0] == auStack_48" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (== "==") (identifier "auStack_48"))) (; ";")) (if_statement "if (!(bool)uVar17) {\n    FUN_002eff50();\n  }" (if "if") (parenthesized_expression "(!(bool)uVar17)" (( "(") (unary_expression "!(bool)uVar17" (! "!") (cast_expression "(bool)uVar17" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar17"))) () ")")) (compound_statement "{\n    FUN_002eff50();\n  }" ({ "{") (expression_statement "FUN_002eff50();" (call_expression "FUN_002eff50()" (identifier "FUN_002eff50") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar5 = DAT_004589b8;" (assignment_expression "uVar5 = DAT_004589b8" (identifier "uVar5") (= "=") (identifier "DAT_004589b8")) (; ";")) (expression_statement "lVar9 = 4;" (assignment_expression "lVar9 = 4" (identifier "lVar9") (= "=") (number_literal "4")) (; ";")) (expression_statement "pbVar12 = (byte *)0x3883dd;" (assignment_expression "pbVar12 = (byte *)0x3883dd" (identifier "pbVar12") (= "=") (cast_expression "(byte *)0x3883dd" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x3883dd"))) (; ";")) (expression_statement "pbVar14 = (byte *)*param_2;" (assignment_expression "pbVar14 = (byte *)*param_2" (identifier "pbVar14") (= "=") (cast_expression "(byte *)*param_2" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (do_statement "do {\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  } while ((bool)uVar17);" (do "do") (compound_statement "{\n    if (lVar9 == 0) break;\n    lVar9 = lVar9 + -1;\n    uVar16 = *pbVar12 < *pbVar14;\n    uVar17 = *pbVar12 == *pbVar14;\n    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;\n    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;\n  }" ({ "{") (if_statement "if (lVar9 == 0) break;" (if "if") (parenthesized_expression "(lVar9 == 0)" (( "(") (binary_expression "lVar9 == 0" (identifier "lVar9") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar9 = lVar9 + -1;" (assignment_expression "lVar9 = lVar9 + -1" (identifier "lVar9") (= "=") (binary_expression "lVar9 + -1" (identifier "lVar9") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar16 = *pbVar12 < *pbVar14;" (assignment_expression "uVar16 = *pbVar12 < *pbVar14" (identifier "uVar16") (= "=") (binary_expression "*pbVar12 < *pbVar14" (pointer_expression "*pbVar12" (* "*") (identifier "pbVar12")) (< "<") (pointer_expression "*pbVar14" (* "*") (identifier "pbVar14")))) (; ";")) (expression_statement "uVar17 = *pbVar12 == *pbVar14;" (assignment_expression "uVar17 = *pbVar12 == *pbVar14" (identifier "uVar17") (= "=") (binary_expression "*pbVar12 == *pbVar14" (pointer_expression "*pbVar12" (* "*") (identifier "pbVar12")) (== "==") (pointer_expression "*pbVar14" (* "*") (identifier "pbVar14")))) (; ";")) (expression_statement "pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;" (assignment_expression "pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1" (identifier "pbVar12") (= "=") (binary_expression "pbVar12 + (ulong)bVar18 * -2 + 1" (binary_expression "pbVar12 + (ulong)bVar18 * -2" (identifier "pbVar12") (+ "+") (binary_expression "(ulong)bVar18 * -2" (cast_expression "(ulong)bVar18" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar18")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;" (assignment_expression "pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1" (identifier "pbVar14") (= "=") (binary_expression "pbVar14 + (ulong)bVar18 * -2 + 1" (binary_expression "pbVar14 + (ulong)bVar18 * -2" (identifier "pbVar14") (+ "+") (binary_expression "(ulong)bVar18 * -2" (cast_expression "(ulong)bVar18" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar18")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((bool)uVar17)" (( "(") (cast_expression "(bool)uVar17" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar17")) () ")")) (; ";")) (if_statement "if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }" (if "if") (parenthesized_expression "((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16)" (( "(") (binary_expression "(!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16" (parenthesized_expression "(!(bool)uVar16 && !(bool)uVar17)" (( "(") (binary_expression "!(bool)uVar16 && !(bool)uVar17" (unary_expression "!(bool)uVar16" (! "!") (cast_expression "(bool)uVar16" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar16"))) (&& "&&") (unary_expression "!(bool)uVar17" (! "!") (cast_expression "(bool)uVar17" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar17")))) () ")")) (== "==") (cast_expression "(bool)uVar16" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar16"))) () ")")) (compound_statement "{\n    uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );\n    FUN_001857e0(uVar8,uVar5);\n  }" ({ "{") (expression_statement "uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   );" (assignment_expression "uVar8 = gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" (identifier "uVar8") (= "=") (call_expression "gettext(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" (identifier "gettext") (argument_list "(\n                   "%s: the vtable symbol may be undefined because the class is missing its key function"\n                   )" (( "(") (string_literal ""%s: the vtable symbol may be undefined because the class is missing its key function"" (" """) (string_content "%s: the vtable symbol may be undefined because the class is missing its key function") (" """)) () ")")))) (; ";")) (expression_statement "FUN_001857e0(uVar8,uVar5);" (call_expression "FUN_001857e0(uVar8,uVar5)" (identifier "FUN_001857e0") (argument_list "(uVar8,uVar5)" (( "(") (identifier "uVar8") (, ",") (identifier "uVar5") () ")"))) (; ";")) (} "}"))) (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }" (if "if") (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) == 0)" (( "(") (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" (( "(") (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" (* "*") (cast_expression "(byte *)((long)param_2 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x3a)" (( "(") (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }\n  }" ({ "{") (if_statement "if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }" (if "if") (parenthesized_expression "(*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00)" (( "(") (binary_expression "*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00" (pointer_expression "*(code **)(*(long *)param_2[2] + 0x28)" (* "*") (cast_expression "(code **)(*(long *)param_2[2] + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)param_2[2] + 0x28)" (( "(") (binary_expression "*(long *)param_2[2] + 0x28" (pointer_expression "*(long *)param_2[2]" (* "*") (cast_expression "(long *)param_2[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")))) (+ "+") (number_literal "0x28")) () ")")))) (!= "!=") (identifier "FUN_00170d00")) () ")")) (compound_statement "{\n      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();\n      uVar5 = DAT_004589b8;\n      if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }\n    }" ({ "{") (expression_statement "lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();" (assignment_expression "lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))()" (identifier "lVar9") (= "=") (call_expression "(**(code **)(*(long *)param_2[2] + 0x28))()" (parenthesized_expression "(**(code **)(*(long *)param_2[2] + 0x28))" (( "(") (pointer_expression "**(code **)(*(long *)param_2[2] + 0x28)" (* "*") (pointer_expression "*(code **)(*(long *)param_2[2] + 0x28)" (* "*") (cast_expression "(code **)(*(long *)param_2[2] + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)param_2[2] + 0x28)" (( "(") (binary_expression "*(long *)param_2[2] + 0x28" (pointer_expression "*(long *)param_2[2]" (* "*") (cast_expression "(long *)param_2[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")))) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar5 = DAT_004589b8;" (assignment_expression "uVar5 = DAT_004589b8" (identifier "uVar5") (= "=") (identifier "DAT_004589b8")) (; ";")) (if_statement "if (lVar9 != 0) {\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }" (if "if") (parenthesized_expression "(lVar9 != 0)" (( "(") (binary_expression "lVar9 != 0" (identifier "lVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar8 = gettext("%s: the symbol should have been defined by a plugin");\n        FUN_001857e0(uVar8,uVar5);\n        return;\n      }" ({ "{") (expression_statement "uVar8 = gettext("%s: the symbol should have been defined by a plugin");" (assignment_expression "uVar8 = gettext("%s: the symbol should have been defined by a plugin")" (identifier "uVar8") (= "=") (call_expression "gettext("%s: the symbol should have been defined by a plugin")" (identifier "gettext") (argument_list "("%s: the symbol should have been defined by a plugin")" (( "(") (string_literal ""%s: the symbol should have been defined by a plugin"" (" """) (string_content "%s: the symbol should have been defined by a plugin") (" """)) () ")")))) (; ";")) (expression_statement "FUN_001857e0(uVar8,uVar5);" (call_expression "FUN_001857e0(uVar8,uVar5)" (identifier "FUN_001857e0") (argument_list "(uVar8,uVar5)" (( "(") (identifier "uVar8") (, ",") (identifier "uVar5") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: void undefined_symbol(Errors * this, Symbol * sym, string * location)
    */

void __thiscall gold::type_1::function_1(type_1 *this,type_2 *var_13,type_3 *location)

{
  type_4 *pLVar1;
  type_5 var_10;
  type_6 *var_14;
  type_7 pcVar4;
  type_8 *var_34;
  type_9 _Var6;
  bool bVar7;
  int *piVar8;
  type_10 uVar9;
  char *pcVar10;
  char *var_23;
  type_11 *__node;
  var_1<var_2::pair<var_3::type_2*var_4,var_5>,var_6> var_7;
  type_12 extraout_var;
  long var_30;
  int var_21;
  type_5 var_15;
  type_2 *var_12;
  type_13 *var_31;
  type_14 p_Var17;
  type_13 *var_32;
  type_14 var_11;
  type_15 uVar20;
  type_15 uVar21;
  type_13 bVar22;
  type_3 local_58;
  
  bVar22 = 0;
  bVar7 = Initialize_lock::var_8(&this->initialize_lock_);
  if (!bVar7) {
                    /* WARNING: Subroutine does not return */
    var_9("../../gold/errors.cc",0xa9,"undefined_symbol");
  }
  pLVar1 = this->lock_;
  (*pLVar1->lock_->_vptr_Lock_impl[2])();
  var_10 = (this->undefined_symbols_)._M_h._M_bucket_count;
  var_15 = (type_5)var_13 % var_10;
  var_11 = (this->undefined_symbols_)._M_h._M_buckets[var_15];
  if (var_11 != (type_14)0x0) {
    var_12 = (type_2 *)var_11->_M_nxt[1]._M_nxt;
    var_14 = var_11->_M_nxt;
    while (p_Var17 = var_14, var_12 != var_13) {
      var_14 = p_Var17->_M_nxt;
      if ((var_14 == (type_6 *)0x0) ||
         (var_12 = (type_2 *)var_14[1]._M_nxt, var_11 = p_Var17, var_15 != (type_5)var_12 % var_10))
      goto LAB_00185ac0;
    }
    var_7._M_cur = (type_11 *)var_11->_M_nxt;
    if (var_7._M_cur != (type_11 *)0x0) goto LAB_00185928;
  }
LAB_00185ac0:
                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */
  __node = (type_11 *)var_16(0x18);
  (__node->super__Hash_node_value_base<var_2::pair<var_3::type_2*var_4,var_5>var_17>).
  super__Hash_node_base._M_nxt = (type_6 *)0x0;
  (__node->super__Hash_node_value_base<var_2::pair<var_3::type_2*var_4,var_5>var_17>)._M_storage.
  _M_storage.__align = (type_16)var_13;
  *(type_12 *)
   ((long)&(__node->super__Hash_node_value_base<var_2::pair<var_3::type_2*var_4,var_5>var_17>).
           _M_storage._M_storage + 8) = 0;
  var_7._M_cur =
       (type_11 *)
       var_2::
       _Hashtable<var_3::type_2*,_std::pair<var_3::type_2*var_4,var_5>,_std::var_26<var_2::pair<var_3::type_2*var_4,var_5>var_17>,_std::__detail::_Select1st,_std::equal_to<var_3::type_2*>,_std::hash<var_3::type_2*>,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::var_18<false,var_6,var_19>var_17>
       ::var_20(&(this->undefined_symbols_)._M_h,var_15,(type_17)var_13,__node,1);
LAB_00185928:
  piVar8 = (int *)((long)&((var_7._M_cur)->
                          super__Hash_node_value_base<var_2::pair<var_3::type_2*var_4,var_5>var_17>).
                          _M_storage._M_storage + 8);
  var_21 = *piVar8 + 1;
  *piVar8 = var_21;
  if (4 < var_21) {
    (*pLVar1->lock_->_vptr_Lock_impl[3])();
    return;
  }
  if (parameters->options_ == (type_18 *)0x0) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */
    var_9("../../gold/parameters.h",0x5c,"options");
  }
  if ((parameters->options_->warn_unresolved_symbols_).value == false) {
    this->error_count_ = this->error_count_ + 1;
    uVar9 = var_22("error");
  }
  else {
    this->warning_count_ = this->warning_count_ + 1;
    uVar9 = var_22("warning");
  }
  (*pLVar1->lock_->_vptr_Lock_impl[3])();
  var_23 = var_13->version_;
  if (var_23 == (char *)0x0) {
    Symbol::var_24(&local_58,var_13);
    _Var6._M_p = local_58._M_dataplus._M_p;
    pcVar4 = (location->_M_dataplus)._M_p;
    var_23 = (char *)var_22("%s: %s: undefined reference to \'%s\'\n");
                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */
    var_25(stderr,var_23,pcVar4,uVar9,_Var6._M_p);
  }
  else {
    Symbol::var_24(&local_58,var_13);
    _Var6._M_p = local_58._M_dataplus._M_p;
    pcVar4 = (location->_M_dataplus)._M_p;
    pcVar10 = (char *)var_22("%s: %s: undefined reference to \'%s\', version \'%s\'\n");
                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */
    var_25(stderr,pcVar10,pcVar4,uVar9,_Var6._M_p,var_23);
  }
  uVar20 = local_58._M_dataplus._M_p < &local_58.field_2;
  uVar21 = (anon_union_16_2_edb7204a_for_basic_string<var_27,_std::char_traits<var_27>,_std::var_26<var_27>var_17>var_28
            *)local_58._M_dataplus._M_p == &local_58.field_2;
  if (!(bool)uVar21) {
    var_29(local_58._M_dataplus._M_p);
  }
  var_23 = program_name;
  var_30 = 4;
  var_31 = (type_13 *)0x3883dd;
  var_32 = (type_13 *)var_13->name_;
  do {
    if (var_30 == 0) break;
    var_30 = var_30 + -1;
    uVar20 = *var_31 < *var_32;
    uVar21 = *var_31 == *var_32;
    var_31 = var_31 + (type_5)bVar22 * -2 + 1;
    var_32 = var_32 + (type_5)bVar22 * -2 + 1;
  } while ((bool)uVar21);
  if ((!(bool)uVar20 && !(bool)uVar21) == (bool)uVar20) {
    pcVar10 = (char *)var_22(
                             "%s: the vtable symbol may be undefined because the class is missing its key function"
                             );
    var_33(pcVar10,var_23);
  }
  if ((var_13->field_0x3a & 7) == 0) {
    var_34 = ((var_13->u1_).object)->_vptr_Object[5];
    if (var_34 != var_35::do_pluginobj) {
      var_21 = (*var_34)();
      var_23 = program_name;
      if (var_36(extraout_var,var_21) != 0) {
        pcVar10 = (char *)var_22("%s: the symbol should have been defined by a plugin");
        var_33(pcVar10,var_23);
        return;
      }
    }
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (array_declarator declarator: (identifier) size: (number_literal)))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) right: (number_literal))))))) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (parenthesized_expression (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (break_statement))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (identifier) (identifier) (number_literal))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) right: (number_literal))))))) arguments: (argument_list))) (return_statement))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) right: (number_literal))))))) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content) (escape_sequence) (escape_sequence))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (unary_expression argument: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (number_literal))))))) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (return_statement))))))) (return_statement))))

void MASKED(long param_1,undefined8 *param_2,undefined8 *param_3)

{
  undefined8 *puVar1;
  long *plVar2;
  undefined1 *puVar3;
  char cVar4;
  undefined8 uVar5;
  char *pcVar6;
  undefined8 *puVar7;
  undefined8 uVar8;
  long lVar9;
  int iVar10;
  ulong uVar11;
  byte *pbVar12;
  long *plVar13;
  byte *pbVar14;
  long *plVar15;
  undefined1 uVar16;
  undefined1 uVar17;
  byte bVar18;
  undefined1 *local_58 [2];
  undefined1 auStack_48 [24];
  
  bVar18 = 0;
  cVar4 = FUN_00190ae0(param_1 + 0x10);
  if (cVar4 == '\0') {
                    /* WARNING: Subroutine does not return */
    FUN_0018dcf0("../../gold/errors.cc",0xa9,"undefined_symbol");
  }
  puVar1 = *(undefined8 **)(param_1 + 8);
  (**(code **)(*(long *)*puVar1 + 0x10))();
  uVar11 = (ulong)param_2 % *(ulong *)(param_1 + 0x40);
  plVar15 = *(long **)(*(long *)(param_1 + 0x38) + uVar11 * 8);
  if (plVar15 != (long *)0x0) {
    puVar7 = (undefined8 *)((long *)*plVar15)[1];
    plVar2 = (long *)*plVar15;
    do {
      plVar13 = plVar2;
      if (puVar7 == param_2) {
        lVar9 = *plVar15;
        if (lVar9 != 0) goto LAB_00185928;
        break;
      }
      plVar2 = (long *)*plVar13;
      if (plVar2 == (long *)0x0) break;
      puVar7 = (undefined8 *)plVar2[1];
      plVar15 = plVar13;
    } while (uVar11 == (ulong)puVar7 % *(ulong *)(param_1 + 0x40));
  }
                    /* try { // try from 00185ac5 to 00185af3 has its CatchHandler @ 00185b72 */
  puVar7 = (undefined8 *)FUN_002ee780(0x18);
  *puVar7 = 0;
  puVar7[1] = param_2;
  *(undefined4 *)(puVar7 + 2) = 0;
  lVar9 = FUN_001866c0(param_1 + 0x38,uVar11,param_2,puVar7,1);
LAB_00185928:
  iVar10 = *(int *)(lVar9 + 0x10) + 1;
  *(int *)(lVar9 + 0x10) = iVar10;
  if (4 < iVar10) {
    (**(code **)(*(long *)*puVar1 + 0x18))();
    return;
  }
  if (*(long *)(PTR_DAT_004586c8 + 0x10) == 0) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 00185b65 to 00185b69 has its CatchHandler @ 00185b72 */
    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");
  }
  if (*(char *)(*(long *)(PTR_DAT_004586c8 + 0x10) + 0x7421) == '\0') {
    *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;
    uVar5 = gettext("error");
  }
  else {
    *(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;
    uVar5 = gettext("warning");
  }
  (**(code **)(*(long *)*puVar1 + 0x18))();
  lVar9 = param_2[1];
  if (lVar9 == 0) {
    FUN_00283d10(local_58,param_2);
    puVar3 = local_58[0];
    uVar8 = *param_3;
    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\'\n");
                    /* try { // try from 00185ab6 to 00185aba has its CatchHandler @ 00185b7a */
    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3);
  }
  else {
    FUN_00283d10(local_58,param_2);
    puVar3 = local_58[0];
    uVar8 = *param_3;
    pcVar6 = (char *)gettext("%s: %s: undefined reference to \'%s\', version \'%s\'\n");
                    /* try { // try from 001859c1 to 001859c5 has its CatchHandler @ 00185b6a */
    fprintf(stderr,pcVar6,uVar8,uVar5,puVar3,lVar9);
  }
  uVar16 = local_58[0] < auStack_48;
  uVar17 = local_58[0] == auStack_48;
  if (!(bool)uVar17) {
    FUN_002eff50();
  }
  uVar5 = DAT_004589b8;
  lVar9 = 4;
  pbVar12 = (byte *)0x3883dd;
  pbVar14 = (byte *)*param_2;
  do {
    if (lVar9 == 0) break;
    lVar9 = lVar9 + -1;
    uVar16 = *pbVar12 < *pbVar14;
    uVar17 = *pbVar12 == *pbVar14;
    pbVar12 = pbVar12 + (ulong)bVar18 * -2 + 1;
    pbVar14 = pbVar14 + (ulong)bVar18 * -2 + 1;
  } while ((bool)uVar17);
  if ((!(bool)uVar16 && !(bool)uVar17) == (bool)uVar16) {
    uVar8 = gettext(
                   "%s: the vtable symbol may be undefined because the class is missing its key function"
                   );
    FUN_001857e0(uVar8,uVar5);
  }
  if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {
    if (*(code **)(*(long *)param_2[2] + 0x28) != FUN_00170d00) {
      lVar9 = (**(code **)(*(long *)param_2[2] + 0x28))();
      uVar5 = DAT_004589b8;
      if (lVar9 != 0) {
        uVar8 = gettext("%s: the symbol should have been defined by a plugin");
        FUN_001857e0(uVar8,uVar5);
        return;
      }
    }
  }
  return;
}

