Problems reported:

parser/error_recovery/await_not_in_async:4:3: 'await' can only be used in 'async' or 'async*' methods.
  await f();
  ^^^^^

beginCompilationUnit(Future)
  beginMetadataStar(Future)
  endMetadataStar(0)
  beginTopLevelMember(Future)
    beginTopLevelMethod(, null)
      handleIdentifier(Future, typeReference)
      beginTypeArguments(<)
        handleVoidKeyword(void)
      endTypeArguments(1, <, >)
      handleType(Future, null)
      handleIdentifier(f, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleIdentifier(Future, expression)
      handleNoTypeArguments(.)
      handleNoArguments(.)
      handleSend(Future, .)
      handleIdentifier(value, expressionContinuation)
      handleNoTypeArguments(()
      beginArguments(()
      endArguments(0, (, ))
      handleSend(value, ;)
      endBinaryExpression(.)
      handleExpressionFunctionBody(=>, ;)
    endTopLevelMethod(Future, null, ;)
  endTopLevelDeclaration(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(;, null)
      handleVoidKeyword(void)
      handleIdentifier(g, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginAwaitExpression(await)
          handleIdentifier(f, expression)
          handleNoTypeArguments(()
          beginArguments(()
          endArguments(0, (, ))
          handleSend(f, ;)
          handleRecoverableError(AwaitNotAsync, await, await)
        endInvalidAwaitExpression(await, ;, AwaitNotAsync)
        handleExpressionStatement(;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(2, )
