(command.CommandList children: [ (command.ShFunction name: error_if_symbol_absent body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (C {<is_symbol_present>} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}) ] negated: T ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <Symbol>)} {($ Id.VSub_Number '$2')} {(DQ <'not present, possibly folded.'>)} ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [78 90] ) ] ) ] ) ) (command.ShFunction name: is_symbol_present body: (BraceGroup children: [ (command.Simple words: [{<grep>} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$1')}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {($ Id.VSub_QMark '$?')} ) ] ) ) (command.ShFunction name: check_nofold body: (BraceGroup children: [ (C {<error_if_symbol_absent>} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}) (C {<error_if_symbol_absent>} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$3')}) (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: [165] ) ] ) (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: [185] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$func_addr_1')} {<Id.Lit_Equals '='>} {($ Id.VSub_DollarName '$func_addr_2')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] 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: [205 219] ) ] ) ] ) ) (command.ShFunction name: check_fold body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {<is_symbol_present>} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$2')}) ] negated: T ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [254 265] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {<is_symbol_present>} {($ Id.VSub_Number '$1')} {($ Id.VSub_Number '$3')}) ] negated: T ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [277 288] ) ] ) (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 '$4')} ) ] ) ) (command.ShFunction name: arch_specific_safe_fold body: (BraceGroup children: [ (command.Simple words: [ {<grep>} {<-e>} {(DQ <'Intel 80386'>)} {<-e>} {(DQ <ARM>)} {<-e>} {(DQ <PowerPC>)} {($ Id.VSub_Number '$1')} ] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) (command.If arms: [ (if_arm cond: [ (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 '$2')} {($ Id.VSub_Number '$4')} {($ Id.VSub_Number '$5')} {($ Id.VSub_Number '$3')} ) ] spids: [397 411] ) ] else_action: [ (C {<check_nofold>} {($ Id.VSub_Number '$2')} {($ Id.VSub_Number '$4')} {($ Id.VSub_Number '$5')} ) ] ) ] ) ) (C {<arch_specific_safe_fold>} {<icf_safe_so_test_2.stdout>} {<icf_safe_so_test_1.stdout>} {<icf_safe_so_test.map>} {(DQ <foo_prot>)} {(DQ <foo_hidden>)} ) (C {<arch_specific_safe_fold>} {<icf_safe_so_test_2.stdout>} {<icf_safe_so_test_1.stdout>} {<icf_safe_so_test.map>} {(DQ <foo_prot>)} {(DQ <foo_internal>)} ) (C {<arch_specific_safe_fold>} {<icf_safe_so_test_2.stdout>} {<icf_safe_so_test_1.stdout>} {<icf_safe_so_test.map>} {(DQ <foo_prot>)} {(DQ <foo_static>)} ) (C {<arch_specific_safe_fold>} {<icf_safe_so_test_2.stdout>} {<icf_safe_so_test_1.stdout>} {<icf_safe_so_test.map>} {(DQ <foo_hidden>)} {(DQ <foo_internal>)} ) (C {<arch_specific_safe_fold>} {<icf_safe_so_test_2.stdout>} {<icf_safe_so_test_1.stdout>} {<icf_safe_so_test.map>} {(DQ <foo_hidden>)} {(DQ <foo_static>)} ) (C {<arch_specific_safe_fold>} {<icf_safe_so_test_2.stdout>} {<icf_safe_so_test_1.stdout>} {<icf_safe_so_test.map>} {(DQ <foo_internal>)} {(DQ <foo_static>)} ) (C {<check_nofold>} {<icf_safe_so_test_1.stdout>} {(DQ <foo_glob>)} {(DQ <bar_glob>)}) ] )