1
0
mirror of https://github.com/golang/go synced 2024-11-24 07:30:10 -07:00
go/test
Robert Griesemer 09ada1af8f cmd/compile/internal/syntax: parser to accept ~x as unary expression
Accept ~x as ordinary unary expression in the parser but recognize
such expressions as invalid in the type checker.

This change opens the door to recognizing complex type constraint
literals such as `*E|~int` in `[P *E|~int]` and parse them correctly
instead of reporting a parse error because `P*E|~int` syntactically
looks like an incorrect array length expression (binary expression
where the RHS of | is an invalid unary expression ~int).

As a result, the parser is more forgiving with expressions but the
type checker will reject invalid uses as before.

We could pass extra information into the binary/unary expression
parse functions to prevent the use of ~ in invalid situations but
it doesn't seem worth the trouble. In fact it may be advantageous
to allow a more liberal expression syntax especially in the presence
of errors (better parser synchronization after an error).

Preparation for fixing #49482.

Change-Id: I119e8bd9445dfa6460fcd7e0658e3554a34b2769
Reviewed-on: https://go-review.googlesource.com/c/go/+/402255
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
2022-04-26 02:19:42 +00:00
..
abi
alias3.dir
asmhdr.dir cmd/compile: use exact constant in go_asm.h 2022-01-10 21:27:19 +00:00
bench
chan
closure3.dir cmd/compile/internal/inline: revise closure inl position fix 2021-11-24 15:55:56 +00:00
closure5.dir test: use dot-relative imports where appropriate 2022-03-24 02:14:15 +00:00
codegen cmd/compile: add jump table codegen test 2022-04-14 21:16:29 +00:00
ddd2.dir
dwarf
fixedbugs cmd/compile/internal/syntax: parser to accept ~x as unary expression 2022-04-26 02:19:42 +00:00
import2.dir
import4.dir
interface cmd/compile: require -p flag 2022-03-09 21:31:58 +00:00
intrinsic.dir
ken test/ken/slicearray.go: correct type width in comment 2021-12-05 12:50:44 +00:00
linkname.dir test: compile source files as if from "test" module 2022-03-24 17:50:47 +00:00
method4.dir
retjmp.dir cmd/internal/obj: fix tail call in non-zero frame leaf function on MIPS and S390X 2021-12-13 22:42:08 +00:00
runtime
stress
syntax cmd/compile/internal/syntax: better errors for syntax errors in lists 2022-03-31 00:26:58 +00:00
typeparam test/typeparam: fix copyright message 2022-04-21 23:41:49 +00:00
uintptrescapes.dir
64bit.go
235.go
alg.go
alias1.go
alias2.go cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
alias3.go
alias.go
align.go
append1.go cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
append.go
args.go
armimm.go
asmhdr.go cmd/compile: emit sensible go_asm.h consts for big ints 2021-10-30 18:30:05 +00:00
assign1.go
assign.go
atomicload.go
bigalg.go
bigmap.go
blank1.go
blank.go
bom.go
bombad.go
bounds.go
cannotassign.go
chancap.go
chanlinear.go
char_lit1.go
char_lit.go
checkbce.go
clearfat.go
closedchan.go
closure1.go
closure2.go
closure3.go
closure4.go
closure5.go
closure6.go
closure7.go
closure.go
cmp6.go
cmp.go
cmplx.go
cmplxdivide1.go
cmplxdivide.c
cmplxdivide.go
complit1.go
complit.go
compos.go
const1.go
const2.go
const3.go
const4.go
const5.go
const6.go
const7.go cmd/compile: require -p flag 2022-03-09 21:31:58 +00:00
const.go
convert1.go
convert2.go
convert3.go
convert4.go
convert.go
convlit1.go
convlit.go
convT2X.go
copy1.go
copy.go
crlf.go
ddd1.go cmd/compile: match Go 1.17 compiler error messages more closely 2021-11-12 23:07:01 +00:00
ddd2.go
ddd.go
decl.go
declbad.go
defer.go
defererrcheck.go
deferfin.go
defernil.go
deferprint.go
deferprint.out
devirt.go
directive2.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
directive.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
divide.go
divmod.go
embedfunc.go
embedvers.go
empty.go
env.go
eof1.go
eof.go
escape2.go
escape2n.go
escape3.go
escape4.go
escape5.go
escape_array.go
escape_calls.go
escape_closure.go
escape_field.go
escape_goto.go
escape_hash_maphash.go
escape_iface.go
escape_indir.go
escape_level.go
escape_map.go
escape_param.go
escape_runtime_atomic.go
escape_selfassign.go
escape_slice.go
escape_struct_param1.go
escape_struct_param2.go
escape_struct_return.go
escape_sync_atomic.go
escape_unsafe.go
escape.go
fibo.go
finprofiled.go
float_lit2.go
float_lit3.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
float_lit.go
floatcmp.go
for.go
func1.go
func2.go
func3.go
func4.go
func5.go
func6.go
func7.go
func8.go
func.go
funcdup2.go
funcdup.go
fuse.go
gc1.go
gc2.go
gc.go
gcgort.go
gcstring.go
goprint.go
goprint.out
goto.go
heapsampling.go
helloworld.go
helloworld.out
if.go
import1.go test: re-enable most go/tests that were disabled because of types2 differences 2022-01-11 02:26:58 +00:00
import2.go
import4.go
import5.go
import6.go test: re-enable most go/tests that were disabled because of types2 differences 2022-01-11 02:26:58 +00:00
import.go
index0.go
index1.go
index2.go
index.go
indirect1.go
indirect.go
init1.go
init.go
initcomma.go
initempty.go
initexp.go
initialize.go
initializerr.go test: re-enable most go/tests that were disabled because of types2 differences 2022-01-11 02:26:58 +00:00
initloop.go
inline_big.go
inline_caller.go
inline_callers.go
inline_endian.go
inline_literal.go
inline_math_bits_rotate.go
inline_sync.go
inline_variadic.go
inline.go cmd/compile: constant-fold switches early in compilation 2022-04-14 19:37:30 +00:00
int_lit.go
intcvt.go
intrinsic_atomic.go
intrinsic.go
iota.go
label1.go
label.go
linkmain_run.go cmd/compile: require -p flag 2022-03-09 21:31:58 +00:00
linkmain.go
linkname3.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
linkname.go
linkobj.go cmd/compile: require -p flag 2022-03-09 21:31:58 +00:00
linkx_run.go
linkx.go
literal2.go
literal.go
live1.go
live2.go
live_regabi.go
live_uintptrkeepalive.go cmd/compile: add //go:uintptrkeepalive 2022-04-21 18:06:38 +00:00
live.go
locklinear.go
loopbce.go
mainsig.go
makechan.go
makemap.go
makenew.go
makeslice.go
mallocfin.go
map1.go
map.go
mapclear.go
maplinear.go
maymorestack.go cmd/{asm,compile,internal/obj}: add "maymorestack" support 2021-11-05 00:52:06 +00:00
mergemul.go
method1.go
method2.go go/types, types2: better error message when using *interface instead of interface 2022-01-10 22:48:40 +00:00
method3.go
method4.go
method5.go
method6.go
method7.go
method.go
named1.go
named.go
nil.go
nilcheck.go
nilptr2.go
nilptr3.go
nilptr4.go
nilptr5_aix.go
nilptr5_wasm.go
nilptr5.go
nilptr_aix.go
nilptr.go
nosplit.go cmd/link: faster algorithm for nosplit stack checking, better errors 2022-04-19 15:59:26 +00:00
notinheap2.go
notinheap3.go
notinheap.go
nowritebarrier.go
nul1.go
opt_branchlikely.go
parentype.go
peano.go
phiopt.go
print.go
print.out
printbig.go
printbig.out
prove.go
range.go
README.md
recover1.go
recover2.go
recover3.go
recover4.go test/recover4.go: use mprotect to create a hole instead of munmap 2021-11-12 16:58:34 +00:00
recover5.go
recover.go
reflectmethod1.go
reflectmethod2.go
reflectmethod3.go
reflectmethod4.go
reflectmethod5.go
reflectmethod6.go
reflectmethod7.go
reflectmethod8.go
rename1.go
rename.go
reorder2.go
reorder.go
retjmp.go
return.go
rotate0.go
rotate1.go
rotate2.go
rotate3.go
rotate.go
run.go test: add //go:build support to run.go 2022-04-12 05:46:57 +00:00
rune.go
runtime.go
shift1.go test: re-enable a bunch of tests with types2 2021-12-03 16:24:32 +00:00
shift2.go
shift3.go cmd/compile: adjust types2 shift check to match go/types (cleanup) 2022-04-07 17:19:55 +00:00
sieve.go
sigchld.go
sigchld.out
simassign.go
sinit_run.go cmd/compile: require -p flag 2022-03-09 21:31:58 +00:00
sinit.go
sizeof.go
slice3.go
slice3err.go
slicecap.go
sliceopt.go
solitaire.go
stack.go
stackobj2.go
stackobj3.go
stackobj.go
strcopy.go
strength.go
string_lit.go
stringrange.go
struct0.go
switch2.go
switch3.go
switch4.go
switch5.go
switch6.go
switch7.go
switch.go
tinyfin.go
torture.go
turing.go
typecheck.go test: re-enable most go/tests that were disabled because of types2 differences 2022-01-11 02:26:58 +00:00
typecheckloop.go
typeswitch1.go
typeswitch2.go
typeswitch2b.go
typeswitch3.go cmd/compile/internal/types2: better error for type assertion/switch on type parameter value 2021-11-12 22:20:51 +00:00
typeswitch.go
uintptrescapes2.go
uintptrescapes3.go
uintptrescapes.go
uintptrkeepalive.go cmd/compile: add //go:uintptrkeepalive 2022-04-21 18:06:38 +00:00
undef.go
unsafebuiltins.go
used.go
utf.go
varerr.go
varinit.go
winbatch.go
writebarrier.go
zerodivide.go

The test directory contains tests of the Go tool chain and runtime. It includes black box tests, regression tests, and error output tests. They are run as part of all.bash.

To run just these tests, execute:

../bin/go run run.go

To run just tests from specified files in this directory, execute:

../bin/go run run.go -- file1.go file2.go ...

Standard library tests should be written as regular Go tests in the appropriate package.

The tool chain and runtime also have regular Go tests in their packages. The main reasons to add a new test to this directory are:

  • it is most naturally expressed using the test runner; or
  • it is also applicable to gccgo and other Go tool chains.