
/* DWARF original prototype: void visit(Global_got_offset_visitor<64,_false> * this, uint got_type,
   uint got_offset) */

void __thiscall
gold::Global_got_offset_visitor<64,_false>::visit
          (Global_got_offset_visitor<64,_false> *this,uint got_type,uint got_offset)

{
  Got_plt_view_info *pGVar1;
  ulong uVar2;
  uint uVar3;
  uint *puVar4;
  
  pGVar1 = this->info_;
  uVar2 = (ulong)got_offset / (ulong)pGVar1->got_entry_size;
  uVar3 = (uint)uVar2;
  if (pGVar1->got_count <= uVar3) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/incremental.cc",0x75d,"visit");
  }
  if (got_type < 0x7f) {
    pGVar1->got_type_p[uVar2] = (uchar)got_type;
    puVar4 = (uint *)(this->info_->got_desc_p + (uVar3 << 3));
    uVar3 = this->info_->sym_index;
    puVar4[1] = 0;
    *puVar4 = uVar3;
    return;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/incremental.cc",0x761,"visit");
}



void FUN_00176240(long param_1,uint param_2,uint param_3)

{
  undefined4 uVar1;
  long *plVar2;
  uint uVar3;
  undefined4 *puVar4;
  
  plVar2 = *(long **)(param_1 + 8);
  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));
  if (*(uint *)(plVar2 + 3) <= uVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");
  }
  if (param_2 < 0x7f) {
    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;
    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));
    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);
    puVar4[1] = 0;
    *puVar4 = uVar1;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");
}


SUB RSP,0x8
MOV RCX,qword ptr [RDI + 0x8]
MOV EAX,EDX
XOR EDX,EDX
DIV dword ptr [RCX + 0x28]
CMP dword ptr [RCX + 0x18],EAX
JBE 0x0017627e
CMP ESI,0x7e
JA 0x00176296
MOV RCX,qword ptr [RCX]
MOV EDX,EAX
SHL EAX,0x3
MOV byte ptr [RCX + RDX*0x1],SIL
MOV RDX,qword ptr [RDI + 0x8]
ADD RAX,qword ptr [RDX + 0x8]
MOV EDX,dword ptr [RDX + 0x2c]
MOV dword ptr [RAX + 0x4],0x0
MOV dword ptr [RAX],EDX
ADD RSP,0x8
RET
LEA RDX,[0x30fc2a]
MOV ESI,0x75d
LEA RDI,[0x30ea08]
CALL 0x0016cdf0
LEA RDX,[0x30fc2a]
MOV ESI,0x761
LEA RDI,[0x30ea08]
CALL 0x0016cdf0
(translation_unit "void FUN_00176240(long param_1,uint param_2,uint param_3)\n\n{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}\n\n" (function_definition "void FUN_00176240(long param_1,uint param_2,uint param_3)\n\n{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}" primitive_type (function_declarator "FUN_00176240(long param_1,uint param_2,uint param_3)" identifier (parameter_list "(long param_1,uint param_2,uint param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (expression_statement "plVar2 = *(long **)(param_1 + 8);" (assignment_expression "plVar2 = *(long **)(param_1 + 8)" identifier = (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));" (assignment_expression "uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" identifier = (call_expression "(uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" ( (binary_expression "(ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (binary_expression "(ulong)param_3 / (ulong)" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(uint *)(plVar2 + 5)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2 + 5)" ( (binary_expression "plVar2 + 5" identifier + number_literal) )))) )))) ;) (if_statement "if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }" if (parenthesized_expression "(*(uint *)(plVar2 + 3) <= uVar3)" ( (binary_expression "*(uint *)(plVar2 + 3) <= uVar3" (pointer_expression "*(uint *)(plVar2 + 3)" * (cast_expression "(uint *)(plVar2 + 3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2 + 3)" ( (binary_expression "plVar2 + 3" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }" { comment (expression_statement "FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");" (call_expression "FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit")" identifier (argument_list "("../../gold/incremental.cc",0x75d,"visit")" ( (string_literal ""../../gold/incremental.cc"" " string_content ") , number_literal , (string_literal ""visit"" " string_content ") ))) ;) })) (if_statement "if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }" if (parenthesized_expression "(param_2 < 0x7f)" ( (binary_expression "param_2 < 0x7f" identifier < number_literal) )) (compound_statement "{\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }" { (expression_statement "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;" (assignment_expression "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2" (pointer_expression "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" * (cast_expression "(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" ( (binary_expression "*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (pointer_expression "*plVar2" * identifier) + (binary_expression "(ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (binary_expression "(ulong)param_3 / (ulong)" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(uint *)(plVar2 + 5)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2 + 5)" ( (binary_expression "plVar2 + 5" identifier + number_literal) ))))) )))) = (cast_expression "(char)param_2" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));" (assignment_expression "puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" identifier = (cast_expression "(undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" ( (binary_expression "(ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8)" (call_expression "(ulong)(uVar3 << 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 << 3)" ( (binary_expression "uVar3 << 3" identifier << number_literal) ))) + (pointer_expression "*(long *)(*(long *)(param_1 + 8) + 8)" * (cast_expression "(long *)(*(long *)(param_1 + 8) + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 8) + 8)" ( (binary_expression "*(long *)(param_1 + 8) + 8" (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + number_literal) ))))) )))) ;) (expression_statement "uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);" (assignment_expression "uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" * (cast_expression "(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 8) + 0x2c)" ( (binary_expression "*(long *)(param_1 + 8) + 0x2c" (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (return_statement "return;" return ;) })) comment (expression_statement "FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");" (call_expression "FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit")" identifier (argument_list "("../../gold/incremental.cc",0x761,"visit")" ( (string_literal ""../../gold/incremental.cc"" " string_content ") , number_literal , (string_literal ""visit"" " string_content ") ))) ;) })))
(translation_unit "/* DWARF original prototype: void visit(Global_got_offset_visitor<64,_false> * this, uint got_type,\n   uint got_offset) */\n\nvoid __thiscall\ngold::Global_got_offset_visitor<64,_false>::visit\n          (Global_got_offset_visitor<64,_false> *this,uint got_type,uint got_offset)\n\n{\n  Got_plt_view_info *pGVar1;\n  ulong uVar2;\n  uint uVar3;\n  uint *puVar4;\n  \n  pGVar1 = this->info_;\n  uVar2 = (ulong)got_offset / (ulong)pGVar1->got_entry_size;\n  uVar3 = (uint)uVar2;\n  if (pGVar1->got_count <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (got_type < 0x7f) {\n    pGVar1->got_type_p[uVar2] = (uchar)got_type;\n    puVar4 = (uint *)(this->info_->got_desc_p + (uVar3 << 3));\n    uVar3 = this->info_->sym_index;\n    puVar4[1] = 0;\n    *puVar4 = uVar3;\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/incremental.cc",0x761,"visit");\n}\n\n" comment (declaration "void __thiscall\ngold::Global_got_offset_visitor<64,_false>::visit\n          (Global_got_offset_visitor<64,_false> *this,uint got_type,uint got_offset)\n\n{\n  Got_plt_view_info *pGVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<64" < number_literal) , (ERROR "_false>::visit\n          (Global_got_offset_visitor<64,_false> *this,uint got_type,uint got_offset)\n\n{\n  Got_plt_view_info" (function_declarator "_false>::visit\n          (Global_got_offset_visitor<64,_false> *this,uint got_type,uint got_offset)" identifier (ERROR ">::visit" > : : identifier) (parameter_list "(Global_got_offset_visitor<64,_false> *this,uint got_type,uint got_offset)" ( (parameter_declaration "Global_got_offset_visitor" type_identifier) (ERROR "<64" < number_literal) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "uint got_type" type_identifier identifier) , (parameter_declaration "uint got_offset" type_identifier identifier) ))) { identifier) (pointer_declarator "*pGVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (expression_statement "pGVar1 = this->info_;" (assignment_expression "pGVar1 = this->info_" identifier = (field_expression "this->info_" identifier -> field_identifier)) ;) (expression_statement "uVar2 = (ulong)got_offset / (ulong)pGVar1->got_entry_size;" (assignment_expression "uVar2 = (ulong)got_offset / (ulong)pGVar1->got_entry_size" identifier = (binary_expression "(ulong)got_offset / (ulong)pGVar1->got_entry_size" (cast_expression "(ulong)got_offset" ( (type_descriptor "ulong" type_identifier) ) identifier) / (cast_expression "(ulong)pGVar1->got_entry_size" ( (type_descriptor "ulong" type_identifier) ) (field_expression "pGVar1->got_entry_size" identifier -> field_identifier)))) ;) (expression_statement "uVar3 = (uint)uVar2;" (assignment_expression "uVar3 = (uint)uVar2" identifier = (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (pGVar1->got_count <= uVar3) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/incremental.cc",0x75d,"visit");\n  }" if (parenthesized_expression "(pGVar1->got_count <= uVar3)" ( (binary_expression "pGVar1->got_count <= uVar3" (field_expression "pGVar1->got_count" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/incremental.cc",0x75d,"visit");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/incremental.cc",0x75d,"visit");" (call_expression "do_gold_unreachable("../../gold/incremental.cc",0x75d,"visit")" identifier (argument_list "("../../gold/incremental.cc",0x75d,"visit")" ( (string_literal ""../../gold/incremental.cc"" " string_content ") , number_literal , (string_literal ""visit"" " string_content ") ))) ;) })) (if_statement "if (got_type < 0x7f) {\n    pGVar1->got_type_p[uVar2] = (uchar)got_type;\n    puVar4 = (uint *)(this->info_->got_desc_p + (uVar3 << 3));\n    uVar3 = this->info_->sym_index;\n    puVar4[1] = 0;\n    *puVar4 = uVar3;\n    return;\n  }" if (parenthesized_expression "(got_type < 0x7f)" ( (binary_expression "got_type < 0x7f" identifier < number_literal) )) (compound_statement "{\n    pGVar1->got_type_p[uVar2] = (uchar)got_type;\n    puVar4 = (uint *)(this->info_->got_desc_p + (uVar3 << 3));\n    uVar3 = this->info_->sym_index;\n    puVar4[1] = 0;\n    *puVar4 = uVar3;\n    return;\n  }" { (expression_statement "pGVar1->got_type_p[uVar2] = (uchar)got_type;" (assignment_expression "pGVar1->got_type_p[uVar2] = (uchar)got_type" (subscript_expression "pGVar1->got_type_p[uVar2]" (field_expression "pGVar1->got_type_p" identifier -> field_identifier) [ identifier ]) = (cast_expression "(uchar)got_type" ( (type_descriptor "uchar" type_identifier) ) identifier)) ;) (expression_statement "puVar4 = (uint *)(this->info_->got_desc_p + (uVar3 << 3));" (assignment_expression "puVar4 = (uint *)(this->info_->got_desc_p + (uVar3 << 3))" identifier = (cast_expression "(uint *)(this->info_->got_desc_p + (uVar3 << 3))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this->info_->got_desc_p + (uVar3 << 3))" ( (binary_expression "this->info_->got_desc_p + (uVar3 << 3)" (field_expression "this->info_->got_desc_p" (field_expression "this->info_" identifier -> field_identifier) -> field_identifier) + (parenthesized_expression "(uVar3 << 3)" ( (binary_expression "uVar3 << 3" identifier << number_literal) ))) )))) ;) (expression_statement "uVar3 = this->info_->sym_index;" (assignment_expression "uVar3 = this->info_->sym_index" identifier = (field_expression "this->info_->sym_index" (field_expression "this->info_" identifier -> field_identifier) -> field_identifier)) ;) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar4 = uVar3;" (assignment_expression "*puVar4 = uVar3" (pointer_expression "*puVar4" * identifier) = identifier) ;) (return_statement "return;" return ;) })) comment (expression_statement "do_gold_unreachable("../../gold/incremental.cc",0x761,"visit");" (call_expression "do_gold_unreachable("../../gold/incremental.cc",0x761,"visit")" identifier (argument_list "("../../gold/incremental.cc",0x761,"visit")" ( (string_literal ""../../gold/incremental.cc"" " string_content ") , number_literal , (string_literal ""visit"" " string_content ") ))) ;) (ERROR "}" }))
(translation_unit "void FUN_00176240(long param_1,uint param_2,uint param_3)\n\n{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    \n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}\n\n" (function_definition "void FUN_00176240(long param_1,uint param_2,uint param_3)\n\n{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    \n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}" primitive_type (function_declarator "FUN_00176240(long param_1,uint param_2,uint param_3)" identifier (parameter_list "(long param_1,uint param_2,uint param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    \n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (expression_statement "plVar2 = *(long **)(param_1 + 8);" (assignment_expression "plVar2 = *(long **)(param_1 + 8)" identifier = (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));" (assignment_expression "uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" identifier = (call_expression "(uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" ( (binary_expression "(ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (binary_expression "(ulong)param_3 / (ulong)" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(uint *)(plVar2 + 5)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2 + 5)" ( (binary_expression "plVar2 + 5" identifier + number_literal) )))) )))) ;) (if_statement "if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }" if (parenthesized_expression "(*(uint *)(plVar2 + 3) <= uVar3)" ( (binary_expression "*(uint *)(plVar2 + 3) <= uVar3" (pointer_expression "*(uint *)(plVar2 + 3)" * (cast_expression "(uint *)(plVar2 + 3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2 + 3)" ( (binary_expression "plVar2 + 3" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }" { (expression_statement "FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");" (call_expression "FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit")" identifier (argument_list "("../../gold/incremental.cc",0x75d,"visit")" ( (string_literal ""../../gold/incremental.cc"" " string_content ") , number_literal , (string_literal ""visit"" " string_content ") ))) ;) })) (if_statement "if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }" if (parenthesized_expression "(param_2 < 0x7f)" ( (binary_expression "param_2 < 0x7f" identifier < number_literal) )) (compound_statement "{\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }" { (expression_statement "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;" (assignment_expression "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2" (pointer_expression "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" * (cast_expression "(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" ( (binary_expression "*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (pointer_expression "*plVar2" * identifier) + (binary_expression "(ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (binary_expression "(ulong)param_3 / (ulong)" (cast_expression "(ulong)param_3" ( (type_descriptor "ulong" type_identifier) ) identifier) / (parenthesized_expression "(ulong)" ( identifier ))) * (cast_expression "(uint *)(plVar2 + 5)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar2 + 5)" ( (binary_expression "plVar2 + 5" identifier + number_literal) ))))) )))) = (cast_expression "(char)param_2" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));" (assignment_expression "puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" identifier = (cast_expression "(undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" ( (binary_expression "(ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8)" (call_expression "(ulong)(uVar3 << 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar3 << 3)" ( (binary_expression "uVar3 << 3" identifier << number_literal) ))) + (pointer_expression "*(long *)(*(long *)(param_1 + 8) + 8)" * (cast_expression "(long *)(*(long *)(param_1 + 8) + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 8) + 8)" ( (binary_expression "*(long *)(param_1 + 8) + 8" (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + number_literal) ))))) )))) ;) (expression_statement "uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);" (assignment_expression "uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" * (cast_expression "(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 8) + 0x2c)" ( (binary_expression "*(long *)(param_1 + 8) + 0x2c" (pointer_expression "*(long *)(param_1 + 8)" * (cast_expression "(long *)(param_1 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" * identifier) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");" (call_expression "FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit")" identifier (argument_list "("../../gold/incremental.cc",0x761,"visit")" ( (string_literal ""../../gold/incremental.cc"" " string_content ") , number_literal , (string_literal ""visit"" " string_content ") ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (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 IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) / (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (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 IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) / (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT << LIT) ))) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (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) ))))) )))) ;) (expression_statement (assignment_expression IDENT = (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) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })))
(function_definition "void FUN_00176240(long param_1,uint param_2,uint param_3)\n\n{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    \n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}" (primitive_type "void") (function_declarator "FUN_00176240(long param_1,uint param_2,uint param_3)" (identifier "FUN_00176240") (parameter_list "(long param_1,uint param_2,uint param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  long *plVar2;\n  uint uVar3;\n  undefined4 *puVar4;\n  \n  plVar2 = *(long **)(param_1 + 8);\n  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));\n  if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }\n  if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }\n                    \n  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (expression_statement "plVar2 = *(long **)(param_1 + 8);" (assignment_expression "plVar2 = *(long **)(param_1 + 8)" (identifier "plVar2") (= "=") (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));" (assignment_expression "uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (identifier "uVar3") (= "=") (call_expression "(uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (( "(") (binary_expression "(ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (binary_expression "(ulong)param_3 / (ulong)" (cast_expression "(ulong)param_3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_3")) (/ "/") (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")"))) (* "*") (cast_expression "(uint *)(plVar2 + 5)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar2 + 5)" (( "(") (binary_expression "plVar2 + 5" (identifier "plVar2") (+ "+") (number_literal "5")) () ")")))) () ")")))) (; ";")) (if_statement "if (*(uint *)(plVar2 + 3) <= uVar3) {\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }" (if "if") (parenthesized_expression "(*(uint *)(plVar2 + 3) <= uVar3)" (( "(") (binary_expression "*(uint *)(plVar2 + 3) <= uVar3" (pointer_expression "*(uint *)(plVar2 + 3)" (* "*") (cast_expression "(uint *)(plVar2 + 3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar2 + 3)" (( "(") (binary_expression "plVar2 + 3" (identifier "plVar2") (+ "+") (number_literal "3")) () ")")))) (<= "<=") (identifier "uVar3")) () ")")) (compound_statement "{\n                    \n    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");\n  }" ({ "{") (expression_statement "FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");" (call_expression "FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit")" (identifier "FUN_0016cdf0") (argument_list "("../../gold/incremental.cc",0x75d,"visit")" (( "(") (string_literal ""../../gold/incremental.cc"" (" """) (string_content "../../gold/incremental.cc") (" """)) (, ",") (number_literal "0x75d") (, ",") (string_literal ""visit"" (" """) (string_content "visit") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_2 < 0x7f) {\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 < 0x7f)" (( "(") (binary_expression "param_2 < 0x7f" (identifier "param_2") (< "<") (number_literal "0x7f")) () ")")) (compound_statement "{\n    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;\n    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));\n    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);\n    puVar4[1] = 0;\n    *puVar4 = uVar1;\n    return;\n  }" ({ "{") (expression_statement "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;" (assignment_expression "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2" (pointer_expression "*(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (* "*") (cast_expression "(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5))" (( "(") (binary_expression "*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (+ "+") (binary_expression "(ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)" (binary_expression "(ulong)param_3 / (ulong)" (cast_expression "(ulong)param_3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "param_3")) (/ "/") (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")"))) (* "*") (cast_expression "(uint *)(plVar2 + 5)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar2 + 5)" (( "(") (binary_expression "plVar2 + 5" (identifier "plVar2") (+ "+") (number_literal "5")) () ")"))))) () ")")))) (= "=") (cast_expression "(char)param_2" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_2"))) (; ";")) (expression_statement "puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));" (assignment_expression "puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8))" (( "(") (binary_expression "(ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8)" (call_expression "(ulong)(uVar3 << 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar3 << 3)" (( "(") (binary_expression "uVar3 << 3" (identifier "uVar3") (<< "<<") (number_literal "3")) () ")"))) (+ "+") (pointer_expression "*(long *)(*(long *)(param_1 + 8) + 8)" (* "*") (cast_expression "(long *)(*(long *)(param_1 + 8) + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 8) + 8)" (( "(") (binary_expression "*(long *)(param_1 + 8) + 8" (pointer_expression "*(long *)(param_1 + 8)" (* "*") (cast_expression "(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "8")) () ")"))))) () ")")))) (; ";")) (expression_statement "uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);" (assignment_expression "uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" (* "*") (cast_expression "(undefined4 *)(*(long *)(param_1 + 8) + 0x2c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 8) + 0x2c)" (( "(") (binary_expression "*(long *)(param_1 + 8) + 0x2c" (pointer_expression "*(long *)(param_1 + 8)" (* "*") (cast_expression "(long *)(param_1 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (number_literal "0x2c")) () ")"))))) (; ";")) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar4 = uVar1;" (assignment_expression "*puVar4 = uVar1" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (identifier "uVar1")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");" (call_expression "FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit")" (identifier "FUN_0016cdf0") (argument_list "("../../gold/incremental.cc",0x761,"visit")" (( "(") (string_literal ""../../gold/incremental.cc"" (" """) (string_content "../../gold/incremental.cc") (" """)) (, ",") (number_literal "0x761") (, ",") (string_literal ""visit"" (" """) (string_content "visit") (" """)) () ")"))) (; ";")) (} "}")))

/* DWARF original prototype: void visit(Global_got_offset_visitor<64,_false> * this, uint got_type,
   uint got_offset) */

void __thiscall
gold::Global_got_offset_visitor<64,_false>::visit
          (Global_got_offset_visitor<64,_false> *this,type_2 var_3,type_2 got_offset)

{
  Got_plt_view_info *pGVar1;
  type_1 uVar2;
  type_2 var_1;
  type_2 *puVar4;
  
  pGVar1 = this->info_;
  uVar2 = (type_1)got_offset / (type_1)pGVar1->got_entry_size;
  var_1 = (type_2)uVar2;
  if (pGVar1->got_count <= var_1) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/incremental.cc",0x75d,"visit");
  }
  if (var_3 < 0x7f) {
    pGVar1->got_type_p[uVar2] = (type_3)var_3;
    puVar4 = (type_2 *)(this->info_->got_desc_p + (var_1 << 3));
    var_1 = this->info_->sym_index;
    puVar4[1] = 0;
    *puVar4 = var_1;
    return;
  }
                    /* WARNING: Subroutine does not return */
  var_2("../../gold/incremental.cc",0x761,"visit");
}


(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: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (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: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (if_statement condition: (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: (identifier) right: (number_literal))))) right: (identifier))) 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: (identifier) right: (number_literal))) 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: (pointer_expression argument: (identifier)) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (parenthesized_expression (identifier))) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) 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)))))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) 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))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))))

void MASKED(long param_1,uint param_2,uint param_3)

{
  undefined4 uVar1;
  long *plVar2;
  uint uVar3;
  undefined4 *puVar4;
  
  plVar2 = *(long **)(param_1 + 8);
  uVar3 = (uint)((ulong)param_3 / (ulong)*(uint *)(plVar2 + 5));
  if (*(uint *)(plVar2 + 3) <= uVar3) {
                    /* WARNING: Subroutine does not return */
    FUN_0016cdf0("../../gold/incremental.cc",0x75d,"visit");
  }
  if (param_2 < 0x7f) {
    *(char *)(*plVar2 + (ulong)param_3 / (ulong)*(uint *)(plVar2 + 5)) = (char)param_2;
    puVar4 = (undefined4 *)((ulong)(uVar3 << 3) + *(long *)(*(long *)(param_1 + 8) + 8));
    uVar1 = *(undefined4 *)(*(long *)(param_1 + 8) + 0x2c);
    puVar4[1] = 0;
    *puVar4 = uVar1;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0016cdf0("../../gold/incremental.cc",0x761,"visit");
}

