aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/gofrontend
AgeCommit message (Collapse)AuthorFilesLines
2020-01-27compiler: cleanups permitted by GCC requirement of MPFR 3.1.0Ian Lance Taylor4-58/+58
For MPFR functions, change from GMP_RND* to MPFR_RND*. Also change mp_exp_t to mpfr_expt_t. Fixes PR go/92463 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/216417
2020-01-24libgo: handle --with-toolexeclibdir=.Ian Lance Taylor1-1/+1
Patch by Maciej W. Rozycki. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/216239
2020-01-23internal/cpu: don't define CacheLinePadSize for riscv64Ian Lance Taylor1-1/+1
In libgo CacheLinePadSize is defined by the generated file cpugen.go. Keep cpu_riscv64.go around, even though it is now empty, so that we will pick up changes to it in future merges. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/216077
2020-01-22gotest: explicitly skip type descriptorsIan Lance Taylor1-1/+1
Type descriptors are normally weak and nm will report them as V, so we will skip them when collecting the list of symbols. But when not using GNU nm, they may be reported as D, so also skip them in symstogo. This fixes go/doc/check on Solaris. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/215900
2020-01-22runtime: for Solaris, add osinit, and drop duplicate getncpuIan Lance Taylor1-1/+1
Fixes a build breakage introduced in the 1.14beta1 upgrade. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/215857
2020-01-22internal/syscall/unix: use getrandom_linux_generic.go on arm64beAndrew Pinski1-1/+1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/215342
2020-01-22runtime: call runtime_nanotime1, not runtime_nanotimeIan Lance Taylor1-1/+1
The function name was changed in 1.14beta1. Fix the non-x86, non-s390 code. Fixes golang/go#36694 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/215724
2020-01-21libgo: update to Go1.14beta1Ian Lance Taylor1-1/+1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214297
2020-01-10gotest: don't use localIan Lance Taylor1-1/+1
It's not part of the POSIX shell standard. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214300 From-SVN: r280118
2020-01-10compiler: permit duplicate methods from embedded interfacesIan Lance Taylor2-10/+18
This is a language change for Go 1.14. Updates golang/go#6977 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214240 From-SVN: r280109
2020-01-09libgo: compile examples in _test packagesIan Lance Taylor1-1/+1
Previously if the only names defined by _test packages were examples, the gotest script would emit an incorrect _testmain.go file. I worked around that by marking the example_test.go files +build ignored. This CL changes the gotest script to handle this case correctly, and removes the now-unnecessary build tags. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214039 From-SVN: r280085
2020-01-09compiler: don't localize names in export dataIan Lance Taylor2-2/+2
Localizing names in export data causes the compiler output to change depending on the LANG environment variable, so don't do it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214038 From-SVN: r280057
2020-01-09compiler: don't add composite literal keys to package bindingsIan Lance Taylor5-33/+101
Adding composite literal keys to package bindings gets confusing when it is combined with dot imports. The test case showing the resulting compilation failure is https://golang.org/cl/213899. Fix this by adding a new expression type to hold composite literal keys. We shouldn't see it during lowering if it is a struct field name, because Composite_literal_expression::do_traverse skips struct field names. Or, it should, but that didn't quite work with pointer types so it had to be tweaked. This lets us remove the code that recorded whether an Unknown_expression is a composite literal key. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/214017 From-SVN: r280056
2020-01-08compiler: fix loopdepth tracking in array slicing expression in escape analysisIan Lance Taylor2-2/+3
In the gc compiler, for slicing an array, its AST has an implicit address operation node. There isn't such node in the gofrontend AST. During the escape analysis, we create a fake node to mimic the gc compiler's behavior. For the fake node, the loopdepth was not tracked correctly, causing miscompilation. Since this is an address operation, do the same thing as we do for the address operator. Fixes golang/go#36404. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/213643 From-SVN: r279984
2020-01-07compiler, runtime: stop using __go_runtime_errorIan Lance Taylor6-100/+42
Use specific panic functions instead, which are mostly already in the runtime package. Also correct "defer nil" to panic when we execute the defer, rather than throw when we queue it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/213642 From-SVN: r279979
2020-01-07compiler: avoid write barrier for a[i] = a[i][:v]Ian Lance Taylor2-1/+19
This avoids generating a write barrier for code that appears in the Go1.14beta1 runtime package in (*pageAlloc).sysGrow: s.summary[l] = s.summary[l][:needIdxLimit] Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/213558 From-SVN: r279962
2020-01-07compiler: avoid a couple of compiler crashesIan Lance Taylor2-1/+10
These came up while building 1.14beta1 while the code was still invalid. The policy is to not bother committing invalid test cases that cause compiler crashes. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/213537 From-SVN: r279956
2020-01-02compiler, runtime, reflect: generate hash functions only for map keysIan Lance Taylor6-161/+106
Right now we generate hash functions for all types, just in case they are used as map keys. That's a lot of wasted effort and binary size for types which will never be used as a map key. Instead, generate hash functions only for types that we know are map keys. Just doing that is a bit too simple, since maps with an interface type as a key might have to hash any concrete key type that implements that interface. So for that case, implement hashing of such types at runtime (instead of with generated code). It will be slower, but only for maps with interface types as keys, and maybe only a bit slower as the aeshash time probably dominates the dispatch time. Reorg where we keep the equals and hash functions. Move the hash function from the key type to the map type, saving a field in every non-map type. That leaves only one function in the alg structure, so get rid of that and just keep the equal function in the type descriptor itself. While we're here, reorganize the rtype struct to more closely match the gc version. This is the gofrontend version of https://golang.org/cl/191198. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/212843 From-SVN: r279848
2020-01-02compiler: split writing of equal and hash functions for typesIan Lance Taylor7-361/+545
Separate the generation of type equality and hash functions, rather than doing them in a single operation. This is almost entirely a pure refactoring in preparation for generating hash functions only for types that are map keys. The only change in generated code is that for types that are the size of numeric types, but not aligned like numeric types, such as [8]byte, now use standard hash functions. They previously used special-purpose hash functions because they required special-purpose equal functions. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/212842 From-SVN: r279847
2019-12-24re PR go/93020 (Final patches to build gcc-10 on GNU/Hurd)Ian Lance Taylor1-1/+1
PR go/93020 libgo: Hurd portability patches By Svante Signell. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/212409 From-SVN: r279724
2019-12-11compiler: generate type descriptor for pointer to alias defined in another ↵Ian Lance Taylor2-4/+4
package When a type descriptor is needed (for e.g. interface conversion), if the type is a pointer to a named type defined in another package, we don't generate the definition of the type descriptor because it is generated in the package where the type is defined. However, if the named type is an alias to an unnamed type, its descriptor is not generated in the other package, and we need to generate it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210787 From-SVN: r279207
2019-12-09re PR go/92861 (Passes relative time to sem_timedwait on GNU/Hurd)Ian Lance Taylor1-1/+1
PR go/92861 runtime: don't define CLOCK_REALTIME in os_hurd.go It's already defined in sysinfo.go. Patch by Samuel Thibault. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210538 From-SVN: r279136
2019-12-09re PR go/92861 (Passes relative time to sem_timedwait on GNU/Hurd)Ian Lance Taylor1-1/+1
PR go/92861 runtime: use absolute time for sem_timedwait Patch by Samuel Thibault. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210457 From-SVN: r279106
2019-12-06re PR go/92820 (libgo.so.15 has executable stack)Ian Lance Taylor1-1/+1
PR go/92820 runtime: only build go-context for x86 GNU/Linux Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210258 From-SVN: r279063
2019-12-06re PR other/29842 ([meta-bug] outstanding patches / issues from ↵Ian Lance Taylor1-1/+1
STMicroelectronics) PR go/29842 runtime: update HURD support for mOS now being embedded Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210285 From-SVN: r279062
2019-12-06re PR go/92810 (Compiling GCC go for aarch64_be-marvell-linux-gnu fails)Ian Lance Taylor1-1/+1
PR go/92810 libgo: recognize aarch64_be as arm64be Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210038 From-SVN: r279032
2019-12-05re PR go/92820 (libgo.so.15 has executable stack)Ian Lance Taylor1-1/+1
PR go/92820 runtime: always mark assembly file as non-executable stack Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/210037 From-SVN: r279010
2019-11-21re PR go/92605 (r278509 causes/reveals issue in building go library)Ian Lance Taylor1-1/+1
PR go/92605 runtime: declare runtime_usestackmaps in stack.c, not runtime.h Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/208161 From-SVN: r278540
2019-11-21mksysinfo: use type aliases for time struct field typesIan Lance Taylor1-1/+1
Also fix a case where grep wasn't redirecting to /dev/null. Fixes golang/go#35713 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/208160 From-SVN: r278539
2019-11-19libgo: better cmd/cgo handling for '.' in pkgpathIan Lance Taylor1-1/+1
Updates cgo's gccgoPkgpathToSymbolNew() to bring it into conformance with the way that gccgo now handles package paths with embedded dots (see CL 200838). See also https://gcc.gnu.org/PR61880, a related bug. This CL is a copy of CL 207957 in the main Go repo. Updates golang/go#35623. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207977 From-SVN: r278470
2019-11-15testmain.exp: link against GOLIBSIan Lance Taylor1-1/+1
Patch by Maciej W. Rozycki. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207458 From-SVN: r278316
2019-11-15compiler: fix buglet in function inlining related to sink namesIan Lance Taylor2-2/+4
When the compiler writes an inlinable function to the export data, parameter names are written out (in Export::write_name) using the Gogo::message_name as opposed to a raw/encoded name. This means that sink parameters (those named "_") get created with the name "_" instead of "._" (the name created by the lexer/parser). This confuses Gogo::is_sink_name, which looks for the latter sequence and not just "_". This can cause issues later on if an inlinable function is imported and fed through the rest of the compiler (things that are sinks are no recognized as such). To fix these issues, change Gogo::is_sink_name to return true for either variants ("_" or "._"). Fixes golang/go#35586. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/207259 From-SVN: r278275
2019-10-14compiler: revise exportdata fix for processing constant typesIan Lance Taylor2-2/+2
This patch is an addendum to the fix for issue 34577, which was not sufficiently general. During export data processing, when looking at the types of constants mentioned in inlinable function bodies, include both locally defined constants and constant imported from other packages. Testcase for this bug is in CL 201017. Fixes golang/go#34852. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/201018 From-SVN: r276976
2019-10-14runtime: correct facilities names in s390 CPU supportIan Lance Taylor1-1/+1
Patch from Andreas Krebbel. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/201038 From-SVN: r276964
2019-10-14internal/cpu: define kdsaQuery for s390Ian Lance Taylor1-1/+1
Patch from Andreas Krebbel. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/201037 From-SVN: r276962
2019-10-12compiler: mangle dots in pkgpathIan Lance Taylor4-3/+25
We need to mangle dots to avoid problems with -fgo-pkgpath=a.0. That will confuse the name mangling, which assumes that names entering the mangling cannot contain arbitrary dot characters. We don't need to mangle other characters; go_encode_id will handle them. Fixes golang/go#33871 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/200838 From-SVN: r276913
2019-10-04compiler: include selected constant types during export processingIan Lance Taylor4-1/+31
The machinery that collects types referenced by expressions that are part of inlinable function bodies was missing the types of local named constants in certain cases. This patch updates the Collect_export_references::expression() hook to look for references to local named constants and include their types in the exported set. Fixes golang/go#34577. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/198017 From-SVN: r276594
2019-10-04compiler: adjust code to avoid shadowing local variablesIan Lance Taylor8-91/+85
Also add a couple of missing calls to free after mpz_get_str. This should make the code clean with respect to -Wshadow=local. Based on patch by Bernd Edlinger. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/198837 From-SVN: r276579
2019-10-02runtime: mark go-context.S as no-executable-stack and split-stack supportedIan Lance Taylor1-1/+1
The .note.GNU-stack section tells the linker that this object does not require an executable stack. The .note.GNU-split-stack section tells the linker that functions in this object can be called directly by split-stack functions, without require a large stack. The .note.GNU-no-split-stack section tells the linker that functions in this object do not have a split-stack prologue. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/198440 From-SVN: r276488
2019-09-30compiler: change escape maps to hash tablesIan Lance Taylor3-31/+31
Also use just one table lookup, not two. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/197759 From-SVN: r276382
2019-09-28compiler: resolve importing ambiguity for more complex function callsIan Lance Taylor2-1/+6
Tweak the exporter for inlinable function bodies to work around a problem with importing of function calls whose function expressions are not simple function names. In the bug in question, the function body exporter was writing out a function call of the form (*(*FuncTyp)(var))(arg) which produced an export data representation of *$convert(<type 5>, var)(x) which is hard to parse unambiguously. Fix: change the export data emitter to introduce parens around the function expression for more complex calls. Testcase for this bug is in CL 197217. Fixes golang/go#34503. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/197122 From-SVN: r276228
2019-09-27compiler: don't read known type, simplify Import::finalize_methodsIan Lance Taylor3-23/+23
With the current export format, if we already know the type, we don't have to read and parse the definition. We only use the finalizer in Import::finalize_methods, so make it a local variable. To match Finalize_methods::type, only put struct types into real_for_named. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/197700 From-SVN: r276188
2019-09-27compiler: only check whether struct or array types are bigIan Lance Taylor2-6/+18
Fetching the size of a type typically involves a hash table lookup, and is generally non-trivial. The escape analysis code calls is_big more than one might expect. So only fetch the size if we need it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/197699 From-SVN: r276187
2019-09-27compiler: fix brace formattingIan Lance Taylor2-7/+8
Just happened to notice this one. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/197698 From-SVN: r276186
2019-09-19libgo: support gollvm build on arm64 linuxIan Lance Taylor1-1/+1
This CL serves as part of an initial change for enabling gollvm building on arm64 linux, the rest of the change will be covered by another one to the gollvm repo. Incorporate type definition of 'uint128' to 'runtime' and 'syscall' packges, the change is not specific to arm64 linux but made available for all platforms. Verified by building and unit-testing gollvm on linux x86-64 and arm64. Verified by building and checking gccgo on linux x86-64 and arm64. Fixes golang/go#33711 Change-Id: I4720c7d810cfd4ef720962fb4104c5641b2459c0 From-SVN: r275919
2019-09-17runtime: for FFI, treat directIface types as pointersIan Lance Taylor1-1/+1
This only matters on systems that pass a struct with a single pointer field differently than passing a single pointer. I noticed it on 32-bit PPC, where the reflect package TestDirectIfaceMethod failed. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/195878 From-SVN: r275814
2019-09-17re PR go/91781 (r275691 breaks go test "reflect")Ian Lance Taylor1-1/+1
PR go/91781 reflect: promote integer closure return to full word The libffi library expects an integer return type to be promoted to a full word. Implement that when returning from a closure written in Go. This only matters on big-endian systems when returning an integer smaller than the pointer size, which is why we didn't notice it until now. Fixes https://gcc.gnu.org/PR91781. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/195858 From-SVN: r275813
2019-09-17reflect: unexport FFICallbackGo; use go:linkname insteadIan Lance Taylor1-1/+1
The function was always intended to be internal-only, but was exported so that C code could call it. Now that have go:linkname for that, use it. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/195857 From-SVN: r275809
2019-09-16compiler: fix quoting of //go:linkname in error messageIan Lance Taylor2-2/+2
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/195718 From-SVN: r275758
2019-09-13libgo: don't use \? in grep patternIan Lance Taylor1-1/+1
It's not supported by Solaris grep. Just use * instead; it matches more but it shouldn't matter. Fixes https://gcc.gnu.org/PR91764 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/195238 From-SVN: r275700