(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.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          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'>
          ]
        )
      ]
    )
    (command.ForExpr
      init: 
        (arith_expr.BinaryAssign
          op_id: Id.Arith_Equal
          left: (sh_lhs_expr.Name name:j)
          right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
        )
      cond: 
        (arith_expr.Binary
          op_id: Id.Arith_Less
          left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike j>)
          right: 
            (arith_expr.Binary
              op_id: Id.Arith_Slash
              left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$n_args')})
              right: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>})
            )
        )
      update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:j))
      body: 
        (command.DoGroup
          children: [
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: (sh_lhs_expr.Name name:k)
                  right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike k>)
                  right: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>})
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name: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: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>})
                                      right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$j')})
                                    )
                                  right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$k')})
                                )
                              right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
                            )
                        )
                      }
                    )
                  ]
                )
            )
            (C {<printf>} {(DQ <Id.Lit_Other '\\'> <n>)})
          ]
        )
    )
    (C {<printf>} {(SQ <'"%%%d$s",\\n'>)} 
      {
        (word_part.ArithSub
          anode: 
            (arith_expr.Binary
              op_id: Id.Arith_Plus
              left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$n_args')})
              right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>})
            )
        )
      }
    )
    (command.ForExpr
      init: 
        (arith_expr.BinaryAssign
          op_id: Id.Arith_Equal
          left: (sh_lhs_expr.Name name:j)
          right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
        )
      cond: 
        (arith_expr.Binary
          op_id: Id.Arith_Less
          left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike j>)
          right: 
            (arith_expr.Binary
              op_id: Id.Arith_Slash
              left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$n_args')})
              right: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>})
            )
        )
      update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:j))
      body: 
        (command.DoGroup
          children: [
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: (sh_lhs_expr.Name name:k)
                  right: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>})
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_Less
                  left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike k>)
                  right: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>})
                )
              update: (arith_expr.UnaryAssign op_id:Id.Node_PostDPlus child:(sh_lhs_expr.Name name:k))
              body: (command.DoGroup children:[(C {<printf>} {(SQ <'"a", '>)})])
            )
            (C {<printf>} {(DQ <'  /* %4d */'> <Id.Lit_Other '\\'> <n>)} 
              {
                (word_part.ArithSub
                  anode: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Plus
                      left: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Star
                          left: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>})
                          right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$j')})
                        )
                      right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$k')})
                    )
                )
              }
            )
          ]
        )
    )
    (C {<printf>} {(SQ <'"\\\\n");'>)})
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir.HereDoc
          op: <Id.Redir_DLess '<<'>
          fd: -1
          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'>
          ]
        )
      ]
    )
  ]
)