Test of (lack of) comment preservation by inlining,
whether by literalization or reduction.

Comment handling was better in an earlier implementation
based on byte-oriented file surgery; switching to AST
manipulation (though better in all other respects) was
a regression. The underlying problem of AST comment fidelity
is Go issue #20744.

-- go.mod --
module testdata
go 1.12

-- a/f.go --
package a

func _() {
	f() //@ inline(re"f", f)
}

func f() {
	// a
	/* b */ g() /* c */
	// d
}

-- f --
package a

func _() {
	g() //@ inline(re"f", f)
}

func f() {
	// a
	/* b */
	g() /* c */
	// d
}

-- a/g.go --
package a

func _() {
	println(g()) //@ inline(re"g", g)
}

func g() int { return 1 /*hello*/ + /*there*/ 1 }

-- g --
package a

func _() {
	println(1 + 1) //@ inline(re"g", g)
}

func g() int { return 1 /*hello*/ + /*there*/ 1 }
