
/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* DWARF original prototype: void Output_reloc(Output_reloc<9,_true,_32,_false> * this,
   Output_section * os, uint type, Sized_relobj<32,_false> * relobj, uint shndx, Address address,
   bool is_relative) */

void __thiscall
gold::Output_reloc<9,_true,_32,_false>::Output_reloc
          (Output_reloc<9,_true,_32,_false> *this,Output_section *os,uint type,
          Sized_relobj<32,_false> *relobj,uint shndx,Address address,bool is_relative)

{
  uint uVar1;
  undefined4 uVar2;
  
  this->local_sym_index_ = 0xfffffffe;
  uVar1 = *(uint *)&this->field_0x10 & 3 | type << 4 | (is_relative & 1) << 3 |
          (is_relative & 1) << 2;
  this->shndx_ = shndx;
  *(uint *)&this->field_0x10 = uVar1;
  this->address_ = address;
  this->field_0x13 = (byte)uVar1 & 0xfc | 2;
  if (shndx == 0xfffffffc) {
    uVar2 = 0x356;
    goto LAB_001981a0;
  }
  if (type == (type & 0xfffffff)) {
    (this->u1_).os = os;
    (this->u2_).relobj = relobj;
    set_needs_dynsym_index(this);
    return;
  }
  do {
    uVar2 = 0x358;
LAB_001981a0:
    (*(code *)PTR_do_gold_unreachable_004323c4)
              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);
  } while( true );
}



/* gold::Output_reloc<9, true, 32, false>::Output_reloc(gold::Output_section*, unsigned int,
   gold::Sized_relobj<32, false>*, unsigned int, unsigned int, bool) */

void __thiscall
gold::Output_reloc<9,true,32,false>::Output_reloc
          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,
          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)

{
  uint uVar1;
  undefined4 uVar2;
  
  *(undefined4 *)(this + 0xc) = 0xfffffffe;
  uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;
  *(uint *)(this + 0x14) = param_4;
  *(uint *)(this + 0x10) = uVar1;
  *(uint *)(this + 8) = param_5;
  this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2);
  if (param_4 == 0xfffffffc) {
    uVar2 = 0x356;
    goto LAB_001981a0;
  }
  if (param_2 == (param_2 & 0xfffffff)) {
    *(Output_section **)this = param_1;
    *(Sized_relobj **)(this + 4) = param_3;
    set_needs_dynsym_index(this);
    return;
  }
  do {
    uVar2 = 0x358;
LAB_001981a0:
    (*(code *)PTR_do_gold_unreachable_004323c4)
              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);
  } while( true );
}


lui gp,0x2a
addiu gp,gp,0x20b0
addu gp,gp,t9
addiu sp,sp,-0x20
lw v0,0x10(a0)
li t3,-0x2
li t1,-0x4
lbu t0,0x3b(sp)
ins v0,a2,0x4,0x1c
lw t2,0x30(sp)
sw gp,0x10(sp)
ins v0,t0,0x3,0x1
sw ra,0x1c(sp)
sw t3,0xc(a0)
ins v0,t0,0x2,0x1
sw t2,0x14(a0)
lw t3,0x34(sp)
and t0,v0,t1
sw v0,0x10(a0)
ori v0,t0,0x2
sw t3,0x8(a0)
beq t2,t1,0x0019819c
_sb v0,0x13(a0)
ext v0,a2,0x0,0x1c
bne a2,v0,0x001981b8
_lw ra,0x1c(sp)
lw t9,-0x5948(gp)
sw a1,0x0(a0)
sw a3,0x4(a0)
b 0x00197c20
_addiu sp,sp,0x20
li a1,0x356
lw a2,-0x7e1c(gp)
lw a0,-0x7e1c(gp)
lw t9,-0x7e0c(gp)
addiu a2,a2,0x68c8
jalr t9
_addiu a0,a0,0x59f0
b 0x001981a0
_li a1,0x358
(translation_unit "/* gold::Output_reloc<9, true, 32, false>::Output_reloc(gold::Output_section*, unsigned int,\n   gold::Sized_relobj<32, false>*, unsigned int, unsigned int, bool) */\n\nvoid __thiscall\ngold::Output_reloc<9,true,32,false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  \n  *(undefined4 *)(this + 0xc) = 0xfffffffe;\n  uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;\n  *(uint *)(this + 0x14) = param_4;\n  *(uint *)(this + 0x10) = uVar1;\n  *(uint *)(this + 8) = param_5;\n  this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2);\n  if (param_4 == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }\n  if (param_2 == (param_2 & 0xfffffff)) {\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }\n  do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );\n}\n\n" comment (declaration "void __thiscall\ngold::Output_reloc<9,true,32,false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint uVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<9" < number_literal) , identifier (ERROR ",32" , number_literal) , (ERROR "false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint" identifier > : : (function_declarator "Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)" identifier (parameter_list "(Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)" ( (parameter_declaration "Output_reloc" type_identifier) (ERROR "<9" < number_literal) , (parameter_declaration "true" type_identifier) (ERROR ",32" , number_literal) , (parameter_declaration "false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_section *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "Sized_relobj *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "uint param_5" type_identifier identifier) , (parameter_declaration "bool param_6" primitive_type identifier) ))) { identifier) identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "*(undefined4 *)(this + 0xc) = 0xfffffffe;" (assignment_expression "*(undefined4 *)(this + 0xc) = 0xfffffffe" (pointer_expression "*(undefined4 *)(this + 0xc)" * (cast_expression "(undefined4 *)(this + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;" (assignment_expression "uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2" identifier = (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2" (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3" (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4" (binary_expression "*(uint *)(this + 0x10) & 3" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) & number_literal) | (binary_expression "param_2 << 4" identifier << number_literal)) | (binary_expression "(param_6 & 1) << 3" (parenthesized_expression "(param_6 & 1)" ( (binary_expression "param_6 & 1" identifier & number_literal) )) << number_literal)) | (binary_expression "(param_6 & 1) << 2" (parenthesized_expression "(param_6 & 1)" ( (binary_expression "param_6 & 1" identifier & number_literal) )) << number_literal))) ;) (expression_statement "*(uint *)(this + 0x14) = param_4;" (assignment_expression "*(uint *)(this + 0x14) = param_4" (pointer_expression "*(uint *)(this + 0x14)" * (cast_expression "(uint *)(this + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(this + 0x10) = uVar1;" (assignment_expression "*(uint *)(this + 0x10) = uVar1" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(this + 8) = param_5;" (assignment_expression "*(uint *)(this + 8) = param_5" (pointer_expression "*(uint *)(this + 8)" * (cast_expression "(uint *)(this + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2);" (assignment_expression "this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2)" (subscript_expression "this[0x13]" identifier [ number_literal ]) = (call_expression "(Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2)" (parenthesized_expression "(Output_reloc<9,true,32,false>)" ( (comma_expression "Output_reloc<9,true,32,false" (binary_expression "Output_reloc<9" identifier < number_literal) , (comma_expression "true,32,false" true , (comma_expression "32,false" number_literal , false))) (ERROR ">" >) )) (argument_list "((byte)uVar1 & 0xfc | 2)" ( (binary_expression "(byte)uVar1 & 0xfc | 2" (binary_expression "(byte)uVar1 & 0xfc" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) | number_literal) )))) ;) (if_statement "if (param_4 == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" if (parenthesized_expression "(param_4 == 0xfffffffc)" ( (binary_expression "param_4 == 0xfffffffc" identifier == number_literal) )) (compound_statement "{\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" { (expression_statement "uVar2 = 0x356;" (assignment_expression "uVar2 = 0x356" identifier = number_literal) ;) (goto_statement "goto LAB_001981a0;" goto statement_identifier ;) })) (if_statement "if (param_2 == (param_2 & 0xfffffff)) {\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }" if (parenthesized_expression "(param_2 == (param_2 & 0xfffffff))" ( (binary_expression "param_2 == (param_2 & 0xfffffff)" identifier == (parenthesized_expression "(param_2 & 0xfffffff)" ( (binary_expression "param_2 & 0xfffffff" identifier & number_literal) ))) )) (compound_statement "{\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }" { (expression_statement "*(Output_section **)this = param_1;" (assignment_expression "*(Output_section **)this = param_1" (pointer_expression "*(Output_section **)this" * (cast_expression "(Output_section **)this" ( (type_descriptor "Output_section **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = identifier) ;) (expression_statement "*(Sized_relobj **)(this + 4) = param_3;" (assignment_expression "*(Sized_relobj **)(this + 4) = param_3" (pointer_expression "*(Sized_relobj **)(this + 4)" * (cast_expression "(Sized_relobj **)(this + 4)" ( (type_descriptor "Sized_relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "set_needs_dynsym_index(this);" (call_expression "set_needs_dynsym_index(this)" identifier (argument_list "(this)" ( identifier ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );" do (compound_statement "{\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  }" { (expression_statement "uVar2 = 0x358;" (assignment_expression "uVar2 = 0x358" identifier = number_literal) ;) (labeled_statement "LAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" statement_identifier : (expression_statement "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" ( (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" * (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" ( (binary_expression "PTR_s_alize_xindex_004323b4 + 0x59f0" identifier + number_literal) , identifier , (binary_expression "PTR_s_alize_xindex_004323b4 + 0x68c8" identifier + number_literal) ))) ;)) }) while (parenthesized_expression "( true )" ( true )) ;) (ERROR "}" }))
(translation_unit "/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */\n/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */\n/* DWARF original prototype: void Output_reloc(Output_reloc<9,_true,_32,_false> * this,\n   Output_section * os, uint type, Sized_relobj<32,_false> * relobj, uint shndx, Address address,\n   bool is_relative) */\n\nvoid __thiscall\ngold::Output_reloc<9,_true,_32,_false>::Output_reloc\n          (Output_reloc<9,_true,_32,_false> *this,Output_section *os,uint type,\n          Sized_relobj<32,_false> *relobj,uint shndx,Address address,bool is_relative)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  \n  this->local_sym_index_ = 0xfffffffe;\n  uVar1 = *(uint *)&this->field_0x10 & 3 | type << 4 | (is_relative & 1) << 3 |\n          (is_relative & 1) << 2;\n  this->shndx_ = shndx;\n  *(uint *)&this->field_0x10 = uVar1;\n  this->address_ = address;\n  this->field_0x13 = (byte)uVar1 & 0xfc | 2;\n  if (shndx == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }\n  if (type == (type & 0xfffffff)) {\n    (this->u1_).os = os;\n    (this->u2_).relobj = relobj;\n    set_needs_dynsym_index(this);\n    return;\n  }\n  do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );\n}\n\n" comment comment comment (declaration "void __thiscall\ngold::Output_reloc<9,_true,_32,_false>::Output_reloc\n          (Output_reloc<9,_true,_32,_false> *this,Output_section *os,uint type,\n          Sized_relobj<32,_false> *relobj,uint shndx,Address address,bool is_relative)\n\n{\n  uint uVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<9" < number_literal) , identifier , identifier , (ERROR "_false>::Output_reloc\n          (Output_reloc<9,_true,_32,_false> *this,Output_section *os,uint type,\n          Sized_relobj<32,_false> *relobj,uint shndx,Address address,bool is_relative)\n\n{\n  uint" identifier > : : (function_declarator "Output_reloc\n          (Output_reloc<9,_true,_32,_false> *this,Output_section *os,uint type,\n          Sized_relobj<32,_false> *relobj,uint shndx,Address address,bool is_relative)" identifier (parameter_list "(Output_reloc<9,_true,_32,_false> *this,Output_section *os,uint type,\n          Sized_relobj<32,_false> *relobj,uint shndx,Address address,bool is_relative)" ( (parameter_declaration "Output_reloc" type_identifier) (ERROR "<9" < number_literal) , (parameter_declaration "_true" type_identifier) , (parameter_declaration "_32" type_identifier) , (parameter_declaration "_false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_section *os" type_identifier (pointer_declarator "*os" * identifier)) , (parameter_declaration "uint type" type_identifier identifier) , (parameter_declaration "Sized_relobj" type_identifier) (ERROR "<32" < number_literal) , (parameter_declaration "_false> *relobj" type_identifier (ERROR ">" >) (pointer_declarator "*relobj" * identifier)) , (parameter_declaration "uint shndx" type_identifier identifier) , (parameter_declaration "Address address" type_identifier identifier) , (parameter_declaration "bool is_relative" primitive_type identifier) ))) { identifier) identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "this->local_sym_index_ = 0xfffffffe;" (assignment_expression "this->local_sym_index_ = 0xfffffffe" (field_expression "this->local_sym_index_" identifier -> field_identifier) = number_literal) ;) (expression_statement "uVar1 = *(uint *)&this->field_0x10 & 3 | type << 4 | (is_relative & 1) << 3 |\n          (is_relative & 1) << 2;" (assignment_expression "uVar1 = *(uint *)&this->field_0x10 & 3 | type << 4 | (is_relative & 1) << 3 |\n          (is_relative & 1) << 2" identifier = (binary_expression "*(uint *)&this->field_0x10 & 3 | type << 4 | (is_relative & 1) << 3 |\n          (is_relative & 1) << 2" (binary_expression "*(uint *)&this->field_0x10 & 3 | type << 4 | (is_relative & 1) << 3" (binary_expression "*(uint *)&this->field_0x10 & 3 | type << 4" (binary_expression "*(uint *)&this->field_0x10 & 3" (pointer_expression "*(uint *)&this->field_0x10" * (cast_expression "(uint *)&this->field_0x10" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->field_0x10" & (field_expression "this->field_0x10" identifier -> field_identifier)))) & number_literal) | (binary_expression "type << 4" identifier << number_literal)) | (binary_expression "(is_relative & 1) << 3" (parenthesized_expression "(is_relative & 1)" ( (binary_expression "is_relative & 1" identifier & number_literal) )) << number_literal)) | (binary_expression "(is_relative & 1) << 2" (parenthesized_expression "(is_relative & 1)" ( (binary_expression "is_relative & 1" identifier & number_literal) )) << number_literal))) ;) (expression_statement "this->shndx_ = shndx;" (assignment_expression "this->shndx_ = shndx" (field_expression "this->shndx_" identifier -> field_identifier) = identifier) ;) (expression_statement "*(uint *)&this->field_0x10 = uVar1;" (assignment_expression "*(uint *)&this->field_0x10 = uVar1" (pointer_expression "*(uint *)&this->field_0x10" * (cast_expression "(uint *)&this->field_0x10" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->field_0x10" & (field_expression "this->field_0x10" identifier -> field_identifier)))) = identifier) ;) (expression_statement "this->address_ = address;" (assignment_expression "this->address_ = address" (field_expression "this->address_" identifier -> field_identifier) = identifier) ;) (expression_statement "this->field_0x13 = (byte)uVar1 & 0xfc | 2;" (assignment_expression "this->field_0x13 = (byte)uVar1 & 0xfc | 2" (field_expression "this->field_0x13" identifier -> field_identifier) = (binary_expression "(byte)uVar1 & 0xfc | 2" (binary_expression "(byte)uVar1 & 0xfc" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) | number_literal)) ;) (if_statement "if (shndx == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" if (parenthesized_expression "(shndx == 0xfffffffc)" ( (binary_expression "shndx == 0xfffffffc" identifier == number_literal) )) (compound_statement "{\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" { (expression_statement "uVar2 = 0x356;" (assignment_expression "uVar2 = 0x356" identifier = number_literal) ;) (goto_statement "goto LAB_001981a0;" goto statement_identifier ;) })) (if_statement "if (type == (type & 0xfffffff)) {\n    (this->u1_).os = os;\n    (this->u2_).relobj = relobj;\n    set_needs_dynsym_index(this);\n    return;\n  }" if (parenthesized_expression "(type == (type & 0xfffffff))" ( (binary_expression "type == (type & 0xfffffff)" identifier == (parenthesized_expression "(type & 0xfffffff)" ( (binary_expression "type & 0xfffffff" identifier & number_literal) ))) )) (compound_statement "{\n    (this->u1_).os = os;\n    (this->u2_).relobj = relobj;\n    set_needs_dynsym_index(this);\n    return;\n  }" { (expression_statement "(this->u1_).os = os;" (assignment_expression "(this->u1_).os = os" (field_expression "(this->u1_).os" (parenthesized_expression "(this->u1_)" ( (field_expression "this->u1_" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "(this->u2_).relobj = relobj;" (assignment_expression "(this->u2_).relobj = relobj" (field_expression "(this->u2_).relobj" (parenthesized_expression "(this->u2_)" ( (field_expression "this->u2_" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "set_needs_dynsym_index(this);" (call_expression "set_needs_dynsym_index(this)" identifier (argument_list "(this)" ( identifier ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );" do (compound_statement "{\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  }" { (expression_statement "uVar2 = 0x358;" (assignment_expression "uVar2 = 0x358" identifier = number_literal) ;) (labeled_statement "LAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" statement_identifier : (expression_statement "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" ( (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" * (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" ( (binary_expression "PTR_s_alize_xindex_004323b4 + 0x59f0" identifier + number_literal) , identifier , (binary_expression "PTR_s_alize_xindex_004323b4 + 0x68c8" identifier + number_literal) ))) ;)) }) while (parenthesized_expression "( true )" ( true )) ;) (ERROR "}" }))
(translation_unit "void __thiscall\ngold::Output_reloc<9,true,32,false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint uVar1;\n  undefined4 uVar2;\n  \n  *(undefined4 *)(this + 0xc) = 0xfffffffe;\n  uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;\n  *(uint *)(this + 0x14) = param_4;\n  *(uint *)(this + 0x10) = uVar1;\n  *(uint *)(this + 8) = param_5;\n  this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2);\n  if (param_4 == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }\n  if (param_2 == (param_2 & 0xfffffff)) {\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }\n  do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );\n}\n\n" (declaration "void __thiscall\ngold::Output_reloc<9,true,32,false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint uVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::" identifier : :) identifier (ERROR "<9" < number_literal) , identifier (ERROR ",32" , number_literal) , (ERROR "false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint" identifier > : : (function_declarator "Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)" identifier (parameter_list "(Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)" ( (parameter_declaration "Output_reloc" type_identifier) (ERROR "<9" < number_literal) , (parameter_declaration "true" type_identifier) (ERROR ",32" , number_literal) , (parameter_declaration "false> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_section *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "Sized_relobj *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) , (parameter_declaration "uint param_5" type_identifier identifier) , (parameter_declaration "bool param_6" primitive_type identifier) ))) { identifier) identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (expression_statement "*(undefined4 *)(this + 0xc) = 0xfffffffe;" (assignment_expression "*(undefined4 *)(this + 0xc) = 0xfffffffe" (pointer_expression "*(undefined4 *)(this + 0xc)" * (cast_expression "(undefined4 *)(this + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc)" ( (binary_expression "this + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;" (assignment_expression "uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2" identifier = (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2" (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3" (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4" (binary_expression "*(uint *)(this + 0x10) & 3" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) & number_literal) | (binary_expression "param_2 << 4" identifier << number_literal)) | (binary_expression "(param_6 & 1) << 3" (parenthesized_expression "(param_6 & 1)" ( (binary_expression "param_6 & 1" identifier & number_literal) )) << number_literal)) | (binary_expression "(param_6 & 1) << 2" (parenthesized_expression "(param_6 & 1)" ( (binary_expression "param_6 & 1" identifier & number_literal) )) << number_literal))) ;) (expression_statement "*(uint *)(this + 0x14) = param_4;" (assignment_expression "*(uint *)(this + 0x14) = param_4" (pointer_expression "*(uint *)(this + 0x14)" * (cast_expression "(uint *)(this + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x14)" ( (binary_expression "this + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(this + 0x10) = uVar1;" (assignment_expression "*(uint *)(this + 0x10) = uVar1" (pointer_expression "*(uint *)(this + 0x10)" * (cast_expression "(uint *)(this + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(this + 8) = param_5;" (assignment_expression "*(uint *)(this + 8) = param_5" (pointer_expression "*(uint *)(this + 8)" * (cast_expression "(uint *)(this + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2);" (assignment_expression "this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2)" (subscript_expression "this[0x13]" identifier [ number_literal ]) = (call_expression "(Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2)" (parenthesized_expression "(Output_reloc<9,true,32,false>)" ( (comma_expression "Output_reloc<9,true,32,false" (binary_expression "Output_reloc<9" identifier < number_literal) , (comma_expression "true,32,false" true , (comma_expression "32,false" number_literal , false))) (ERROR ">" >) )) (argument_list "((byte)uVar1 & 0xfc | 2)" ( (binary_expression "(byte)uVar1 & 0xfc | 2" (binary_expression "(byte)uVar1 & 0xfc" (cast_expression "(byte)uVar1" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) | number_literal) )))) ;) (if_statement "if (param_4 == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" if (parenthesized_expression "(param_4 == 0xfffffffc)" ( (binary_expression "param_4 == 0xfffffffc" identifier == number_literal) )) (compound_statement "{\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" { (expression_statement "uVar2 = 0x356;" (assignment_expression "uVar2 = 0x356" identifier = number_literal) ;) (goto_statement "goto LAB_001981a0;" goto statement_identifier ;) })) (if_statement "if (param_2 == (param_2 & 0xfffffff)) {\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }" if (parenthesized_expression "(param_2 == (param_2 & 0xfffffff))" ( (binary_expression "param_2 == (param_2 & 0xfffffff)" identifier == (parenthesized_expression "(param_2 & 0xfffffff)" ( (binary_expression "param_2 & 0xfffffff" identifier & number_literal) ))) )) (compound_statement "{\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }" { (expression_statement "*(Output_section **)this = param_1;" (assignment_expression "*(Output_section **)this = param_1" (pointer_expression "*(Output_section **)this" * (cast_expression "(Output_section **)this" ( (type_descriptor "Output_section **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = identifier) ;) (expression_statement "*(Sized_relobj **)(this + 4) = param_3;" (assignment_expression "*(Sized_relobj **)(this + 4) = param_3" (pointer_expression "*(Sized_relobj **)(this + 4)" * (cast_expression "(Sized_relobj **)(this + 4)" ( (type_descriptor "Sized_relobj **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "set_needs_dynsym_index(this);" (call_expression "set_needs_dynsym_index(this)" identifier (argument_list "(this)" ( identifier ))) ;) (return_statement "return;" return ;) })) (do_statement "do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );" do (compound_statement "{\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  }" { (expression_statement "uVar2 = 0x358;" (assignment_expression "uVar2 = 0x358" identifier = number_literal) ;) (labeled_statement "LAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" statement_identifier : (expression_statement "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" ( (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" * (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" ( (binary_expression "PTR_s_alize_xindex_004323b4 + 0x59f0" identifier + number_literal) , identifier , (binary_expression "PTR_s_alize_xindex_004323b4 + 0x68c8" identifier + number_literal) ))) ;)) }) while (parenthesized_expression "( true )" ( true )) ;) (ERROR "}" }))
(translation_unit (declaration TYPE (ms_call_modifier __thiscall) (ERROR IDENT : :) IDENT (ERROR < LIT) , IDENT (ERROR , LIT) , (ERROR IDENT > : : (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE) (ERROR < LIT) , (parameter_declaration TYPE) (ERROR , LIT) , (parameter_declaration TYPE (ERROR >) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) { IDENT) IDENT ;) (declaration TYPE 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 = (binary_expression (binary_expression (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression IDENT << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (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) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( (comma_expression (binary_expression IDENT < LIT) , (comma_expression BOOL , (comma_expression LIT , BOOL))) (ERROR >) )) (argument_list ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) | LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (parenthesized_expression ( (binary_expression IDENT & LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , IDENT , (binary_expression IDENT + LIT) ))) ;)) }) while (parenthesized_expression ( BOOL )) ;) (ERROR }))
(declaration "void __thiscall\ngold::Output_reloc<9,true,32,false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint uVar1;" (primitive_type "void") (ms_call_modifier "__thiscall" (__thiscall "__thiscall")) (ERROR "gold::" (identifier "gold") (: ":") (: ":")) (identifier "Output_reloc") (ERROR "<9" (< "<") (number_literal "9")) (, ",") (identifier "true") (ERROR ",32" (, ",") (number_literal "32")) (, ",") (ERROR "false>::Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)\n\n{\n  uint" (identifier "false") (> ">") (: ":") (: ":") (function_declarator "Output_reloc\n          (Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)" (identifier "Output_reloc") (parameter_list "(Output_reloc<9,true,32,false> *this,Output_section *param_1,uint param_2,\n          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)" (( "(") (parameter_declaration "Output_reloc" (type_identifier "Output_reloc")) (ERROR "<9" (< "<") (number_literal "9")) (, ",") (parameter_declaration "true" (type_identifier "true")) (ERROR ",32" (, ",") (number_literal "32")) (, ",") (parameter_declaration "false> *this" (type_identifier "false") (ERROR ">" (> ">")) (pointer_declarator "*this" (* "*") (identifier "this"))) (, ",") (parameter_declaration "Output_section *param_1" (type_identifier "Output_section") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "Sized_relobj *param_3" (type_identifier "Sized_relobj") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) (, ",") (parameter_declaration "uint param_5" (type_identifier "uint") (identifier "param_5")) (, ",") (parameter_declaration "bool param_6" (primitive_type "bool") (identifier "param_6")) () ")"))) ({ "{") (identifier "uint")) (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (expression_statement "*(undefined4 *)(this + 0xc) = 0xfffffffe;" (assignment_expression "*(undefined4 *)(this + 0xc) = 0xfffffffe" (pointer_expression "*(undefined4 *)(this + 0xc)" (* "*") (cast_expression "(undefined4 *)(this + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0xc)" (( "(") (binary_expression "this + 0xc" (identifier "this") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "0xfffffffe")) (; ";")) (expression_statement "uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;" (assignment_expression "uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2" (identifier "uVar1") (= "=") (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2" (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3" (binary_expression "*(uint *)(this + 0x10) & 3 | param_2 << 4" (binary_expression "*(uint *)(this + 0x10) & 3" (pointer_expression "*(uint *)(this + 0x10)" (* "*") (cast_expression "(uint *)(this + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x10)" (( "(") (binary_expression "this + 0x10" (identifier "this") (+ "+") (number_literal "0x10")) () ")")))) (& "&") (number_literal "3")) (| "|") (binary_expression "param_2 << 4" (identifier "param_2") (<< "<<") (number_literal "4"))) (| "|") (binary_expression "(param_6 & 1) << 3" (parenthesized_expression "(param_6 & 1)" (( "(") (binary_expression "param_6 & 1" (identifier "param_6") (& "&") (number_literal "1")) () ")")) (<< "<<") (number_literal "3"))) (| "|") (binary_expression "(param_6 & 1) << 2" (parenthesized_expression "(param_6 & 1)" (( "(") (binary_expression "param_6 & 1" (identifier "param_6") (& "&") (number_literal "1")) () ")")) (<< "<<") (number_literal "2")))) (; ";")) (expression_statement "*(uint *)(this + 0x14) = param_4;" (assignment_expression "*(uint *)(this + 0x14) = param_4" (pointer_expression "*(uint *)(this + 0x14)" (* "*") (cast_expression "(uint *)(this + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x14)" (( "(") (binary_expression "this + 0x14" (identifier "this") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "param_4")) (; ";")) (expression_statement "*(uint *)(this + 0x10) = uVar1;" (assignment_expression "*(uint *)(this + 0x10) = uVar1" (pointer_expression "*(uint *)(this + 0x10)" (* "*") (cast_expression "(uint *)(this + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 0x10)" (( "(") (binary_expression "this + 0x10" (identifier "this") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "*(uint *)(this + 8) = param_5;" (assignment_expression "*(uint *)(this + 8) = param_5" (pointer_expression "*(uint *)(this + 8)" (* "*") (cast_expression "(uint *)(this + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 8)" (( "(") (binary_expression "this + 8" (identifier "this") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "param_5")) (; ";")) (expression_statement "this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2);" (assignment_expression "this[0x13] = (Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2)" (subscript_expression "this[0x13]" (identifier "this") ([ "[") (number_literal "0x13") (] "]")) (= "=") (call_expression "(Output_reloc<9,true,32,false>)((byte)uVar1 & 0xfc | 2)" (parenthesized_expression "(Output_reloc<9,true,32,false>)" (( "(") (comma_expression "Output_reloc<9,true,32,false" (binary_expression "Output_reloc<9" (identifier "Output_reloc") (< "<") (number_literal "9")) (, ",") (comma_expression "true,32,false" (true "true") (, ",") (comma_expression "32,false" (number_literal "32") (, ",") (false "false")))) (ERROR ">" (> ">")) () ")")) (argument_list "((byte)uVar1 & 0xfc | 2)" (( "(") (binary_expression "(byte)uVar1 & 0xfc | 2" (binary_expression "(byte)uVar1 & 0xfc" (cast_expression "(byte)uVar1" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar1")) (& "&") (number_literal "0xfc")) (| "|") (number_literal "2")) () ")")))) (; ";")) (if_statement "if (param_4 == 0xfffffffc) {\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" (if "if") (parenthesized_expression "(param_4 == 0xfffffffc)" (( "(") (binary_expression "param_4 == 0xfffffffc" (identifier "param_4") (== "==") (number_literal "0xfffffffc")) () ")")) (compound_statement "{\n    uVar2 = 0x356;\n    goto LAB_001981a0;\n  }" ({ "{") (expression_statement "uVar2 = 0x356;" (assignment_expression "uVar2 = 0x356" (identifier "uVar2") (= "=") (number_literal "0x356")) (; ";")) (goto_statement "goto LAB_001981a0;" (goto "goto") (statement_identifier "LAB_001981a0") (; ";")) (} "}"))) (if_statement "if (param_2 == (param_2 & 0xfffffff)) {\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 == (param_2 & 0xfffffff))" (( "(") (binary_expression "param_2 == (param_2 & 0xfffffff)" (identifier "param_2") (== "==") (parenthesized_expression "(param_2 & 0xfffffff)" (( "(") (binary_expression "param_2 & 0xfffffff" (identifier "param_2") (& "&") (number_literal "0xfffffff")) () ")"))) () ")")) (compound_statement "{\n    *(Output_section **)this = param_1;\n    *(Sized_relobj **)(this + 4) = param_3;\n    set_needs_dynsym_index(this);\n    return;\n  }" ({ "{") (expression_statement "*(Output_section **)this = param_1;" (assignment_expression "*(Output_section **)this = param_1" (pointer_expression "*(Output_section **)this" (* "*") (cast_expression "(Output_section **)this" (( "(") (type_descriptor "Output_section **" (type_identifier "Output_section") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "this"))) (= "=") (identifier "param_1")) (; ";")) (expression_statement "*(Sized_relobj **)(this + 4) = param_3;" (assignment_expression "*(Sized_relobj **)(this + 4) = param_3" (pointer_expression "*(Sized_relobj **)(this + 4)" (* "*") (cast_expression "(Sized_relobj **)(this + 4)" (( "(") (type_descriptor "Sized_relobj **" (type_identifier "Sized_relobj") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "param_3")) (; ";")) (expression_statement "set_needs_dynsym_index(this);" (call_expression "set_needs_dynsym_index(this)" (identifier "set_needs_dynsym_index") (argument_list "(this)" (( "(") (identifier "this") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (do_statement "do {\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  } while( true );" (do "do") (compound_statement "{\n    uVar2 = 0x358;\nLAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);\n  }" ({ "{") (expression_statement "uVar2 = 0x358;" (assignment_expression "uVar2 = 0x358" (identifier "uVar2") (= "=") (number_literal "0x358")) (; ";")) (labeled_statement "LAB_001981a0:\n    (*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" (statement_identifier "LAB_001981a0") (: ":") (expression_statement "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);" (call_expression "(*(code *)PTR_do_gold_unreachable_004323c4)\n              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" (parenthesized_expression "(*(code *)PTR_do_gold_unreachable_004323c4)" (( "(") (pointer_expression "*(code *)PTR_do_gold_unreachable_004323c4" (* "*") (cast_expression "(code *)PTR_do_gold_unreachable_004323c4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_do_gold_unreachable_004323c4"))) () ")")) (argument_list "(PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8)" (( "(") (binary_expression "PTR_s_alize_xindex_004323b4 + 0x59f0" (identifier "PTR_s_alize_xindex_004323b4") (+ "+") (number_literal "0x59f0")) (, ",") (identifier "uVar2") (, ",") (binary_expression "PTR_s_alize_xindex_004323b4 + 0x68c8" (identifier "PTR_s_alize_xindex_004323b4") (+ "+") (number_literal "0x68c8")) () ")"))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (ERROR "}" (} "}"))

/* WARNING: Struct "Output_section_data": ignoring overlapping field "output_section_" */
/* WARNING: Struct "Output_section": ignoring overlapping field "name_" */
/* DWARF original prototype: void Output_reloc(Output_reloc<9,_true,_32,_false> * this,
   Output_section * os, uint type, Sized_relobj<32,_false> * relobj, uint shndx, Address address,
   bool is_relative) */

void __thiscall
gold::Output_reloc<9,_true,_32,_false>::Output_reloc
          (Output_reloc<9,_true,_32,_false> *this,Output_section *os,type_2 var_1,
          Sized_relobj<32,_false> *relobj,type_2 var_3,Address address,bool var_2)

{
  type_2 uVar1;
  type_1 uVar2;
  
  this->local_sym_index_ = 0xfffffffe;
  uVar1 = *(type_2 *)&this->field_0x10 & 3 | var_1 << 4 | (var_2 & 1) << 3 |
          (var_2 & 1) << 2;
  this->shndx_ = var_3;
  *(type_2 *)&this->field_0x10 = uVar1;
  this->address_ = address;
  this->field_0x13 = (type_3)uVar1 & 0xfc | 2;
  if (var_3 == 0xfffffffc) {
    uVar2 = 0x356;
    goto LAB_001981a0;
  }
  if (var_1 == (var_1 & 0xfffffff)) {
    (this->u1_).os = os;
    (this->u2_).relobj = relobj;
    var_4(this);
    return;
  }
  do {
    uVar2 = 0x358;
LAB_001981a0:
    (*(type_4 *)PTR_do_gold_unreachable_004323c4)
              (var_5 + 0x59f0,uVar2,var_5 + 0x68c8);
  } while( true );
}


(translation_unit (declaration type: (primitive_type) declarator: (ms_call_modifier) (ERROR (identifier)) declarator: (identifier) (ERROR (number_literal)) declarator: (identifier) (ERROR (number_literal)) (ERROR (identifier) (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier)) (ERROR (number_literal)) (parameter_declaration type: (type_identifier)) (ERROR (number_literal)) (parameter_declaration type: (type_identifier) (ERROR) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) (identifier)) declarator: (identifier)) (declaration type: (type_identifier) declarator: (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: (binary_expression left: (binary_expression left: (binary_expression left: (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: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (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: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (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: (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: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (call_expression function: (parenthesized_expression (comma_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (comma_expression left: (true) right: (comma_expression left: (number_literal) right: (false)))) (ERROR)) arguments: (argument_list (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (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: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))) right: (identifier))) (expression_statement (assignment_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: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (binary_expression left: (identifier) right: (number_literal))))))) condition: (parenthesized_expression (true))) (ERROR))

/* gold::MASKED<9, true, 32, false>::MASKED(gold::Output_section*, unsigned int,
   gold::Sized_relobj<32, false>*, unsigned int, unsigned int, bool) */

void __thiscall
gold::MASKED<9,true,32,false>::MASKED
          (MASKED<9,true,32,false> *this,Output_section *param_1,uint param_2,
          Sized_relobj *param_3,uint param_4,uint param_5,bool param_6)

{
  uint uVar1;
  undefined4 uVar2;
  
  *(undefined4 *)(this + 0xc) = 0xfffffffe;
  uVar1 = *(uint *)(this + 0x10) & 3 | param_2 << 4 | (param_6 & 1) << 3 | (param_6 & 1) << 2;
  *(uint *)(this + 0x14) = param_4;
  *(uint *)(this + 0x10) = uVar1;
  *(uint *)(this + 8) = param_5;
  this[0x13] = (MASKED<9,true,32,false>)((byte)uVar1 & 0xfc | 2);
  if (param_4 == 0xfffffffc) {
    uVar2 = 0x356;
    goto LAB_001981a0;
  }
  if (param_2 == (param_2 & 0xfffffff)) {
    *(Output_section **)this = param_1;
    *(Sized_relobj **)(this + 4) = param_3;
    set_needs_dynsym_index(this);
    return;
  }
  do {
    uVar2 = 0x358;
LAB_001981a0:
    (*(code *)PTR_do_gold_unreachable_004323c4)
              (PTR_s_alize_xindex_004323b4 + 0x59f0,uVar2,PTR_s_alize_xindex_004323b4 + 0x68c8);
  } while( true );
}

