// -lang=go1.17

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

// Parser accepts type parameters but the type checker
// needs to report any operations that are not permitted
// before Go 1.18.

package p

type T[P /* ERROR type parameter requires go1\.18 or later */ any /* ERROR predeclared any requires go1\.18 or later */] struct{}

// for init (and main, but we're not in package main) we should only get one error
func init[P /* ERROR func init must have no type parameters */ any /* ERROR predeclared any requires go1\.18 or later */]() {
}
func main[P /* ERROR type parameter requires go1\.18 or later */ any /* ERROR predeclared any requires go1\.18 or later */]() {
}

func f[P /* ERROR type parameter requires go1\.18 or later */ any /* ERROR predeclared any requires go1\.18 or later */](x P) {
	var _ T[ /* ERROR type instantiation requires go1\.18 or later */ int]
	var _ (T[ /* ERROR type instantiation requires go1\.18 or later */ int])
	_ = T[ /* ERROR type instantiation requires go1\.18 or later */ int]{}
	_ = T[ /* ERROR type instantiation requires go1\.18 or later */ int](struct{}{})
}

func (T[ /* ERROR type instantiation requires go1\.18 or later */ P]) g(x int) {
	f[ /* ERROR function instantiation requires go1\.18 or later */ int](0)     // explicit instantiation
	(f[ /* ERROR function instantiation requires go1\.18 or later */ int])(0)   // parentheses (different code path)
	f( /* ERROR implicit function instantiation requires go1\.18 or later */ x) // implicit instantiation
}

type C1 interface {
	comparable // ERROR predeclared comparable requires go1\.18 or later
}

type C2 interface {
	comparable // ERROR predeclared comparable requires go1\.18 or later
	int        // ERROR embedding non-interface type int requires go1\.18 or later
	~ /* ERROR embedding interface element ~int requires go1\.18 or later */ int
	int /* ERROR embedding interface element int \| ~string requires go1\.18 or later */ | ~string
}

type _ interface {
	// errors for these were reported with their declaration
	C1
	C2
}

type (
	_ comparable // ERROR predeclared comparable requires go1\.18 or later
	// errors for these were reported with their declaration
	_ C1
	_ C2

	_ = comparable // ERROR predeclared comparable requires go1\.18 or later
	// errors for these were reported with their declaration
	_ = C1
	_ = C2
)
