Problems reported:

parser/non-nnbd/use_late_in_non_nnbd:4:1: The modifier 'late' is only available in null safe libraries.
late int x2;
^^^^

parser/non-nnbd/use_late_in_non_nnbd:5:1: The modifier 'late' is only available in null safe libraries.
late List<int> x3;
^^^^

parser/non-nnbd/use_late_in_non_nnbd:6:1: The modifier 'late' is only available in null safe libraries.
late final int x4;
^^^^

parser/non-nnbd/use_late_in_non_nnbd:8:1: Unexpected token ';'.
; // Meant to confuse so `.next`-ing makes it look like the end of a field.
^

parser/non-nnbd/use_late_in_non_nnbd:9:1: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
late;
^^^^

parser/non-nnbd/use_late_in_non_nnbd:10:1: Unexpected token ';'.
; // Meant to confuse so `.next`-ing makes it look like the end of a field.
^

parser/non-nnbd/use_late_in_non_nnbd:14:3: The modifier 'late' is only available in null safe libraries.
  late int y2;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:15:3: The modifier 'late' is only available in null safe libraries.
  late List<int> y3;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:16:3: The modifier 'late' is only available in null safe libraries.
  late final int y4;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:25:3: The modifier 'late' is only available in null safe libraries.
  late int z2;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:26:3: The modifier 'late' is only available in null safe libraries.
  late List<int> x3;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:27:3: The modifier 'late' is only available in null safe libraries.
  late final int z4;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:29:3: Expected a class member, but got ';'.
  ; // Meant to confuse so `.next`-ing makes it look like the end of a field.
  ^

parser/non-nnbd/use_late_in_non_nnbd:30:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
  late;
  ^^^^

parser/non-nnbd/use_late_in_non_nnbd:31:3: Expected a class member, but got ';'.
  ; // Meant to confuse so `.next`-ing makes it look like the end of a field.
  ^

beginCompilationUnit(int)
  beginMetadataStar(int)
  endMetadataStar(0)
  beginTopLevelMember(int)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, )
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(x1)
      handleType(int, null)
      handleIdentifier(x1, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, int, ;)
  endTopLevelDeclaration(late)
  beginMetadataStar(late)
  endMetadataStar(0)
  beginTopLevelMember(late)
    handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(x2)
      handleType(int, null)
      handleIdentifier(x2, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, late, null, 1, int, ;)
  endTopLevelDeclaration(late)
  beginMetadataStar(late)
  endMetadataStar(0)
  beginTopLevelMember(late)
    handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, null, late)
      handleIdentifier(List, typeReference)
      beginTypeArguments(<)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(>)
        handleType(int, null)
      endTypeArguments(1, <, >)
      handleType(List, null)
      handleIdentifier(x3, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, late, null, 1, List, ;)
  endTopLevelDeclaration(late)
  beginMetadataStar(late)
  endMetadataStar(0)
  beginTopLevelMember(late)
    handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, late, final, late)
      handleIdentifier(int, typeReference)
      handleNoTypeArguments(x4)
      handleType(int, null)
      handleIdentifier(x4, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, late, final, 1, final, ;)
  endTopLevelDeclaration(late)
  beginMetadataStar(late)
  endMetadataStar(0)
  beginTopLevelMember(late)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
      handleIdentifier(late, typeReference)
      handleNoTypeArguments(x5)
      handleType(late, null)
      handleIdentifier(x5, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, late, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(;)
  endMetadataStar(0)
  beginTopLevelMember(;)
    handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ;, ;)
    handleInvalidTopLevelDeclaration(;)
  endTopLevelDeclaration(late)
  beginMetadataStar(late)
  endMetadataStar(0)
  beginTopLevelMember(late)
    beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, ;)
      handleRecoverableError(MissingConstFinalVarOrType, late, late)
      handleNoType(;)
      handleIdentifier(late, topLevelVariableDeclaration)
      handleNoFieldInitializer(;)
    endTopLevelFields(null, null, null, null, null, 1, late, ;)
  endTopLevelDeclaration(;)
  beginMetadataStar(;)
  endMetadataStar(0)
  beginTopLevelMember(;)
    handleRecoverableError(Message[UnexpectedToken, Unexpected token ';'., null, {lexeme: ;}], ;, ;)
    handleInvalidTopLevelDeclaration(;)
  endTopLevelDeclaration(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(;, null)
      handleNoType(;)
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(List)
        endMetadataStar(0)
        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(List, typeReference)
          beginTypeArguments(<)
            handleIdentifier(String, typeReference)
            handleNoTypeArguments(>)
            handleType(String, null)
          endTypeArguments(1, <, >)
          handleType(List, null)
          handleIdentifier(args, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, null, args, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(int)
        endMetadataStar(0)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(y1)
        handleType(int, null)
        beginVariablesDeclaration(y1, null, null)
          handleIdentifier(y1, localVariableDeclaration)
          beginInitializedIdentifier(y1)
            handleNoVariableInitializer(y1)
          endInitializedIdentifier(y1)
        endVariablesDeclaration(1, ;)
        handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
        beginMetadataStar(int)
        endMetadataStar(0)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(y2)
        handleType(int, null)
        beginVariablesDeclaration(y2, late, null)
          handleIdentifier(y2, localVariableDeclaration)
          beginInitializedIdentifier(y2)
            handleNoVariableInitializer(y2)
          endInitializedIdentifier(y2)
        endVariablesDeclaration(1, ;)
        handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
        beginMetadataStar(List)
        endMetadataStar(0)
        handleIdentifier(List, typeReference)
        beginTypeArguments(<)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(>)
          handleType(int, null)
        endTypeArguments(1, <, >)
        handleType(List, null)
        beginVariablesDeclaration(y3, late, null)
          handleIdentifier(y3, localVariableDeclaration)
          beginInitializedIdentifier(y3)
            handleNoVariableInitializer(y3)
          endInitializedIdentifier(y3)
        endVariablesDeclaration(1, ;)
        handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
        beginMetadataStar(int)
        endMetadataStar(0)
        handleIdentifier(int, typeReference)
        handleNoTypeArguments(y4)
        handleType(int, null)
        beginVariablesDeclaration(y4, late, final)
          handleIdentifier(y4, localVariableDeclaration)
          beginInitializedIdentifier(y4)
            handleNoVariableInitializer(y4)
          endInitializedIdentifier(y4)
        endVariablesDeclaration(1, ;)
        beginMetadataStar(late)
        endMetadataStar(0)
        handleIdentifier(late, typeReference)
        handleNoTypeArguments(y5)
        handleType(late, null)
        beginVariablesDeclaration(y5, null, null)
          handleIdentifier(y5, localVariableDeclaration)
          beginInitializedIdentifier(y5)
            handleNoVariableInitializer(y5)
          endInitializedIdentifier(y5)
        endVariablesDeclaration(1, ;)
        handleEmptyStatement(;)
        handleIdentifier(late, expression)
        handleNoTypeArguments(;)
        handleNoArguments(;)
        handleSend(late, ;)
        handleExpressionStatement(;)
        handleEmptyStatement(;)
      endBlockFunctionBody(8, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrMixinOrNamedMixinApplicationPrelude(class)
    handleIdentifier(Foo, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, null, Foo)
      handleNoType(Foo)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
        beginMetadataStar(int)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, null, {)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(z1)
            handleType(int, null)
            handleIdentifier(z1, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, null, null, 1, int, ;)
        endMember()
        beginMetadataStar(late)
        endMetadataStar(0)
        handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(z2)
            handleType(int, null)
            handleIdentifier(z2, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, late, null, 1, int, ;)
        endMember()
        beginMetadataStar(late)
        endMetadataStar(0)
        handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, late, null, late)
            handleIdentifier(List, typeReference)
            beginTypeArguments(<)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(>)
              handleType(int, null)
            endTypeArguments(1, <, >)
            handleType(List, null)
            handleIdentifier(x3, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, late, null, 1, List, ;)
        endMember()
        beginMetadataStar(late)
        endMetadataStar(0)
        handleRecoverableError(Message[UnexpectedModifierInNonNnbd, The modifier 'late' is only available in null safe libraries., null, {lexeme: late}], late, late)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, late, final, late)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(z4)
            handleType(int, null)
            handleIdentifier(z4, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, late, final, 1, final, ;)
        endMember()
        beginMetadataStar(late)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
            handleIdentifier(late, typeReference)
            handleNoTypeArguments(z5)
            handleType(late, null)
            handleIdentifier(z5, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, null, null, 1, late, ;)
        endMember()
        beginMetadataStar(;)
        endMetadataStar(0)
        beginMember()
          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
          handleInvalidMember(;)
        endMember()
        beginMetadataStar(late)
        endMetadataStar(0)
        beginMember()
          beginFields(DeclarationKind.Class, null, null, null, null, null, null, ;)
            handleRecoverableError(MissingConstFinalVarOrType, late, late)
            handleNoType(;)
            handleIdentifier(late, fieldDeclaration)
            handleNoFieldInitializer(;)
          endClassFields(null, null, null, null, null, null, 1, late, ;)
        endMember()
        beginMetadataStar(;)
        endMetadataStar(0)
        beginMember()
          handleRecoverableError(Message[ExpectedClassMember, Expected a class member, but got ';'., null, {lexeme: ;}], ;, ;)
          handleInvalidMember(;)
        endMember()
      endClassOrMixinOrExtensionBody(DeclarationKind.Class, 8, {, })
    endClassDeclaration(class, })
  endTopLevelDeclaration()
endCompilationUnit(10, )
