aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder
AgeCommit message (Collapse)Author
2022-06-23[dev.unified] cmd/compile: plumb rtype through OSWITCH/OCASE clausesMatthew Dempsky
For (value) switch statements, we may generate OEQ comparisons between values of interface and concrete type, which in turn may require access to the concrete type's RType. To plumb this through, this CL adds CaseClause.RTypes to hold the rtype values, updates the GOEXPERIMENT=unified frontend to set it, and updates walk to plumb rtypes through into generated OEQ nodes. Change-Id: I6f1de2a1167ce54f5770147498a0a591efb3f012 Reviewed-on: https://go-review.googlesource.com/c/go/+/413361 Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-06-23[dev.unified] cmd/compile: plumb rtype through for OMAPLITMatthew Dempsky
OMAPLIT gets lowered into a bunch of OINDEXMAP operations, which in general may require a *runtime._type argument. This CL adds CompLitExpr.RType, updates the GOEXPERIMENT=unified frontend to start setting it, and updates walk to propagate it through to any generated OINDEXMAP operations. Change-Id: I278e7e8e615ea6d01f65a5eba6d6fc8e00045735 Reviewed-on: https://go-review.googlesource.com/c/go/+/413360 Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-06-23[dev.unified] cmd/compile: start setting RType fields for Unified IRMatthew Dempsky
This CL switches the GOEXPERIMENT=unified frontend to set RType fields in the simpler cases, and to make it fatal if they're missing. Subsequent CLs will handle the remaining more complex cases (e.g., expressions from later desugaring, and implicit conversions to interface type). Change-Id: If6257dcb3916905afd9b8371ea64b85f108ebbfb Reviewed-on: https://go-review.googlesource.com/c/go/+/413359 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: David Chase <drchase@google.com>
2022-06-22cmd/compile: don't use dictionary convert to shaped empty interfaceWayne Zuo
Fixes: #53254 Change-Id: I3153d6ebb9f25957b09363f45c5cd4651ee84c2d Reviewed-on: https://go-review.googlesource.com/c/go/+/410655 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2022-06-22cmd/compile: fix assert condition in generic method callWayne Zuo
Fixes #53406. Change-Id: If7ae39ec1042a792d82a0a2de96d168c22d8ab71 Reviewed-on: https://go-review.googlesource.com/c/go/+/412614 Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Alex Rakoczy <alex@golang.org> Auto-Submit: Alex Rakoczy <alex@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org>
2022-06-18cmd/compile: skip substituting closures in unsafe builtins argumentsCuong Manh Le
For unsafe.{Alignof,Offsetof,Sizeof}, subster will transform them them to OLITERAL nodes, and discard their arguments. However, any closure in their children nodes were already processed and added to declaration queue. Thus, we lack of information for generating instantiation for the closure. To fix it, just skip substituting the closures if we are going to edit the children nodes of unsafe builtins. Fixes #53390 Change-Id: Ia815cd05af9dc0491f10faac4399f378ac53dec6 Reviewed-on: https://go-review.googlesource.com/c/go/+/412794 Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2022-06-16[dev.unified] all: merge master (635b124) into dev.unifiedMatthew Dempsky
Merge List: + 2022-06-16 635b1244aa cmd/go: pass GOEXPERIMENT through to subtests + 2022-06-16 ef808ae1d4 expvar: don't crash if map value set to nil + 2022-06-16 32510eea74 go/parser: remove unused method checkBinaryExpr + 2022-06-16 74f1fa6ecb cmd/go: parallelize matchPackages work in each module + 2022-06-16 1d9d99b7ce cmd/link: consider alignment in carrier symbol size calculation + 2022-06-16 bcce8ef498 spec: adjust incorrect sentence in section on rune literals + 2022-06-16 ecc268aa26 test: add test that gofrontend fails + 2022-06-15 b6c1606889 internal/goarch, internal/goos: update generators for syslist.go + 2022-06-15 91baf5cecc reflect: fix reference comment to runtime/map.go + 2022-06-15 0e3d0c9581 syscall: clarify Pdeathsig documentation on Linux + 2022-06-15 74bf90c779 go/types, types2: add test case for issue for coverage + 2022-06-15 0cd0c12f57 doc/go1.19: use matching closing tag in unix build constraint heading + 2022-06-15 97bfc77f38 syscall, runtime/internal/syscall: always zero the higher bits of return value on linux/loong64 + 2022-06-15 937fa5000a net/netip: add missing ) in ParsePrefix errors + 2022-06-15 c2c76c6f19 cmd/link: set alignment for carrier symbols + 2022-06-15 36147dd1e8 cmd/go/internal/modindex: disable indexing for modules outside GOROOT and the module cache + 2022-06-15 2a78e8afc0 test: add tests for string/[]byte/[]rune conversions + 2022-06-15 f9c0264107 net: avoid infinite recursion in Windows Resolver.lookupTXT + 2022-06-14 0dffda1383 spec: clarify "slice of bytes" and "slice of runes" through examples + 2022-06-14 c22a6c3b90 reflect: when StructOf overflows computing size/offset, panic + 2022-06-14 e1e66a03a6 cmd/compile,runtime,reflect: move embedded bit from offset to name + 2022-06-14 cb9bf93078 cmd/go: quote package directory when calling glob + 2022-06-14 cad477c922 cpu: fix typos in test case + 2022-06-13 c29be2d41c runtime: add HACKING section on nosplit functions + 2022-06-13 c5be77b687 doc/go1.19: minor edits + 2022-06-13 56bc3098f4 sync: improve linearity test robustness + 2022-06-13 1fe2810f9c sync: move lock linearity test and treat it like a performance test + 2022-06-13 6130461149 internal/testmath: add two-sample Welch's t-test for performance tests + 2022-06-13 24b9039149 doc/go1.19: prefer relative links to other parts of the Go website + 2022-06-13 fbc75dff2f cmd/cgo: remove -fsanitize=hwaddress hardware tags + 2022-06-13 5ee939b819 spec: clarify behavior of map size hint for make built-in + 2022-06-13 4703546a29 spec: add missing optional type arguments after TypeName in syntax + 2022-06-13 2c52465cb3 net: avoid darwin_arm64 bug in TestDialParallelSpuriousConnection + 2022-06-13 9228d7d7d5 doc/go1.19: add a release note for module indexing + 2022-06-13 7eeec1f6e4 cmd/compile: fix missing dict pass for type assertions + 2022-06-13 d27128b065 doc/go1.19: fix crypto tags + 2022-06-10 55590f3a2b net/http: doc: update RFC reference for appropriate HTTP codes + 2022-06-10 ff3db8d12d doc: fix typos in Go memory model + 2022-06-10 fb75c2da91 cmd/dist, cmd/internal/metadata: don't install metadata binary + 2022-06-10 386245b68e runtime: fix stack split at bad time when fuzzing + 2022-06-09 2cfbef4380 cmd/cgo: recognize clang 14 DWARF type names + 2022-06-09 c7ccabf3fe runtime/cgo: retry _beginthread on EACCES + 2022-06-09 91019cc13d runtime/cgo: merge bodies of cgo_sys_thread_start on windows + 2022-06-09 840e99ed74 api: promote next to go1.19 + 2022-06-09 1a2ca95ad2 go/types, types2: only set instance context if packages match + 2022-06-08 b51d44c6dd cmd/go/testdata/script: fix skip on list_replace_absolute_windows + 2022-06-08 80f86f706d api/next: minor reformat + 2022-06-08 13f6be2833 runtime: use pidleget for faketime jump + 2022-06-08 1292176bc9 cmd/go: clean paths before using them form index functions + 2022-06-08 1858ea5d85 syscall: remove unused setgroups on linux/loong64 + 2022-06-08 bdde41e3ba runtime: skip TestGdbBacktrace on gdb bug + 2022-06-08 432158b69a net: fix testHookDialTCP race + 2022-06-08 899f0a29c7 cmd/go: enable module index by default + 2022-06-08 f862280e30 cmd/go: properly call PackageModuleRoot to get modroot for index + 2022-06-08 d65166024f cmd/go: set Root and target fields for packages in GOPATH + 2022-06-08 4afb0b9e53 doc/go1.19: delete remaining TODOs + 2022-06-08 3426b7201d runtime: gofmt + 2022-06-08 f330a3a987 doc/go1.19: complete most remaining TODOs + 2022-06-08 2882786bf4 runtime: remove unused pipe and setNonblock on linux/loong64 + 2022-06-08 decdd87bea doc/go1.19: mention riscv64 supported regabi + 2022-06-07 b72a6a7b86 os: document that Chdir affects fs.FS returned by DirFS with a relative path + 2022-06-07 30b929b1ef syscall: remove unused accept on linux/loong64 + 2022-06-07 a7551fe245 net: use synthetic network in TestDialParallel + 2022-06-07 19d71acd97 doc/go1.19: document that the assembler requires -p + 2022-06-07 d151134851 doc/go1.19: document linker CL that switches DWARF compressed section format + 2022-06-07 3507805bcd go/types, types2: better error message for invalid use of constraint type + 2022-06-07 269bf7e855 go/types, types2: better error message if type is not in type set + 2022-06-07 d4fb93be87 go/types, types2: use | rather than ∪ when printing term lists + 2022-06-07 346698eea7 doc/go1.19: add release notes for net/http and net/url + 2022-06-07 7a82c6859f doc/go1.19: adjust runtime release notes + 2022-06-07 f3e051a184 runtime: document GOMEMLIMIT in environment variables section + 2022-06-07 ef2567c7dd doc/go1.19: document loong64 port + 2022-06-07 69bb7c6ef5 sync/atomic: clarify that 8-byte alignment of variables is due to escape + 2022-06-07 81033fbd8e doc/go1.19: some platforms are still on TSAN v2 + 2022-06-07 0c3a0543c2 doc/go1.19: compiler section is complete, modulo TODOs + 2022-06-07 835a946137 doc/go1.19: minor edits + 2022-06-07 429a4041eb doc/go1.19: complete TODOs for go/types + 2022-06-07 d2630aa4b2 doc/go1.19: add various crypto release notes + 2022-06-07 77d9252ddf runtime: fix inline assembly trampoline for arm64 + 2022-06-07 38607c5538 cmd/link: specify -Wl,-z params as documented + 2022-06-07 95b68e1e02 doc/go1.19: delete boringcrypto TODO + 2022-06-07 a79623b019 doc/go1.19: add more TODOs from updated relnote + 2022-06-06 acfff42802 doc/go1.19: add release notes for the soft memory limit and idle GC + 2022-06-06 a71ca3dfbd runtime, sync, sync/atomic: document happens-before guarantees + 2022-06-06 3651a6117e go/doc/comment: add heuristics for common badly formatted comments + 2022-06-06 4c08260c51 doc/go_mem: update revision date + 2022-06-06 7271a0a287 doc/go1.19: gc requires -p=importpath + 2022-06-06 c1e2ecbaf9 doc/go1.19: document Resolver.PreferGo + 2022-06-06 11195c60e6 cmd/go: use index to match packages in dependency modules + 2022-06-06 ea5d7cbc26 all: boringcrypto post-merge cleanup + 2022-06-06 6c7b223c2b go/doc/comment: do not turn ``` into “` + 2022-06-06 ce757e94e0 go/doc/comment: add doc comment + 2022-06-06 95547aee8c cmd/compile: cast riscv64 rewrite shifts to unsigned int + 2022-06-06 d43ddc1f3f strconv: fix typo in atof.go + 2022-06-06 2fa45a4fcd cmd/link/internal/loadpe: handle _main reference properly + 2022-06-06 fc97075949 go/types, types2: simplify implementation of validType (fix TODO) + 2022-06-06 07eca49055 go/types, types2: use type nest to detect type cycles (fix validType) + 2022-06-06 770146d5a8 doc/go1.19: add TODOs for changes to go/types + 2022-06-06 1b8ca75eaa runtime: fix breakpoint in ppc64x + 2022-06-06 9ce28b518d text/template/parse: fix data race on lexer initialization + 2022-06-06 47e34ca533 go/types, types2: ensure that named types never expand infinitely + 2022-06-06 02e69cfa96 go/types, types2: store Named instance information separately + 2022-06-06 1323b0e8f0 go/types, types2: eliminate methodList in favor of just using Named.mu + 2022-06-06 846f971daa go/types, types2: remove Named.once in favor of monotonic state + 2022-06-06 66cbf67345 cmd/buildid: reject rewriting legacy buildids + 2022-06-04 47f806ce81 strconv: clarify ParseFloat accepts Go syntax for float literals + 2022-06-04 2730c6af9f runtime: fix typo in libfuzzer_arm64.s + 2022-06-04 a32a592c8c database/sql/driver: fix typo in driver.go + 2022-06-04 0293c51bc5 regexp: avoid copying each instruction executed + 2022-06-04 865911424d doc: update Go memory model + 2022-06-04 fc66cae490 doc/go1.19: remove TODO about LimitedReader + 2022-06-04 f8a53df314 io: revert: add an Err field to LimitedReader + 2022-06-04 21f05284c7 cmd/go: index standard library packages Change-Id: Ia7595c77a555fd2a0e7bb3b6b2cfbb745bd4947b
2022-06-14[dev.unified] cmd/compile: more Unified IR docs and reviewMatthew Dempsky
This adds more documentation throughout the core Unified IR logic and removes their UNREVIEWED notices. Updates #48194. Change-Id: Iddd30edaee1c6ea8a05a5a7e013480e02be00d29 Reviewed-on: https://go-review.googlesource.com/c/go/+/411917 Auto-Submit: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-06-13cmd/compile: fix missing dict pass for type assertionsCuong Manh Le
For type assertions, if either src or dst type has shape, we must convert them to dynamic type assertions. Fixes #53309 Change-Id: Ia3362fa67c011febcbdb5b26f856d081b5c366de Reviewed-on: https://go-review.googlesource.com/c/go/+/411617 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Keith Randall <khr@golang.org>
2022-06-09[dev.unified] cmd/compile/internal/noder: stop handling type expressions as ↵Matthew Dempsky
expressions There are two places currently where we rely on type expressions as generic expressions: the first argument to "make" and "new", and the selectable operand within a method expression. This CL makes that code responsible for handling the type expressions directly. Longer term, this will be relevant to appropriately handling derived types, because it will provide additional context about how the derived type is to be used. Change-Id: I9d7dcf9d32dada032ff411cd103b9df413c298a5 Reviewed-on: https://go-review.googlesource.com/c/go/+/410101 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-06-09[dev.unified] test: relax issue7921.go diagnostic messageCuong Manh Le
For constants literal, iimport/iexport read/write them as basic literal nodes. So they are printed in diagnostic message as Go syntax. So "foo" will be reported as string("foo"). Unified IR read/write the raw expression as string value, and when printed in diagnostic, the string value is written out exactly as-is, so "foo" will be written as "foo". Thus, this CL relax the test in issue7921.go to match the string value only. Updates #53058 Change-Id: I6fcf4fdcfc4b3be91cb53b081c48bd57186d8f35 Reviewed-on: https://go-review.googlesource.com/c/go/+/410795 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
2022-06-09[dev.unified] cmd/compile: set base.Pos when process assignDef in Unified IRCuong Manh Le
CL 410343 changes Unified IR to visit LHS before RHS/X in assign/for statement. Thus, it needs to set base.Pos before processing assignee expression, so invalid type can be reported with correct position. Updates #53058 Change-Id: Ic9f60cbf35c8bd71cb391e806396572c37811af7 Reviewed-on: https://go-review.googlesource.com/c/go/+/410794 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-06-09[dev.unified] cmd/compile: fix unified IR don't report type size too large errorCuong Manh Le
For error reported during type size calculation, base.Pos needs to be set, otherwise, the compiler will treat them as the same error and only report once. Old typechecker and irgen all set base.Pos before processing types, this CL do the same thing for unified IR. Updates #53058 Change-Id: I686984ffe4aca3e8b14d2103018c8d3c7d71fb02 Reviewed-on: https://go-review.googlesource.com/c/go/+/410345 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2022-06-08[dev.unified] cmd/compile: restore Unified IR linkname pragma diagnosticCuong Manh Le
CL 333109 restore the diagnostic for irgen, now it's safe to restore for Unified IR, too. Updates #53058 Change-Id: I467902c0e9fa451aaa78cf0813231f14d9d7a3a0 Reviewed-on: https://go-review.googlesource.com/c/go/+/410346 Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2022-06-07[dev.unified] cmd/compile: visit LHS before RHS/X in assign/for statementCuong Manh Le
Unified IR used to visit RHS/X before LHS in assign/for statements for satisfying toolstash in quirksmode. After CL 385998, unified IR quirks mode was gone, the constraint to visit RHS/X first is no longer necessary. Change-Id: I1c3825168b67fb094928f5aa21748a3c81b118ce Reviewed-on: https://go-review.googlesource.com/c/go/+/410343 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-06-06[dev.unified] cmd/compile: fix missing method value wrapper in unified IRCuong Manh Le
Unified IR uses to generate wrappers after the global inlining pass, so it needs to apply inlining for the wrappers itself. However, inlining may reveal new method value nodes which have not been seen yet, thus unified IR never generates wrappers for them. To fix it, just visiting the wrapper function body once more time after inlining, and generate wrappers for any new method value nodes. Fixes #52128 Change-Id: I78631c4faa0b00357d4f84704d3525fd38a52cd7 Reviewed-on: https://go-review.googlesource.com/c/go/+/410344 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
2022-06-06[dev.unified] cmd/compile: remove package heightCuong Manh Le
After CL 410654, symbols are now sorted by package path, package height is not necessary anymore. Updates #51734 Change-Id: I976edd2e574dda68eb5c76cf95645b9dce051393 Reviewed-on: https://go-review.googlesource.com/c/go/+/410342 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
2022-06-06[dev.unified] cmd/compile/internal/noder: push exprBlank up into assignment ↵Matthew Dempsky
handling Blanks can only appear on the LHS of an assignment. Instead of handling them as an arbitrary expression, handle them as part of assignee expression lists. Change-Id: Iaeb0a5c471ffa1abd2bbbd9c95f7876533e5a607 Reviewed-on: https://go-review.googlesource.com/c/go/+/410100 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-06-06[dev.unified] cmd/compile/internal/noder: add optExpr for optional expressionsMatthew Dempsky
Previously, {writer,reader}.expr would allow for nil expressions (i.e., no expression at all, not a "nil" identifier). But only a few contexts allow this, and it simplifies some logic if we can assume the expression is non-nil. So this CL introduces optExpr as a wrapper method for handling nil expressions specially. Change-Id: I438bae7a3191126f7790ec0bf5b77320fe855514 Reviewed-on: https://go-review.googlesource.com/c/go/+/410099 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-06-06[dev.unified] cmd/compile/internal/noder: rename exprName to exprGlobalMatthew Dempsky
More descriptive. Change-Id: I70a07adbe1d395da797fe15b54d2a1106f5f36a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/410098 Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com>
2022-05-26cmd/compile: mark closures made for generic function expressions as wrappersKeith Randall
Fixes #52237 Change-Id: I7488020c8d157e069202017a293d18230e3aef0d Reviewed-on: https://go-review.googlesource.com/c/go/+/408876 Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2022-05-25internal/pkgbits: add Index typeMatthew Dempsky
Element indices are very common in the pkgbits API, so introduce a new defined type to help make that clearer. Change-Id: I8f9493e2335601c740eb403d1fdcd11183122907 Reviewed-on: https://go-review.googlesource.com/c/go/+/407435 Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-20internal/pkgbits: better documentationMatthew Dempsky
Change-Id: I3f96a6e8a43faa5c8111b9d979aa37822c1dce06 Reviewed-on: https://go-review.googlesource.com/c/go/+/407434 Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
2022-05-17cmd/compile/internal/noder: remove TODO about position handlingMatthew Dempsky
types2 uses nopos as the position for predeclared objects, so it's expected that we'll see !pos.IsKnown() when translating types2 representations into IR. Change-Id: I8708c2e9815e3dd27da8066c67c73f5586ac4617 Reviewed-on: https://go-review.googlesource.com/c/go/+/406896 Auto-Submit: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-16cmd/compile: set LocalPkg.Path to -p flagMatthew Dempsky
Since CL 391014, cmd/compile now requires the -p flag to be set the build system. This CL changes it to initialize LocalPkg.Path to the provided path, rather than relying on writing out `"".` into object files and expecting cmd/link to substitute them. However, this actually involved a rather long tail of fixes. Many have already been submitted, but a few notable ones that have to land simultaneously with changing LocalPkg: 1. When compiling package runtime, there are really two "runtime" packages: types.LocalPkg (the source package itself) and ir.Pkgs.Runtime (the compiler's internal representation, for synthetic references). Previously, these ended up creating separate link symbols (`"".xxx` and `runtime.xxx`, respectively), but now they both end up as `runtime.xxx`, which causes lsym collisions (notably inittask and funcsyms). 2. test/codegen tests need to be updated to expect symbols to be named `command-line-arguments.xxx` rather than `"".foo`. 3. The issue20014 test case is sensitive to the sort order of field tracking symbols. In particular, the local package now sorts to its natural place in the list, rather than to the front. Thanks to David Chase for helping track down all of the fixes needed for this CL. Updates #51734. Change-Id: Iba3041cf7ad967d18c6e17922fa06ba11798b565 Reviewed-on: https://go-review.googlesource.com/c/go/+/393715 Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-05-16cmd/compile/internal/ir: more idiomatic DynamicType{,AssertExpr}Matthew Dempsky
Rename DynamicType's "X" field to "RType". Split DynamicTypeAssertExpr's "T" field into "RType" and "ITab", the same as DynamicType, updating all uses accordingly. Change-Id: I8cec8171349c93234a10ac50708f800dee6fb1d2 Reviewed-on: https://go-review.googlesource.com/c/go/+/405334 Auto-Submit: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com>
2022-05-13cmd/compile: tidy up noder's unified IR docsDaniel Martí
Hopefully made the wording clearer as I was reading it. Change-Id: I241ce3f2ac7ae77de00dbc969540c09ef0b77496 Reviewed-on: https://go-review.googlesource.com/c/go/+/395394 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: David Chase <drchase@google.com>
2022-05-13cmd/compile/internal/types: change NewTypeParam to match New{Basic,Named}Matthew Dempsky
NewBasic and NewNamed take an Object (i.e., *ir.Name), so that callers don't need to call SetNod. This CL changes NewTypeParam to follow the same convention. Following up on recent Ntype removal, this allows getting rid of Type.SetNod entirely. While here, Type.SetSym is unused too. Change-Id: Ibe0f5747e2ab4a9512b65142b6d3006704b60bd3 Reviewed-on: https://go-review.googlesource.com/c/go/+/405654 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-13cmd/compile/internal/noder: remove unified IR assumptions on LocalPkg.Path == ""Matthew Dempsky
Replace `pkg.Path == ""` check with `pkg == types.LocalPkg`. This is a prep refactoring for CL 393715, which will properly initialize types.LocalPkg. Updates #51734. Change-Id: I7a5428ef1f422de396762b6bc6d323992834b27c Reviewed-on: https://go-review.googlesource.com/c/go/+/406056 Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-11cmd/compile: fix bad order of evaluation for multi-value f()(g()) callsCuong Manh Le
The compiler use to compile f()(g()) as: t1, t2 := g() f()(t1, t2) That violates the Go spec, since when "..., all function calls, ... are evaluated in lexical left-to-right order" This PR fixes the bug by compiling f()(g()) as: t0 := f() t1, t2 := g() t0(t1, t2) to make "f()" to be evaluated before "g()". Fixes #50672 Change-Id: I6a766f3dfc7347d10f8fa3a151f6a5ea79bcf818 Reviewed-on: https://go-review.googlesource.com/c/go/+/392834 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-05-08cmd/compile: don't crash in size computation for invalid typeRobert Griesemer
An invalid program may produce invalid types. If the program calls unsafe.Sizeof on such a type, which is a compile-time computation, the size-computation must be able to handle it. Add the invalid type to the list of permissible basic types and give it a size of 1 (word). Fixes #52748. Change-Id: I6c409628f9b77044758caf71cdcb199f9e77adea Reviewed-on: https://go-review.googlesource.com/c/go/+/404894 Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
2022-05-05cmd/compile: change ir.InstExpr.Targs from Node to NtypeMatthew Dempsky
Type arguments are always type expressions, which are semantically represented by Ntype. In fact, the slice should probably just be []*types.Type instead, and that would remove a lot of ir.TypeNode wrapping/unwrapping. But this lead to issues within the stenciling code, and I can't immediately make sense why. Change-Id: Ib944db30e4d21284bc2d8d954b68ecb70b4205a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/403843 Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com>
2022-05-05cmd/compile: remove ir.TypeAssertExpr.NtypeMatthew Dempsky
As with ir.CompLitExpr.Ntype, there's no need for ir.TypeAssertExpr.Ntype in a pure-types2 world. Change-Id: Iff48c98330f072fd6b26099e13a19c56adecdc42 Reviewed-on: https://go-review.googlesource.com/c/go/+/403842 Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-05-05cmd/compile: change ir.NewCompLitExpr from Ntype to *types.TypeMatthew Dempsky
All callers were already using TypeNode to get an Ntype anyway, so just push the TypeNode constructor down into NewCompLitExpr. Prep refactoring for next CL to remove the Ntype field. Change-Id: I671935afca707aaab11d1c46e39902bd37a485ba Reviewed-on: https://go-review.googlesource.com/c/go/+/403840 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
2022-05-05cmd/compile: remove ir.Name.NtypeMatthew Dempsky
No longer needed now that IR construction uses types2. Change-Id: If8b7aff80cd8472be7d87fd3a36da911a5df163c Reviewed-on: https://go-review.googlesource.com/c/go/+/403839 Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-04cmd/compile: enable Asan check for global variablesfanzha02
With this patch, -asan option can detect the error memory access to global variables. So this patch makes a few changes: 1. Add the asanregisterglobals runtime support function, which calls asan runtime function _asan_register_globals to register global variables. 2. Create a new initialization function for the package being compiled. This function initializes an array of instrumented global variables and pass it to function runtime.asanregisterglobals. An instrumented global variable has trailing redzone. 3. Writes the new size of instrumented global variables that have trailing redzones into object file. 4. Notice that the current implementation is only compatible with the ASan library from version v7 to v9. Therefore, using the -asan option requires that the gcc version is not less than 7 and the clang version is less than 4, otherwise a segmentation fault will occur. So this patch adds a check on whether the compiler being used is a supported version in cmd/go. (This is a redo of CL 401775 with a fix for a build break due to an intervening commit that removed the internal/execabs package.) Updates #44853. Change-Id: I719d4ef2b22cb2d5516e1494cd453c3efb47d6c7 Reviewed-on: https://go-review.googlesource.com/c/go/+/403851 Auto-Submit: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-05-04Revert "cmd/compile: enable Asan check for global variables"Bryan Mills
This reverts CL 401775. Reason for revert: broke build. Change-Id: I4f6f2edff1e4afcf31cd90e26dacf303979eb10c Reviewed-on: https://go-review.googlesource.com/c/go/+/403981 Reviewed-by: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2022-05-04cmd/compile: enable Asan check for global variablesfanzha02
With this patch, -asan option can detect the error memory access to global variables. So this patch makes a few changes: 1. Add the asanregisterglobals runtime support function, which calls asan runtime function _asan_register_globals to register global variables. 2. Create a new initialization function for the package being compiled. This function initializes an array of instrumented global variables and pass it to function runtime.asanregisterglobals. An instrumented global variable has trailing redzone. 3. Writes the new size of instrumented global variables that have trailing redzones into object file. 4. Notice that the current implementation is only compatible with the ASan library from version v7 to v9. Therefore, using the -asan option requires that the gcc version is not less than 7 and the clang version is less than 4, otherwise a segmentation fault will occur. So this patch adds a check on whether the compiler being used is a supported version in cmd/go. Updates #44853. Change-Id: Ib877a817209ab2be68a8e22c418fe4a4a20880fc Reviewed-on: https://go-review.googlesource.com/c/go/+/401775 Reviewed-by: Ian Lance Taylor <iant@google.com> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-05-03cmd/compile: use dictionary to convert type to shaped interface typeWayne Zuo
When we convert a type to a shaped interface type, we are not able to recognize the itab. So passing the itab by dictionary as the workaround. Fixes #52026. Change-Id: I75c23c7dd215daf9761dc24116a8af2c28c6d948 Reviewed-on: https://go-review.googlesource.com/c/go/+/401034 Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Keith Randall <khr@golang.org>
2022-05-02cmd/compile: simplify code from CL 398474Matthew Dempsky
This CL: 1. extracts typecheck.LookupNum into a method on *types.Pkg, so that it can be used with any package, not just types.LocalPkg, 2. adds a new helper function closureSym to generate symbols in the appropriate package as needed within stencil.go, and 3. updates the existing typecheck.LookupNum+Name.SetSym code to call closureSym instead. No functional change (so no need to backport to Go 1.18), but a little cleaner, and avoids polluting types.LocalPkg.Syms with symbols that we won't end up using. Updates #52117. Change-Id: Ifc8a3b76a37c830125e9d494530d1f5b2e3e3e2a Reviewed-on: https://go-review.googlesource.com/c/go/+/403197 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com>
2022-04-29cmd/compile: consistent unified IR handling of package unsafeMatthew Dempsky
Within the unified IR export format, I was treating package unsafe as a normal package, but expecting importers to correctly handle deduplicating it against their respective representation of package unsafe. However, the surrounding importer logic differs slightly between cmd/compile/internal/noder (which unified IR was originally implemented against) and go/importer (which it was more recently ported to). In particular, noder initializes its packages map as `map[string]*types2.Package{"unsafe": types2.Unsafe}`, whereas go/importer initializes it as just `make(map[string]*types.Package)`. This CL makes them all consistent. In particular, it: 1. changes noder to initialize packages to an empty map to prevent further latent issues from the discrepency, 2. adds the same special handling of package unsafe already present in go/internal/gcimporter's unified IR reader to both of cmd/compile's implementations, and 3. changes the unified IR writer to treat package unsafe as a builtin package, to force that readers similarly handle it correctly. Fixes #52623. Change-Id: Ibbab9b0a1d2a52d4cc91b56c5df49deedf81295a Reviewed-on: https://go-review.googlesource.com/c/go/+/403196 Auto-Submit: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Russ Cox <rsc@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-28cmd/compile: set correct package for vars/params/results from nested ↵Cuong Manh Le
instantiation Fixes #52117 Change-Id: Ib5b2cdbdbce1d516aa10a0df349449b756f2f404 Reviewed-on: https://go-review.googlesource.com/c/go/+/398474 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2022-04-22Revert "cmd/compile: enable Asan check for global variables"Bryan Mills
This reverts CL 321715. Reason for revert: broke cmd/go.TestScript/install_msan_and_race_require_cgo on several builders. Change-Id: Ia0392de555d6e973960769a0e4709f0193d16706 Reviewed-on: https://go-review.googlesource.com/c/go/+/401755 Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2022-04-22cmd/compile: enable Asan check for global variablesfanzha02
With this patch, -asan option can detect the error memory access to global variables. So this patch makes a few changes: 1. Add the asanregisterglobals runtime support function, which calls asan runtime function _asan_register_globals to register global variables. 2. Create a new initialization function for the package being compiled. This function initializes an array of instrumented global variables and pass it to function runtime.asanregisterglobals. An instrumented global variable has trailing redzone. 3. Writes the new size of instrumented global variables that have trailing redzones into object file. 4. Notice that the current implementation is only compatible with the ASan library from version v7 to v9. Therefore, using the -asan option requires that the gcc version is not less than 7 and the clang version is less than 4, otherwise a segmentation fault will occur. So this patch adds a check on whether the compiler being used is a supported version in cmd/go. Change-Id: I664e74dcabf5dc7ed46802859174606454e8f1d3 Reviewed-on: https://go-review.googlesource.com/c/go/+/321715 Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Fannie Zhang <Fannie.Zhang@arm.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-21cmd/compile: add //go:uintptrkeepaliveMichael Pratt
This CL exports the existing ir.UintptrKeepAlive via the new directive //go:uintptrkeepalive. This makes the compiler insert KeepAlives for pointers converted to uintptr in calls, keeping them alive for the duration of the call. //go:uintptrkeepalive requires //go:nosplit, as stack growth can't handle these arguments (it cannot know which are pointers). We currently check this on the immediate function, but the actual restriction applies to all transitive calls. The existing //go:uintptrescapes is an extension of //go:uintptrkeepalive which forces pointers to escape to the heap, thus eliminating the stack growth issue. This pragma is limited to the standard library. For #51087 Change-Id: If9a19d484d3561b4219e5539b70c11a3cc09391e Reviewed-on: https://go-review.googlesource.com/c/go/+/388095 Run-TryBot: Michael Pratt <mpratt@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2022-04-18cmd/compile: fix missing source information in ssa viewhopehook
Endlineno is lost when we call "genericSubst" to create the new instantiation of the generic function. This will cause "readFuncLines" to fail to read the target function. To fix this issue, as @mdempsky pointed out, add the line in cmd/compile/internal/noder/stencil.go: newf.Endlineno = gf.Endlineno Fixes #51988 Change-Id: Ib408e4ed0ceb68df8dedda4fb551309e8385aada Reviewed-on: https://go-review.googlesource.com/c/go/+/399057 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Auto-Submit: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
2022-04-12cmd/compile: add a test case and some comments for deadlock on syntax errorhopehook
After CL 398014 fixed a compiler deadlock on syntax errors, this CL adds a test case and more details for that. How it was fixed: CL 57751 introduced a channel "sem" to limit the number of simultaneously open files. Unfortunately, when the number of syntax processing goroutines exceeds this limit, will easily trigger deadlock. In the original implementation, "sem" only limited the number of open files, not the number of concurrent goroutines, which will cause extra goroutines to block on "sem". When the p.err of the following iteration happens to be held by the blocking goroutine, it will fall into a circular wait, which is a deadlock. CL 398014 fixed the above deadlock, also see issue #52127. First, move "sem <- struct{}{}" to the outside of the syntax processing goroutine, so that the number of concurrent goroutines does not exceed the number of open files, to ensure that all goroutines in execution can eventually write to p.err. Second, move the entire syntax processing logic into a separate goroutine to avoid blocking on the producer side. Change-Id: I1bb89bfee3d2703784f0c0d4ded82baab2ae867a Reviewed-on: https://go-review.googlesource.com/c/go/+/399054 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Auto-Submit: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
2022-04-11all: gofmt main repoRuss Cox
[This CL is part of a sequence implementing the proposal #51082. The design doc is at https://go.dev/s/godocfmt-design.] Run the updated gofmt, which reformats doc comments, on the main repository. Vendored files are excluded. For #51082. Change-Id: I7332f099b60f716295fb34719c98c04eb1a85407 Reviewed-on: https://go-review.googlesource.com/c/go/+/384268 Reviewed-by: Jonathan Amsterdam <jba@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2022-04-07cmd/compile: fix deadlock on syntax errorhopehook
Fixes #52127 Change-Id: I6523c83350cb9263d23e3e8b472fe63a5cc99c2e Reviewed-on: https://go-review.googlesource.com/c/go/+/398014 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Auto-Submit: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Trust: Cherry Mui <cherryyz@google.com>
2022-04-07cmd/compile: adjust types2 shift check to match go/types (cleanup)Robert Griesemer
With this change, the shift checking code matches the corresponding go/types code, but for the differences in the internal error reporting, and call of check.overflow. The change leads to the recording of an untyped int value if the RHS of a non-constant shift is an untyped integer value. Adjust the type in the compiler's irgen accordingly. Add test/shift3.go to verify behavior. Change-Id: I20386fcb1d5c48becffdc2203081fb70c08b282d Reviewed-on: https://go-review.googlesource.com/c/go/+/398236 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> Trust: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>