(command.CommandList
  children: [
    (command.ShFunction
      name: check_nofold
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:func_addr_1)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<grep>} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$1')})
                              (C {<awk>} {(SQ <'{print $1}'>)})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [78]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:func_addr_2)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<grep>} {($ Id.VSub_Number '$3')} {($ Id.VSub_Number '$1')})
                              (C {<awk>} {(SQ <'{print $1}'>)})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [98]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$func_addr_1')} 
                          {<Id.Lit_Equals '='>} {($ Id.VSub_DollarName '$func_addr_2')} {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'Safe Identical Code Folding folded'>)} {($ Id.VSub_Number '$2')} 
                      {(DQ <and>)} {($ Id.VSub_Number '$3')}
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [118 131]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_fold
      body: 
        (BraceGroup
          children: [
            (C {<awk>} 
              {
                (DQ <'\n'> <'BEGIN { discard = 0; }\n'> <'/^Discarded input/ { discard = 1; }\n'> 
                  <'/^Memory map/ { discard = 0; }\n'> <'/.*'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <.text> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'..*('> ($ Id.VSub_Number '$2') <'|'> ($ Id.VSub_Number '$3') <').*/ { act[discard] = act[discard] '> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' '> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'0; }\n'> <'END {\n'> <'      # printf '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                  <kept> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' act[0] '> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <nfolded> 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' act[1] '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <n> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <';\n'> 
                  <'      if (length(act[0]) == 0 || length(act[1]) == 0)\n'> <'\t{\n'> <'\t  printf '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                  <'Safe Identical Code Folding did not fold '> ($ Id.VSub_Number '$2') <' and '> ($ Id.VSub_Number '$3') 
                  (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <n> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <'\n'> <'\t  exit 1;\n'> <'\t}\n'> 
                  <'    }'>
                )
              } {($ Id.VSub_Number '$1')}
            )
          ]
        )
    )
    (command.ShFunction
      name: arch_specific_safe_fold
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grep_x86)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_Backtick '`'>
                        child: 
                          (C {<grep>} {<-q>} {<-e>} {(DQ <'Advanced Micro Devices X86-64'>)} {<-e>} 
                            {(DQ <'Intel 80386'>)} {<-e>} {(DQ <ARM>)} {<-e>} {(DQ <TILE>)} {<-e>} {(DQ <PowerPC>)} {<-e>} {(DQ <AArch64>)} {<-e>} 
                            {(DQ <'IBM S/390'>)} {($ Id.VSub_Number '$2')}
                          )
                      )
                    }
                  spids: [233]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_QMark '$?')} {<-eq>} {<0>} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<check_fold>} {($ Id.VSub_Number '$3')} {($ Id.VSub_Number '$4')} 
                      {($ Id.VSub_Number '$5')}
                    )
                  ]
                  spids: [287 301]
                )
              ]
              else_action: [
                (C {<check_nofold>} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$4')} 
                  {($ Id.VSub_Number '$5')}
                )
              ]
            )
          ]
        )
    )
    (C {<arch_specific_safe_fold>} {<icf_safe_test_1.stdout>} {<icf_safe_test_2.stdout>} 
      {<icf_safe_test.map>} {(DQ <kept_func_1>)} {(DQ <kept_func_2>)}
    )
    (C {<check_fold>} {<icf_safe_test.map>} {(DQ <_ZN1AD2Ev>)} {(DQ <_ZN1AC2Ev>)})
    (C {<check_nofold>} {<icf_safe_test_1.stdout>} {(DQ <kept_func_3>)} {(DQ <kept_func_1>)})
    (C {<check_nofold>} {<icf_safe_test_1.stdout>} {(DQ <kept_func_3>)} {(DQ <kept_func_2>)})
  ]
)