(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:n_args spids:[59])
          op: Equal
          rhs: {(10000)}
          spids: [59]
        )
      ]
      spids: [59]
    )
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          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: Arith_Equal
          left: (lhs_expr.LhsName name:j spids:[87])
          right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
        )
      cond: 
        (arith_expr.ArithBinary
          op_id: Arith_Less
          left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike j>)
          right: 
            (arith_expr.ArithBinary
              op_id: Arith_Slash
              left: (arith_expr.ArithWord w:{($ VSub_DollarName '$n_args')})
              right: (arith_expr.ArithWord w:{(Lit_Digits 10)})
            )
        )
      update: 
        (arith_expr.UnaryAssign
          op_id: Node_PostDPlus
          child: (lhs_expr.LhsName name:j spids:[105])
        )
      body: 
        (command.DoGroup
          children: [
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Arith_Equal
                  left: (lhs_expr.LhsName name:k spids:[117])
                  right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (arith_expr.ArithBinary
                  op_id: Arith_Less
                  left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike k>)
                  right: (arith_expr.ArithWord w:{(Lit_Digits 10)})
                )
              update: 
                (arith_expr.UnaryAssign
                  op_id: Node_PostDPlus
                  child: (lhs_expr.LhsName name:k spids:[131])
                )
              body: 
                (command.DoGroup
                  children: [
                    (C {(printf)} {(SQ <'"%%%d$s" '>)} 
                      {
                        (word_part.ArithSubPart
                          anode: 
                            (arith_expr.ArithBinary
                              op_id: Arith_Plus
                              left: 
                                (arith_expr.ArithBinary
                                  op_id: Arith_Plus
                                  left: 
                                    (arith_expr.ArithBinary
                                      op_id: Arith_Star
                                      left: (arith_expr.ArithWord w:{(Lit_Digits 10)})
                                      right: (arith_expr.ArithWord w:{($ VSub_DollarName '$j')})
                                    )
                                  right: (arith_expr.ArithWord w:{($ VSub_DollarName '$k')})
                                )
                              right: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                            )
                          spids: [146 161]
                        )
                      }
                    )
                  ]
                  spids: [137 164]
                )
            )
            (C {(printf)} {(DQ (Lit_Other '\\') (n))})
          ]
          spids: [111 174]
        )
    )
    (C {(printf)} {(SQ <'"%%%d$s",\\n'>)} 
      {
        (word_part.ArithSubPart
          anode: 
            (arith_expr.ArithBinary
              op_id: Arith_Plus
              left: (arith_expr.ArithWord w:{($ VSub_DollarName '$n_args')})
              right: (arith_expr.ArithWord w:{(Lit_Digits 1)})
            )
          spids: [183 190]
        )
      }
    )
    (command.ForExpr
      init: 
        (arith_expr.BinaryAssign
          op_id: Arith_Equal
          left: (lhs_expr.LhsName name:j spids:[196])
          right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
        )
      cond: 
        (arith_expr.ArithBinary
          op_id: Arith_Less
          left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike j>)
          right: 
            (arith_expr.ArithBinary
              op_id: Arith_Slash
              left: (arith_expr.ArithWord w:{($ VSub_DollarName '$n_args')})
              right: (arith_expr.ArithWord w:{(Lit_Digits 10)})
            )
        )
      update: 
        (arith_expr.UnaryAssign
          op_id: Node_PostDPlus
          child: (lhs_expr.LhsName name:j spids:[214])
        )
      body: 
        (command.DoGroup
          children: [
            (command.ForExpr
              init: 
                (arith_expr.BinaryAssign
                  op_id: Arith_Equal
                  left: (lhs_expr.LhsName name:k spids:[226])
                  right: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                )
              cond: 
                (arith_expr.ArithBinary
                  op_id: Arith_Less
                  left: (arith_expr.ArithVarRef token:<Lit_ArithVarLike k>)
                  right: (arith_expr.ArithWord w:{(Lit_Digits 10)})
                )
              update: 
                (arith_expr.UnaryAssign
                  op_id: Node_PostDPlus
                  child: (lhs_expr.LhsName name:k spids:[240])
                )
              body: (command.DoGroup children:[(C {(printf)} {(SQ <'"a", '>)})] spids:[246 256])
            )
            (C {(printf)} {(DQ ('  /* %4d */') (Lit_Other '\\') (n))} 
              {
                (word_part.ArithSubPart
                  anode: 
                    (arith_expr.ArithBinary
                      op_id: Arith_Plus
                      left: 
                        (arith_expr.ArithBinary
                          op_id: Arith_Star
                          left: (arith_expr.ArithWord w:{(Lit_Digits 10)})
                          right: (arith_expr.ArithWord w:{($ VSub_DollarName '$j')})
                        )
                      right: (arith_expr.ArithWord w:{($ VSub_DollarName '$k')})
                    )
                  spids: [267 278]
                )
              }
            )
          ]
          spids: [220 280]
        )
    )
    (C {(printf)} {(SQ <'"\\\\n");'>)})
    (command.SimpleCommand
      words: [{(cat)}]
      redirects: [
        (redir.HereDoc
          op: <Redir_DLess '<<'>
          fd: 16777215
          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')
          ]
        )
      ]
    )
  ]
)