1 | // Copyright 2021 The Go Authors. All rights reserved. |
---|---|
2 | // Use of this source code is governed by a BSD-style |
3 | // license that can be found in the LICENSE file. |
4 | |
5 | //go:build go1.20 |
6 | // +build go1.20 |
7 | |
8 | package ssa_test |
9 | |
10 | import ( |
11 | "go/ast" |
12 | "go/parser" |
13 | "go/token" |
14 | "go/types" |
15 | "testing" |
16 | |
17 | "golang.org/x/tools/go/ssa" |
18 | "golang.org/x/tools/go/ssa/ssautil" |
19 | ) |
20 | |
21 | func TestBuildPackageGo120(t *testing.T) { |
22 | tests := []struct { |
23 | name string |
24 | src string |
25 | importer types.Importer |
26 | }{ |
27 | {"slice to array", "package p; var s []byte; var _ = ([4]byte)(s)", nil}, |
28 | {"slice to zero length array", "package p; var s []byte; var _ = ([0]byte)(s)", nil}, |
29 | {"slice to zero length array type parameter", "package p; var s []byte; func f[T ~[0]byte]() { tmp := (T)(s); var z T; _ = tmp == z}", nil}, |
30 | {"slice to non-zero length array type parameter", "package p; var s []byte; func h[T ~[1]byte | [4]byte]() { tmp := T(s); var z T; _ = tmp == z}", nil}, |
31 | {"slice to maybe-zero length array type parameter", "package p; var s []byte; func g[T ~[0]byte | [4]byte]() { tmp := T(s); var z T; _ = tmp == z}", nil}, |
32 | } |
33 | |
34 | for _, tc := range tests { |
35 | tc := tc |
36 | t.Run(tc.name, func(t *testing.T) { |
37 | t.Parallel() |
38 | fset := token.NewFileSet() |
39 | f, err := parser.ParseFile(fset, "p.go", tc.src, parser.ParseComments) |
40 | if err != nil { |
41 | t.Error(err) |
42 | } |
43 | files := []*ast.File{f} |
44 | |
45 | pkg := types.NewPackage("p", "") |
46 | conf := &types.Config{Importer: tc.importer} |
47 | if _, _, err := ssautil.BuildPackage(conf, fset, pkg, files, ssa.SanityCheckFunctions); err != nil { |
48 | t.Errorf("unexpected error: %v", err) |
49 | } |
50 | }) |
51 | } |
52 | } |
53 |
Members