(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:n_args)
          op: assign_op.Equal
          rhs: {<10000>}
          spids: [59]
        )
      ]
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 82
              stdin_parts: [
                <'#include <stdio.h>\n'>
                <'#include <mcheck.h>\n'>
                <'\n'>
                <'/*\n'>
                <'  Compile do_test without optimization: GCC 4.9/5.0/6.0 takes a long time\n'>
                <'  to build this source. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67396  */\n'>
                <'\n'>
                <'__attribute__ ((optimize ("-O0")))\n'>
                <'int do_test (void)\n'>
                <'{\n'>
                <'    mtrace ();\n'>
                <'    printf (\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.ForExpr
      init: 
        (arith_expr.BinaryAssign
          op_id: Id.Arith_Equal
          left: <Id.Lit_ArithVarLike j>
          right: {<Id.Lit_Digits 0>}
        )
      cond: 
        (arith_expr.Binary
          op_id: Id.Arith_Less
          left: <Id.Lit_ArithVarLike j>
          right: 
            (arith_expr.Binary
              op_id: Id.Arith_Slash
              left: {($ Id.VSub_DollarName '$n_args')}
              right: {<Id.Lit_Digits 10>}
            )
        )
      update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:<Id.Lit_ArithVarLike j>)
      body: 
        (command.DoGroup
          children: [
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: <Id.Lit_ArithVarLike k>
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: <Id.Lit_ArithVarLike k>
                  right: {<Id.Lit_Digits 10>}
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:<Id.Lit_ArithVarLike k>)
              body: 
                (command.DoGroup
                  children: [
                    (C {<printf>} {(SQ <'"%%%d$s" '>)} 
                      {
                        (word_part.ArithSub
                          anode: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_Plus
                                  left: 
                                    (arith_expr.Binary
                                      op_id: Id.Arith_Star
                                      left: {<Id.Lit_Digits 10>}
                                      right: {($ Id.VSub_DollarName '$j')}
                                    )
                                  right: {($ Id.VSub_DollarName '$k')}
                                )
                              right: {<Id.Lit_Digits 1>}
                            )
                        )
                      }
                    )
                  ]
                )
            )
            (C {<printf>} {(DQ <Id.Lit_BadBackslash '\\'> <n>)})
          ]
        )
    )
    (C {<printf>} {(SQ <'"%%%d$s",\\n'>)} 
      {
        (word_part.ArithSub
          anode: 
            (arith_expr.Binary
              op_id: Id.Arith_Plus
              left: {($ Id.VSub_DollarName '$n_args')}
              right: {<Id.Lit_Digits 1>}
            )
        )
      }
    )
    (command.ForExpr
      init: 
        (arith_expr.BinaryAssign
          op_id: Id.Arith_Equal
          left: <Id.Lit_ArithVarLike j>
          right: {<Id.Lit_Digits 0>}
        )
      cond: 
        (arith_expr.Binary
          op_id: Id.Arith_Less
          left: <Id.Lit_ArithVarLike j>
          right: 
            (arith_expr.Binary
              op_id: Id.Arith_Slash
              left: {($ Id.VSub_DollarName '$n_args')}
              right: {<Id.Lit_Digits 10>}
            )
        )
      update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:<Id.Lit_ArithVarLike j>)
      body: 
        (command.DoGroup
          children: [
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: <Id.Lit_ArithVarLike k>
                  right: {<Id.Lit_Digits 0>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: <Id.Lit_ArithVarLike k>
                  right: {<Id.Lit_Digits 10>}
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:<Id.Lit_ArithVarLike k>)
              body: (command.DoGroup children:[(C {<printf>} {(SQ <'"a", '>)})])
            )
            (C {<printf>} {(DQ <'  /* %4d */'> <Id.Lit_BadBackslash '\\'> <n>)} 
              {
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Plus
                      left: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Star
                          left: {<Id.Lit_Digits 10>}
                          right: {($ Id.VSub_DollarName '$j')}
                        )
                      right: {($ Id.VSub_DollarName '$k')}
                    )
                )
              }
            )
          ]
        )
    )
    (C {<printf>} {(SQ <'"\\\\n");'>)})
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {(SQ <EOF>)}
              here_end_span_id: 305
              stdin_parts: [
                <'\n'>
                <'  return 0;\n'>
                <'}\n'>
                <'\n'>
                <'#define TEST_FUNCTION do_test ()\n'>
                <'#include "../test-skeleton.c"\n'>
                <'\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
  ]
)