// run

// Copyright 2020 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.

// This test makes sure unsafe-uintptr arguments are handled correctly.

package main

import (
	"runtime"
	"unsafe"
)

var done = make(chan bool, 1)

func setup() unsafe.Pointer {
	s := "ok"
	runtime.SetFinalizer(&s, func(p *string) { *p = "FAIL" })
	return unsafe.Pointer(&s)
}

//go:noinline
//go:uintptrescapes
func test(s string, p, q uintptr, rest ...uintptr) int {
	runtime.GC()
	runtime.GC()

	if *(*string)(unsafe.Pointer(p)) != "ok" {
		panic(s + ": p failed")
	}
	if *(*string)(unsafe.Pointer(q)) != "ok" {
		panic(s + ": q failed")
	}
	for _, r := range rest {
		// TODO(mdempsky): Remove.
		break

		if *(*string)(unsafe.Pointer(r)) != "ok" {
			panic(s + ": r[i] failed")
		}
	}

	done <- true
	return 0
}

//go:noinline
func f() int {
	return test("return", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
}

func main() {
	test("normal", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
	<-done

	go test("go", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
	<-done

	func() {
		defer test("defer", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
	}()
	<-done

	f()
	<-done
}
