Regression test for https://go.dev/issue/76287:
ensure that inlining a function that wraps go1.26's new(expr)
correctly inserts a conversion as needed, just as it would for a
declared generic function equivalent to 'new'.

- f uses a declared _new(expr) function.
- g uses the built-in new(expr) function.

-- go.mod --
module testdata
go 1.26

-- common.go --
package p

func _new[T any](x T) *T { return &x }

-- f.go --
package p

func f(x int64) *int64 { return _new(x) }

var _ *int64 = f(42) //@ inline(re"f", f)

-- g.go --
package p

func g(x int64) *int64 { return new(x) }

var _ *int64 = g(42) //@ inline(re"g", g)

-- f --
package p

func f(x int64) *int64 { return _new(x) }

var _ *int64 = _new(int64(42)) //@ inline(re"f", f)

-- g --
package p

func g(x int64) *int64 { return new(x) }

var _ *int64 = new(int64(42)) //@ inline(re"g", g)
