
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,
   std::vector<gold::Output_segment*> >,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments> > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>
               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>
                        __last,_Iter_comp_iter<gold::Layout::Compare_segments> __comp)

{
  Output_segment *seg1;
  bool bVar1;
  Output_segment **ppOVar2;
  Output_segment **ppOVar3;
  
  if ((__first._M_current == __last._M_current) ||
     (ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3)) {
    return;
  }
  do {
    while( true ) {
      bVar1 = gold::Layout::segment_precedes
                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);
      seg1 = *ppOVar3;
      ppOVar2 = ppOVar3;
      if (!bVar1) break;
      if (__first._M_current != ppOVar3) {
        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);
      }
      *__first._M_current = seg1;
      ppOVar3 = ppOVar3 + 1;
      if (__last._M_current == ppOVar3) {
        return;
      }
    }
    while( true ) {
      bVar1 = gold::Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);
      if (!bVar1) break;
      *ppOVar2 = ppOVar2[-1];
      ppOVar2 = ppOVar2 + -1;
    }
    *ppOVar2 = seg1;
    ppOVar3 = ppOVar3 + 1;
  } while (__last._M_current != ppOVar3);
  return;
}



void FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)

{
  undefined8 uVar1;
  char cVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {
    return;
  }
  do {
    while( true ) {
      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);
      uVar1 = *puVar4;
      puVar3 = puVar4;
      if (cVar2 == '\0') break;
      if (param_1 != puVar4) {
        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);
      }
      *param_1 = uVar1;
      puVar4 = puVar4 + 1;
      if (param_2 == puVar4) {
        return;
      }
    }
    while( true ) {
      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);
      if (cVar2 == '\0') break;
      *puVar3 = puVar3[-1];
      puVar3 = puVar3 + -1;
    }
    *puVar3 = uVar1;
    puVar4 = puVar4 + 1;
  } while (param_2 != puVar4);
  return;
}


CMP RDI,RSI
JZ 0x001c8110
LEA R8,[RDI + 0x8]
CMP RSI,R8
JZ 0x001c8110
PUSH R15
MOV R15,R8
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,RDI
SUB RSP,0x18
MOV qword ptr [RSP + 0x8],RSI
JMP 0x001c80b2
CMP RBX,R15
JZ 0x001c80a4
MOV RDX,R15
MOV EAX,0x8
MOV RSI,RBX
SUB RDX,RBX
LEA RDI,[RBX + RAX*0x1]
CALL 0x001496d0
MOV qword ptr [RBX],R12
ADD R15,0x8
CMP qword ptr [RSP + 0x8],R15
JZ 0x001c8100
MOV RDX,qword ptr [RBX]
MOV RSI,qword ptr [R15]
MOV RDI,RBP
CALL 0x001b8810
MOV R12,qword ptr [R15]
TEST AL,AL
JNZ 0x001c8088
MOV R13,R15
JMP 0x001c80d8
MOV RAX,qword ptr [R13]
MOV qword ptr [R13 + 0x8],RAX
MOV RDX,qword ptr [R13 + -0x8]
MOV RSI,R12
MOV RDI,RBP
MOV R14,R13
SUB R13,0x8
CALL 0x001b8810
TEST AL,AL
JNZ 0x001c80d0
MOV qword ptr [R14],R12
ADD R15,0x8
CMP qword ptr [RSP + 0x8],R15
JNZ 0x001c80b2
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
RET
(translation_unit "void FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}\n\n" (function_definition "void FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}" primitive_type (function_declarator "FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (if_statement "if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }" if (parenthesized_expression "((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4))" ( (binary_expression "(param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)" (parenthesized_expression "(param_1 == param_2)" ( (binary_expression "param_1 == param_2" identifier == identifier) )) || (parenthesized_expression "(puVar4 = param_1 + 1, param_2 == puVar4)" ( (comma_expression "puVar4 = param_1 + 1, param_2 == puVar4" (assignment_expression "puVar4 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "param_2 == puVar4" identifier == identifier)) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (do_statement "do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);" do (compound_statement "{\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  }" { (while_statement "while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }" { (expression_statement "cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);" (assignment_expression "cVar2 = FUN_001b8810(param_3,*puVar4,*param_1)" identifier = (call_expression "FUN_001b8810(param_3,*puVar4,*param_1)" identifier (argument_list "(param_3,*puVar4,*param_1)" ( identifier , (pointer_expression "*puVar4" * identifier) , (pointer_expression "*param_1" * identifier) )))) ;) (expression_statement "uVar1 = *puVar4;" (assignment_expression "uVar1 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" identifier = identifier) ;) (if_statement "if (cVar2 == '\0') break;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (if_statement "if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }" if (parenthesized_expression "(param_1 != puVar4)" ( (binary_expression "param_1 != puVar4" identifier != identifier) )) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }" { (expression_statement "memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1)" identifier (argument_list "(param_1 + 1,param_1,(long)puVar4 - (long)param_1)" ( (binary_expression "param_1 + 1" identifier + number_literal) , identifier , (binary_expression "(long)puVar4 - (long)param_1" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (if_statement "if (param_2 == puVar4) {\n        return;\n      }" if (parenthesized_expression "(param_2 == puVar4)" ( (binary_expression "param_2 == puVar4" identifier == identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) (while_statement "while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }" { (expression_statement "cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);" (assignment_expression "cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1])" identifier = (call_expression "FUN_001b8810(param_3,uVar1,puVar3[-1])" identifier (argument_list "(param_3,uVar1,puVar3[-1])" ( identifier , identifier , (subscript_expression "puVar3[-1]" identifier [ number_literal ]) )))) ;) (if_statement "if (cVar2 == '\0') break;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "*puVar3 = puVar3[-1];" (assignment_expression "*puVar3 = puVar3[-1]" (pointer_expression "*puVar3" * identifier) = (subscript_expression "puVar3[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) })) (expression_statement "*puVar3 = uVar1;" (assignment_expression "*puVar3 = uVar1" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 != puVar4)" ( (binary_expression "param_2 != puVar4" identifier != identifier) )) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,\n   std::vector<gold::Output_segment*> >,\n   __gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments> > */\n\nvoid std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,_Iter_comp_iter<gold::Layout::Compare_segments> __comp)\n\n{\n  Output_segment *seg1;\n  bool bVar1;\n  Output_segment **ppOVar2;\n  Output_segment **ppOVar3;\n  \n  if ((__first._M_current == __last._M_current) ||\n     (ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3)) {\n    return;\n  }\n  do {\n    while( true ) {\n      bVar1 = gold::Layout::segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);\n      seg1 = *ppOVar3;\n      ppOVar2 = ppOVar3;\n      if (!bVar1) break;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = seg1;\n      ppOVar3 = ppOVar3 + 1;\n      if (__last._M_current == ppOVar3) {\n        return;\n      }\n    }\n    while( true ) {\n      bVar1 = gold::Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);\n      if (!bVar1) break;\n      *ppOVar2 = ppOVar2[-1];\n      ppOVar2 = ppOVar2 + -1;\n    }\n    *ppOVar2 = seg1;\n    ppOVar3 = ppOVar3 + 1;\n  } while (__last._M_current != ppOVar3);\n  return;\n}\n\n" comment comment comment (declaration "void std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,_Iter_comp_iter<gold::Layout::Compare_segments> __comp)\n\n{\n  Output_segment *seg1;" primitive_type (ERROR "std::\n     __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment" identifier : : identifier < identifier : : identifier < identifier : : identifier) (pointer_declarator "**,_std::vector<gold::Output_segment*>_" * (pointer_declarator "*,_std::vector<gold::Output_segment*>_" * (ERROR ",_std::vector<gold::Output_segment*>" , identifier : : identifier < identifier : : identifier * >) identifier)) (ERROR ">" >) , (ERROR "___gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments>_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,_Iter_comp_iter<gold::Layout::Compare_segments> __comp)\n\n{\n  Output_segment" identifier : : identifier : : identifier < identifier : : identifier : : identifier > (function_declarator "_>\n               (__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,_Iter_comp_iter<gold::Layout::Compare_segments> __comp)" identifier (ERROR ">" >) (parameter_list "(__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                __first,__normal_iterator<gold::Output_segment**,_std::vector<gold::Output_segment*,_std::allocator<gold::Output_segment*>_>_>\n                        __last,_Iter_comp_iter<gold::Layout::Compare_segments> __comp)" ( (parameter_declaration "__normal_iterator<gold::Output_segment**" type_identifier (ERROR "<gold::Output_segment" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Output_segment*" type_identifier (ERROR "::vector<gold::Output_segment" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Output_segment*>_>_>\n                __first" type_identifier (ERROR "::allocator<gold::Output_segment*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "__normal_iterator<gold::Output_segment**" type_identifier (ERROR "<gold::Output_segment" < identifier : : identifier) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) , (parameter_declaration "_std::vector<gold::Output_segment*" type_identifier (ERROR "::vector<gold::Output_segment" : : identifier < identifier : : identifier) (abstract_pointer_declarator "*" *)) , (parameter_declaration "_std::allocator<gold::Output_segment*>_>_>\n                        __last" type_identifier (ERROR "::allocator<gold::Output_segment*>_>_>" : : identifier < identifier : : identifier * > identifier > identifier >) identifier) , (parameter_declaration "_Iter_comp_iter<gold::Layout::Compare_segments> __comp" type_identifier (ERROR "<gold::Layout::Compare_segments>" < identifier : : identifier : : identifier >) identifier) ))) { identifier) (pointer_declarator "*seg1" * identifier) ;) (declaration "bool bVar1;" primitive_type identifier ;) (declaration "Output_segment **ppOVar2;" type_identifier (pointer_declarator "**ppOVar2" * (pointer_declarator "*ppOVar2" * identifier)) ;) (declaration "Output_segment **ppOVar3;" type_identifier (pointer_declarator "**ppOVar3" * (pointer_declarator "*ppOVar3" * identifier)) ;) (if_statement "if ((__first._M_current == __last._M_current) ||\n     (ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3)) {\n    return;\n  }" if (parenthesized_expression "((__first._M_current == __last._M_current) ||\n     (ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3))" ( (binary_expression "(__first._M_current == __last._M_current) ||\n     (ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3)" (parenthesized_expression "(__first._M_current == __last._M_current)" ( (binary_expression "__first._M_current == __last._M_current" (field_expression "__first._M_current" identifier . field_identifier) == (field_expression "__last._M_current" identifier . field_identifier)) )) || (parenthesized_expression "(ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3)" ( (comma_expression "ppOVar3 = __first._M_current + 1, __last._M_current == ppOVar3" (assignment_expression "ppOVar3 = __first._M_current + 1" identifier = (binary_expression "__first._M_current + 1" (field_expression "__first._M_current" identifier . field_identifier) + number_literal)) , (binary_expression "__last._M_current == ppOVar3" (field_expression "__last._M_current" identifier . field_identifier) == identifier)) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (do_statement "do {\n    while( true ) {\n      bVar1 = gold::Layout::segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);\n      seg1 = *ppOVar3;\n      ppOVar2 = ppOVar3;\n      if (!bVar1) break;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = seg1;\n      ppOVar3 = ppOVar3 + 1;\n      if (__last._M_current == ppOVar3) {\n        return;\n      }\n    }\n    while( true ) {\n      bVar1 = gold::Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);\n      if (!bVar1) break;\n      *ppOVar2 = ppOVar2[-1];\n      ppOVar2 = ppOVar2 + -1;\n    }\n    *ppOVar2 = seg1;\n    ppOVar3 = ppOVar3 + 1;\n  } while (__last._M_current != ppOVar3);" do (compound_statement "{\n    while( true ) {\n      bVar1 = gold::Layout::segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);\n      seg1 = *ppOVar3;\n      ppOVar2 = ppOVar3;\n      if (!bVar1) break;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = seg1;\n      ppOVar3 = ppOVar3 + 1;\n      if (__last._M_current == ppOVar3) {\n        return;\n      }\n    }\n    while( true ) {\n      bVar1 = gold::Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);\n      if (!bVar1) break;\n      *ppOVar2 = ppOVar2[-1];\n      ppOVar2 = ppOVar2 + -1;\n    }\n    *ppOVar2 = seg1;\n    ppOVar3 = ppOVar3 + 1;\n  }" { (while_statement "while( true ) {\n      bVar1 = gold::Layout::segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);\n      seg1 = *ppOVar3;\n      ppOVar2 = ppOVar3;\n      if (!bVar1) break;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = seg1;\n      ppOVar3 = ppOVar3 + 1;\n      if (__last._M_current == ppOVar3) {\n        return;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      bVar1 = gold::Layout::segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);\n      seg1 = *ppOVar3;\n      ppOVar2 = ppOVar3;\n      if (!bVar1) break;\n      if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }\n      *__first._M_current = seg1;\n      ppOVar3 = ppOVar3 + 1;\n      if (__last._M_current == ppOVar3) {\n        return;\n      }\n    }" { (ERROR "bVar1 = gold::" (assignment_expression "bVar1 = gold" identifier = identifier) : :) (labeled_statement "Layout::segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);" statement_identifier : (ERROR ":" :) (expression_statement "segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current);" (call_expression "segment_precedes\n                        ((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current)" identifier (argument_list "((Layout *)__comp._M_comp.layout_,*ppOVar3,*__first._M_current)" ( (cast_expression "(Layout *)__comp._M_comp.layout_" ( (type_descriptor "Layout *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__comp._M_comp.layout_" (field_expression "__comp._M_comp" identifier . field_identifier) . field_identifier)) , (pointer_expression "*ppOVar3" * identifier) , (pointer_expression "*__first._M_current" * (field_expression "__first._M_current" identifier . field_identifier)) ))) ;)) (expression_statement "seg1 = *ppOVar3;" (assignment_expression "seg1 = *ppOVar3" identifier = (pointer_expression "*ppOVar3" * identifier)) ;) (expression_statement "ppOVar2 = ppOVar3;" (assignment_expression "ppOVar2 = ppOVar3" identifier = identifier) ;) (if_statement "if (!bVar1) break;" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (break_statement "break;" break ;)) (if_statement "if (__first._M_current != ppOVar3) {\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }" if (parenthesized_expression "(__first._M_current != ppOVar3)" ( (binary_expression "__first._M_current != ppOVar3" (field_expression "__first._M_current" identifier . field_identifier) != identifier) )) (compound_statement "{\n        memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);\n      }" { (expression_statement "memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current);" (call_expression "memmove(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current)" identifier (argument_list "(__first._M_current + 1,__first._M_current,(long)ppOVar3 - (long)__first._M_current)" ( (binary_expression "__first._M_current + 1" (field_expression "__first._M_current" identifier . field_identifier) + number_literal) , (field_expression "__first._M_current" identifier . field_identifier) , (binary_expression "(long)ppOVar3 - (long)__first._M_current" (cast_expression "(long)ppOVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__first._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__first._M_current" identifier . field_identifier))) ))) ;) })) (expression_statement "*__first._M_current = seg1;" (assignment_expression "*__first._M_current = seg1" (pointer_expression "*__first._M_current" * (field_expression "__first._M_current" identifier . field_identifier)) = identifier) ;) (expression_statement "ppOVar3 = ppOVar3 + 1;" (assignment_expression "ppOVar3 = ppOVar3 + 1" identifier = (binary_expression "ppOVar3 + 1" identifier + number_literal)) ;) (if_statement "if (__last._M_current == ppOVar3) {\n        return;\n      }" if (parenthesized_expression "(__last._M_current == ppOVar3)" ( (binary_expression "__last._M_current == ppOVar3" (field_expression "__last._M_current" identifier . field_identifier) == identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) (while_statement "while( true ) {\n      bVar1 = gold::Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);\n      if (!bVar1) break;\n      *ppOVar2 = ppOVar2[-1];\n      ppOVar2 = ppOVar2 + -1;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      bVar1 = gold::Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);\n      if (!bVar1) break;\n      *ppOVar2 = ppOVar2[-1];\n      ppOVar2 = ppOVar2 + -1;\n    }" { (ERROR "bVar1 = gold::" (assignment_expression "bVar1 = gold" identifier = identifier) : :) (labeled_statement "Layout::segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);" statement_identifier : (ERROR ":" :) (expression_statement "segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1]);" (call_expression "segment_precedes((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1])" identifier (argument_list "((Layout *)__comp._M_comp.layout_,seg1,ppOVar2[-1])" ( (cast_expression "(Layout *)__comp._M_comp.layout_" ( (type_descriptor "Layout *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "__comp._M_comp.layout_" (field_expression "__comp._M_comp" identifier . field_identifier) . field_identifier)) , identifier , (subscript_expression "ppOVar2[-1]" identifier [ number_literal ]) ))) ;)) (if_statement "if (!bVar1) break;" if (parenthesized_expression "(!bVar1)" ( (unary_expression "!bVar1" ! identifier) )) (break_statement "break;" break ;)) (expression_statement "*ppOVar2 = ppOVar2[-1];" (assignment_expression "*ppOVar2 = ppOVar2[-1]" (pointer_expression "*ppOVar2" * identifier) = (subscript_expression "ppOVar2[-1]" identifier [ number_literal ])) ;) (expression_statement "ppOVar2 = ppOVar2 + -1;" (assignment_expression "ppOVar2 = ppOVar2 + -1" identifier = (binary_expression "ppOVar2 + -1" identifier + number_literal)) ;) })) (expression_statement "*ppOVar2 = seg1;" (assignment_expression "*ppOVar2 = seg1" (pointer_expression "*ppOVar2" * identifier) = identifier) ;) (expression_statement "ppOVar3 = ppOVar3 + 1;" (assignment_expression "ppOVar3 = ppOVar3 + 1" identifier = (binary_expression "ppOVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(__last._M_current != ppOVar3)" ( (binary_expression "__last._M_current != ppOVar3" (field_expression "__last._M_current" identifier . field_identifier) != identifier) )) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}\n\n" (function_definition "void FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}" primitive_type (function_declarator "FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}" { (declaration "undefined8 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (if_statement "if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }" if (parenthesized_expression "((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4))" ( (binary_expression "(param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)" (parenthesized_expression "(param_1 == param_2)" ( (binary_expression "param_1 == param_2" identifier == identifier) )) || (parenthesized_expression "(puVar4 = param_1 + 1, param_2 == puVar4)" ( (comma_expression "puVar4 = param_1 + 1, param_2 == puVar4" (assignment_expression "puVar4 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) , (binary_expression "param_2 == puVar4" identifier == identifier)) ))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (do_statement "do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);" do (compound_statement "{\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  }" { (while_statement "while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }" { (expression_statement "cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);" (assignment_expression "cVar2 = FUN_001b8810(param_3,*puVar4,*param_1)" identifier = (call_expression "FUN_001b8810(param_3,*puVar4,*param_1)" identifier (argument_list "(param_3,*puVar4,*param_1)" ( identifier , (pointer_expression "*puVar4" * identifier) , (pointer_expression "*param_1" * identifier) )))) ;) (expression_statement "uVar1 = *puVar4;" (assignment_expression "uVar1 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" identifier = identifier) ;) (if_statement "if (cVar2 == '\0') break;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (if_statement "if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }" if (parenthesized_expression "(param_1 != puVar4)" ( (binary_expression "param_1 != puVar4" identifier != identifier) )) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }" { (expression_statement "memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1)" identifier (argument_list "(param_1 + 1,param_1,(long)puVar4 - (long)param_1)" ( (binary_expression "param_1 + 1" identifier + number_literal) , identifier , (binary_expression "(long)puVar4 - (long)param_1" (cast_expression "(long)puVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ;) })) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (if_statement "if (param_2 == puVar4) {\n        return;\n      }" if (parenthesized_expression "(param_2 == puVar4)" ( (binary_expression "param_2 == puVar4" identifier == identifier) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) })) (while_statement "while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }" { (expression_statement "cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);" (assignment_expression "cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1])" identifier = (call_expression "FUN_001b8810(param_3,uVar1,puVar3[-1])" identifier (argument_list "(param_3,uVar1,puVar3[-1])" ( identifier , identifier , (subscript_expression "puVar3[-1]" identifier [ number_literal ]) )))) ;) (if_statement "if (cVar2 == '\0') break;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (expression_statement "*puVar3 = puVar3[-1];" (assignment_expression "*puVar3 = puVar3[-1]" (pointer_expression "*puVar3" * identifier) = (subscript_expression "puVar3[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" identifier = (binary_expression "puVar3 + -1" identifier + number_literal)) ;) })) (expression_statement "*puVar3 = uVar1;" (assignment_expression "*puVar3 = uVar1" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(param_2 != puVar4)" ( (binary_expression "param_2 != puVar4" identifier != identifier) )) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT == IDENT)) ))) )) (compound_statement { (return_statement return ;) })) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) , (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) })) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (break_statement break ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (return_statement return ;) })))
(function_definition "void FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)\n\n{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001c8050(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" (identifier "FUN_001c8050") (parameter_list "(undefined8 *param_1,undefined8 *param_2,undefined8 param_3)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined8 uVar1;\n  char cVar2;\n  undefined8 *puVar3;\n  undefined8 *puVar4;\n  \n  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }\n  do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);\n  return;\n}" ({ "{") (declaration "undefined8 uVar1;" (type_identifier "undefined8") (identifier "uVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "undefined8 *puVar3;" (type_identifier "undefined8") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (if_statement "if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {\n    return;\n  }" (if "if") (parenthesized_expression "((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4))" (( "(") (binary_expression "(param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)" (parenthesized_expression "(param_1 == param_2)" (( "(") (binary_expression "param_1 == param_2" (identifier "param_1") (== "==") (identifier "param_2")) () ")")) (|| "||") (parenthesized_expression "(puVar4 = param_1 + 1, param_2 == puVar4)" (( "(") (comma_expression "puVar4 = param_1 + 1, param_2 == puVar4" (assignment_expression "puVar4 = param_1 + 1" (identifier "puVar4") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (, ",") (binary_expression "param_2 == puVar4" (identifier "param_2") (== "==") (identifier "puVar4"))) () ")"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (do_statement "do {\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  } while (param_2 != puVar4);" (do "do") (compound_statement "{\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }\n    while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }\n    *puVar3 = uVar1;\n    puVar4 = puVar4 + 1;\n  }" ({ "{") (while_statement "while( true ) {\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);\n      uVar1 = *puVar4;\n      puVar3 = puVar4;\n      if (cVar2 == '\0') break;\n      if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }\n      *param_1 = uVar1;\n      puVar4 = puVar4 + 1;\n      if (param_2 == puVar4) {\n        return;\n      }\n    }" ({ "{") (expression_statement "cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);" (assignment_expression "cVar2 = FUN_001b8810(param_3,*puVar4,*param_1)" (identifier "cVar2") (= "=") (call_expression "FUN_001b8810(param_3,*puVar4,*param_1)" (identifier "FUN_001b8810") (argument_list "(param_3,*puVar4,*param_1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (, ",") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")")))) (; ";")) (expression_statement "uVar1 = *puVar4;" (assignment_expression "uVar1 = *puVar4" (identifier "uVar1") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "puVar3 = puVar4;" (assignment_expression "puVar3 = puVar4" (identifier "puVar3") (= "=") (identifier "puVar4")) (; ";")) (if_statement "if (cVar2 == '\0') break;" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (param_1 != puVar4) {\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }" (if "if") (parenthesized_expression "(param_1 != puVar4)" (( "(") (binary_expression "param_1 != puVar4" (identifier "param_1") (!= "!=") (identifier "puVar4")) () ")")) (compound_statement "{\n        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);\n      }" ({ "{") (expression_statement "memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);" (call_expression "memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1)" (identifier "memmove") (argument_list "(param_1 + 1,param_1,(long)puVar4 - (long)param_1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) (, ",") (identifier "param_1") (, ",") (binary_expression "(long)puVar4 - (long)param_1" (cast_expression "(long)puVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar4")) (- "-") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1"))) () ")"))) (; ";")) (} "}"))) (expression_statement "*param_1 = uVar1;" (assignment_expression "*param_1 = uVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_2 == puVar4) {\n        return;\n      }" (if "if") (parenthesized_expression "(param_2 == puVar4)" (( "(") (binary_expression "param_2 == puVar4" (identifier "param_2") (== "==") (identifier "puVar4")) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (while_statement "while( true ) {\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);\n      if (cVar2 == '\0') break;\n      *puVar3 = puVar3[-1];\n      puVar3 = puVar3 + -1;\n    }" ({ "{") (expression_statement "cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);" (assignment_expression "cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1])" (identifier "cVar2") (= "=") (call_expression "FUN_001b8810(param_3,uVar1,puVar3[-1])" (identifier "FUN_001b8810") (argument_list "(param_3,uVar1,puVar3[-1])" (( "(") (identifier "param_3") (, ",") (identifier "uVar1") (, ",") (subscript_expression "puVar3[-1]" (identifier "puVar3") ([ "[") (number_literal "-1") (] "]")) () ")")))) (; ";")) (if_statement "if (cVar2 == '\0') break;" (if "if") (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "*puVar3 = puVar3[-1];" (assignment_expression "*puVar3 = puVar3[-1]" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (subscript_expression "puVar3[-1]" (identifier "puVar3") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar3 = puVar3 + -1;" (assignment_expression "puVar3 = puVar3 + -1" (identifier "puVar3") (= "=") (binary_expression "puVar3 + -1" (identifier "puVar3") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (expression_statement "*puVar3 = uVar1;" (assignment_expression "*puVar3 = uVar1" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != puVar4)" (( "(") (binary_expression "param_2 != puVar4" (identifier "param_2") (!= "!=") (identifier "puVar4")) () ")")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original name: __insertion_sort<__gnu_cxx::__normal_iterator<gold::Output_segment**,
   std::vector<gold::Output_segment*> >,
   __gnu_cxx::__ops::_Iter_comp_iter<gold::Layout::Compare_segments> > */

void std::
     __insertion_sort<__gnu_cxx::__normal_iterator<gold::type_1**,_std::vector<gold::type_1*>_>,___gnu_cxx::__ops::_Iter_comp_iter<gold::type_2::Compare_segments>_>
               (__normal_iterator<gold::type_1**,_std::vector<gold::type_1*,_std::allocator<gold::type_1*>_>_>
                __first,__normal_iterator<gold::type_1**,_std::vector<gold::type_1*,_std::allocator<gold::type_1*>_>_>
                        __last,_Iter_comp_iter<gold::type_2::Compare_segments> __comp)

{
  type_1 *seg1;
  bool bVar1;
  type_1 **var_4;
  type_1 **var_1;
  
  if ((__first._M_current == __last._M_current) ||
     (var_1 = __first._M_current + 1, __last._M_current == var_1)) {
    return;
  }
  do {
    while( true ) {
      bVar1 = gold::Layout::var_2
                        ((type_2 *)__comp._M_comp.layout_,*var_1,*__first._M_current);
      seg1 = *var_1;
      var_4 = var_1;
      if (!bVar1) break;
      if (__first._M_current != var_1) {
        var_3(__first._M_current + 1,__first._M_current,(long)var_1 - (long)__first._M_current);
      }
      *__first._M_current = seg1;
      var_1 = var_1 + 1;
      if (__last._M_current == var_1) {
        return;
      }
    }
    while( true ) {
      bVar1 = gold::Layout::var_2((type_2 *)__comp._M_comp.layout_,seg1,var_4[-1]);
      if (!bVar1) break;
      *var_4 = var_4[-1];
      var_4 = var_4 + -1;
    }
    *var_4 = seg1;
    var_1 = var_1 + 1;
  } while (__last._M_current != var_1);
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (return_statement))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (break_statement)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement))))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (subscript_expression argument: (identifier) index: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (return_statement))))

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

{
  undefined8 uVar1;
  char cVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  if ((param_1 == param_2) || (puVar4 = param_1 + 1, param_2 == puVar4)) {
    return;
  }
  do {
    while( true ) {
      cVar2 = FUN_001b8810(param_3,*puVar4,*param_1);
      uVar1 = *puVar4;
      puVar3 = puVar4;
      if (cVar2 == '\0') break;
      if (param_1 != puVar4) {
        memmove(param_1 + 1,param_1,(long)puVar4 - (long)param_1);
      }
      *param_1 = uVar1;
      puVar4 = puVar4 + 1;
      if (param_2 == puVar4) {
        return;
      }
    }
    while( true ) {
      cVar2 = FUN_001b8810(param_3,uVar1,puVar3[-1]);
      if (cVar2 == '\0') break;
      *puVar3 = puVar3[-1];
      puVar3 = puVar3 + -1;
    }
    *puVar3 = uVar1;
    puVar4 = puVar4 + 1;
  } while (param_2 != puVar4);
  return;
}

