(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:srctree)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:4)
                command_list: 
                  (command.CommandList
                    children: [(C {(dirname)} {(DQ ($ Id.VSub_Number '$0'))})]
                  )
              )
            }
          spids: [3]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SHOW_ERROR)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [13]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Number '$1'))} {(Id.Lit_Equals '=')} 
                  {(DQ (--show-error))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:31)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:SHOW_ERROR)
                  op: assign_op.Equal
                  rhs: {(1)}
                  spids: [36]
                )
              ]
            )
            (command.AndOr ops:[Id.Op_DPipe] children:[(C {(shift)}) (C {(true)})])
          ]
          spids: [15 33]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:gccplugins_dir)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:50)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {($ Id.VSub_Number '$3')} {(-print-file-name) (Id.Lit_Equals '=') (plugin)})
                    ]
                  )
              )
            }
          spids: [49]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:plugincc)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:59)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [
                          {($ Id.VSub_Number '$1')}
                          {(-E)}
                          {(-x)}
                          {(c) (Id.Lit_Other '+') (Id.Lit_Other '+')}
                          {(-)}
                          {(-o)}
                          {(/dev/null)}
                          {(-I) (DQ (${ Id.VSub_Name srctree)) (/gcc-plugins)}
                          {(-I) (DQ (${ Id.VSub_Name gccplugins_dir)) (/include)}
                        ]
                        redirects: [
                          (redir.Redir
                            op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:92)
                            fd: 2
                            arg_word: {(1)}
                          )
                          (redir.HereDoc
                            op: (Token id:Id.Redir_DLess val:'<<' span_id:95)
                            fd: -1
                            here_begin: {(EOF)}
                            here_end_span_id: 113
                            stdin_parts: [
                              ('#include ')
                              (Id.Right_DoubleQuote '"')
                              (gcc-common.h)
                              (Id.Right_DoubleQuote '"')
                              ('\n')
                              (
'#if BUILDING_GCC_VERSION >= 4008 || defined(ENABLE_BUILD_WITH_CXX)\n'
                              )
                              ('#warning ')
                              ($ Id.VSub_Number '$2')
                              (' CXX\n')
                              ('#else\n')
                              ('#warning ')
                              ($ Id.VSub_Number '$1')
                              (' CC\n')
                              ('#endif\n')
                            ]
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [58]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-ne)} {(0)} {(Id.Lit_RBracket ']')})
          ]
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$SHOW_ERROR'))} 
                          {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:144)
                    )
                  ]
                  action: [
                    (command.Simple
                      words: [{(echo)} {(DQ (${ Id.VSub_Name plugincc))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:157)
                          fd: -1
                          arg_word: {(2)}
                        )
                      ]
                    )
                  ]
                  spids: [132 146]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:164)
              arg_word: {(1)}
            )
          ]
          spids: [117 129]
        )
      ]
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName '$plugincc'))}
      arms: [
        (case_arm
          pat_list: [{(Id.Lit_Star '*') (DQ ($ Id.VSub_Number '$1') (' CC')) (Id.Lit_Star '*')}]
          action: [
            (C {(echo)} {(DQ ($ Id.VSub_Number '$1'))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:196)
              arg_word: {(0)}
            )
          ]
          spids: [180 186 201 -1]
        )
        (case_arm
          pat_list: [{(Id.Lit_Star '*') (DQ ($ Id.VSub_Number '$2') (' CXX')) (Id.Lit_Star '*')}]
          spids: [205 211 218 -1]
        )
        (case_arm
          pat_list: [{(Id.Lit_Star '*')}]
          action: [
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:226)
              arg_word: {(1)}
            )
          ]
          spids: [222 223 231 -1]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:plugincc)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:240)
                command_list: 
                  (command.CommandList
                    children: [
                      (command.Simple
                        words: [
                          {($ Id.VSub_Number '$2')}
                          {(-c)}
                          {(-x)}
                          {(c) (Id.Lit_Other '+') (Id.Lit_Other '+')}
                          {(-std) (Id.Lit_Equals '=') (gnu) (Id.Lit_Other '+') (Id.Lit_Other '+') (98)}
                          {(-)}
                          {(-fsyntax-only)}
                          {(-I) (DQ (${ Id.VSub_Name srctree)) (/gcc-plugins)}
                          {(-I) (DQ (${ Id.VSub_Name gccplugins_dir)) (/include)}
                        ]
                        redirects: [
                          (redir.Redir
                            op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:278)
                            fd: 2
                            arg_word: {(1)}
                          )
                          (redir.HereDoc
                            op: (Token id:Id.Redir_DLess val:'<<' span_id:281)
                            fd: -1
                            here_begin: {(EOF)}
                            here_end_span_id: 296
                            stdin_parts: [
                              ('#include ')
                              (Id.Right_DoubleQuote '"')
                              (gcc-common.h)
                              (Id.Right_DoubleQuote '"')
                              ('\n')
                              ('class test {\n')
                              ('public:\n')
                              ('\tint test;\n')
                              ('} test = {\n')
                              ('\t.test = 1\n')
                              ('};\n')
                            ]
                          )
                        ]
                      )
                    ]
                  )
              )
            }
          spids: [239]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')})
          ]
          action: [
            (C {(echo)} {(DQ ($ Id.VSub_Number '$2'))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:322)
              arg_word: {(0)}
            )
          ]
          spids: [300 312]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$SHOW_ERROR'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:341)
            )
          ]
          action: [
            (command.Simple
              words: [{(echo)} {(DQ (${ Id.VSub_Name plugincc))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:354)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
          ]
          spids: [329 343]
        )
      ]
    )
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:359) arg_word:{(1)})
  ]
)