// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package ast_test import ( "go/ast" "go/parser" "go/token" "testing" ) func TestIssue33649(t *testing.T) { for _, src := range []string{ `package p; func _()`, `package p; func _() {`, `package p; func _() { _ = 0`, `package p; func _() { _ = 0 }`, } { fset := token.NewFileSet() f, _ := parser.ParseFile(fset, "", src, parser.AllErrors) if f == nil { panic("invalid test setup: parser didn't return an AST") } // find corresponding token.File var tf *token.File fset.Iterate(func(f *token.File) bool { tf = f return true }) tfEnd := tf.Base() + tf.Size() fd := f.Decls[len(f.Decls)-1].(*ast.FuncDecl) fdEnd := int(fd.End()) if fdEnd != tfEnd { t.Errorf("%q: got fdEnd = %d; want %d (base = %d, size = %d)", src, fdEnd, tfEnd, tf.Base(), tf.Size()) } } }