16860 Commits

Author SHA1 Message Date
Andrew Kelley
e80a203768 wasm linker fixes
* function resolution now links to zcu_funcs, not navs_exe/navs_obj
* updateFunc now adds things to output functions
* updateNav now handles function aliases correctly
* only report start symbol missing when it is unresolved
2025-01-15 15:11:35 -08:00
Andrew Kelley
4ecc4addc4 wasm codegen: remove dependency on PerThread where possible 2025-01-15 15:11:35 -08:00
Andrew Kelley
098e0b1906 wasm codegen: fix lowering of 32/64 float rt calls 2025-01-15 15:11:35 -08:00
Andrew Kelley
55773aee3f remove bad deinit 2025-01-15 15:11:35 -08:00
Andrew Kelley
4a4fb16c27 add dev env for wasm
with this I get 5s compilations
2025-01-15 15:11:35 -08:00
Andrew Kelley
edd592d371 fix compilation when enabling llvm 2025-01-15 15:11:35 -08:00
Andrew Kelley
968941b535 wasm linker: finish the flush function
This branch is passing type checking now.
2025-01-15 15:11:35 -08:00
Andrew Kelley
264a63b000 wasm linker: flush export section 2025-01-15 15:11:35 -08:00
Andrew Kelley
bf88059591 wasm linker: flush implemented up to the export section 2025-01-15 15:11:35 -08:00
Andrew Kelley
e21a42723b wasm linker: implement name, module name, and type for function imports 2025-01-15 15:11:35 -08:00
Andrew Kelley
c96e23632f frontend: add const to more Zcu pointers 2025-01-15 15:11:35 -08:00
Andrew Kelley
26c38b2d42 wasm linker: support export section as implicit symbols 2025-01-15 15:11:35 -08:00
Andrew Kelley
031c84c8cb wasm: fix many compilation errors
Still, the branch is not yet passing semantic analysis.
2025-01-15 15:11:35 -08:00
Andrew Kelley
b3ecdb21ee switch to ArrayListUnmanaged for machine code 2025-01-15 15:11:35 -08:00
Andrew Kelley
bf20a4aa9e wasm: use call_intrinsic MIR instruction 2025-01-15 15:11:35 -08:00
Andrew Kelley
c443a7a57f wasm: move error_name lowering to Emit phase 2025-01-15 15:11:35 -08:00
Andrew Kelley
d45e5ac5eb wasm codegen: rename func: CodeGen to cg: CodeGen 2025-01-15 15:11:35 -08:00
Andrew Kelley
4a1447d1db wasm codegen: switch on bool instead of int 2025-01-15 15:11:35 -08:00
Andrew Kelley
e24f635c75 wasm: implement errors_len as a MIR opcode with no linker involvement 2025-01-15 15:11:35 -08:00
Andrew Kelley
bffa148600 wasm codegen: fix some compilation errors 2025-01-15 15:11:35 -08:00
Andrew Kelley
e521879e47 rewrite wasm/Emit.zig
mainly, rework how relocations works. This is the point at which symbol
indexes are known - not before. And don't emit unnecessary relocations!
They're only needed when emitting an object file.

Changes wasm linker to keep MIR around long-lived so that fixups can be
reapplied after linker garbage collection.

use labeled switch while we're at it
2025-01-15 15:11:35 -08:00
Andrew Kelley
943dac3e85 compiler: add type safety for export indices 2025-01-15 15:11:35 -08:00
Andrew Kelley
9bf715de74 rework error handling in the backends 2025-01-15 15:11:35 -08:00
Andrew Kelley
77accf597d elf linker: conform to explicit error sets 2025-01-15 15:11:35 -08:00
Andrew Kelley
da25ed95fc macho linker conforms to explicit error sets, again 2025-01-15 15:11:35 -08:00
Andrew Kelley
6235cc3da4 remove "FIXME" from codebase
See #363. Please file issues rather than making TODO comments.
2025-01-15 15:11:35 -08:00
Andrew Kelley
16180f525a macho linker: conform to explicit error sets
Makes linker functions have small error sets, required to report
diagnostics properly rather than having a massive error set that has a
lot of codes.

Other linker implementations are not ported yet.

Also the branch is not passing semantic analysis yet.
2025-01-15 15:11:35 -08:00
Andrew Kelley
795e7c64d5 wasm linker: aggressive DODification
The goals of this branch are to:
* compile faster when using the wasm linker and backend
* enable saving compiler state by directly copying in-memory linker
  state to disk.
* more efficient compiler memory utilization
* introduce integer type safety to wasm linker code
* generate better WebAssembly code
* fully participate in incremental compilation
* do as much work as possible outside of flush(), while continuing to do
  linker garbage collection.
* avoid unnecessary heap allocations
* avoid unnecessary indirect function calls

In order to accomplish this goals, this removes the ZigObject
abstraction, as well as Symbol and Atom. These abstractions resulted
in overly generic code, doing unnecessary work, and needless
complications that simply go away by creating a better in-memory data
model and emitting more things lazily.

For example, this makes wasm codegen emit MIR which is then lowered to
wasm code during linking, with optimal function indexes etc, or
relocations are emitted if outputting an object. Previously, this would
always emit relocations, which are fully unnecessary when emitting an
executable, and required all function calls to use the maximum size LEB
encoding.

This branch introduces the concept of the "prelink" phase which occurs
after all object files have been parsed, but before any Zcu updates are
sent to the linker. This allows the linker to fully parse all objects
into a compact memory model, which is guaranteed to be complete when Zcu
code is generated.

This commit is not a complete implementation of all these goals; it is
not even passing semantic analysis.
2025-01-15 15:11:35 -08:00
mlugg
77273103a8 print_value: fix crash on undefined slice ptr
Resolves: #22418
2025-01-15 21:13:51 +00:00
mlugg
4b910e525d Sema: more validation for builtin decl types
Also improve the source locations when this validation fails.

Resolves: #22465
2025-01-14 22:44:18 +00:00
mlugg
5322459a0b Sema: fix UB in error reporting
And add test coverage for the compile error in question.
2025-01-14 21:17:46 +00:00
mlugg
27274d4fde Type: struct {} does not have a well-defined layout
`Type.hasWellDefinedLayout` was in disagreement with pointer loading
logic about auto-layout structs with zero fields, `struct {}`. For
consistency, these types should not have a well-defined layout.

This is technically a breaking change.
2025-01-14 20:27:49 +00:00
wooster0
affe45b31f Coff msdos-stub: replace with documented byte array
This replaces the msdos-stub binary with a fully documented
byte array with inline comments to make it easy to understand what
every byte actually means.
2025-01-14 16:34:59 +00:00
Alex Rønne Petersen
8019694e17 mingw: Add upstream RtlSecureZeroMemory implementation.
Closes #22475.
2025-01-14 05:31:14 +01:00
xdBronch
fb43e91b22
Sema: disallow non scalar sentinels in array types and reified types (#22473) 2025-01-13 05:28:53 +00:00
Jacob Young
5de880c288 Dwarf: emit debug info for extern globals 2025-01-12 23:40:57 -05:00
mlugg
f78f9388fe Sema: allow tail calls of function pointers
Resolves: #22474
2025-01-13 02:57:15 +00:00
mlugg
04c9f50aec compiler: improve "... contains reference to comptime var" errors
`Sema.explainWhyValueContainsReferenceToComptimeVar` (concise name!)
adds notes to an error explaining how to get from a given `Value` to a
pointer to some `comptime var` (or a comptime field). Previously, this
error could be very opaque in any case where it wasn't obvious where the
comptime var pointer came from; particularly for type captures. Now, the
error notes explain this to the user.
2025-01-11 08:54:47 +00:00
Jacob Young
02692ad78c cbe: fix miscomps of the compiler 2025-01-10 06:10:15 -05:00
Jacob Young
4e581427d1 x86_64: fix miscomp where in use register is marked as free 2025-01-10 06:10:15 -05:00
Matthew Lugg
bc846c3799
Merge pull request #22414 from mlugg/better-analyze-call
Sema: rewrite semantic analysis of function calls
2025-01-10 10:43:31 +00:00
Michael Dusan
80a9f0b942 bsd: fix stage3 linking on freebsd and dragonfly 2025-01-10 09:38:31 +01:00
mlugg
e9bd2d45d4
Sema: rewrite semantic analysis of function calls
This rewrite improves some error messages, hugely simplifies the logic,
and fixes several bugs. One of these bugs is technically a new rule
which Andrew and I agreed on: if a parameter has a comptime-only type
but is not declared `comptime`, then the corresponding call argument
should not be *evaluated* at comptime; only resolved. Implementing this
required changing how function types work a little, which in turn
required allowing a new kind of function coercion for some generic use
cases: function coercions are now allowed to implicitly *remove*
`comptime` annotations from parameters with comptime-only types. This is
okay because removing the annotation affects only the call site.

Resolves: #22262
2025-01-09 06:46:47 +00:00
Jacob Young
3f95003d4c cbe: fix miscomps of x86_64 backend 2025-01-08 19:33:45 -05:00
Jacob Young
5b5c60f433 Dwarf: fix assertion failure
I'm not entirely sure how this happens.
2025-01-08 11:10:28 -05:00
David Rubin
40f5eac79c Sema: fix invalid AIR from array concat 2025-01-07 06:17:40 -05:00
Jacob Young
7aa95bc7f6 Dwarf: fix abbrev code being overwritten with the wrong empty variant 2025-01-06 17:08:47 -05:00
Reuben Dunnington
f34ef39af1 remove wasm from redzone targets list 2025-01-06 22:10:11 +01:00
Reuben Dunnington
a7a5f3506b fix win32 manifest ID for DLLs
* MSDN documentation page covering what resource IDs manifests should have:
  https://learn.microsoft.com/en-us/windows/win32/sbscs/using-side-by-side-assemblies-as-a-resource
* This change ensures shared libraries that embed win32 manifests use the
  proper ID of 2 instead of 1, which is only allowed for .exes. If the manifest
  uses the wrong ID, it will not be found and is essentially ignored.
2025-01-06 15:56:21 +01:00
Jacob Young
0bf44c3093 x86_64: fix @errorName data
The final offset was clobbering the first error name, which is revealed
by an out of bounds when the global error set is empty.

Closes #22362
2025-01-05 17:15:56 -05:00