Commit Graph
34717 Commits
Author SHA1 Message Date
mlugg f78f9388fe Sema: allow tail calls of function pointers
Resolves: #22474
2025-01-13 02:57:15 +00:00
Ben Grant 15fe999572 std.atomic: fix cache line size for RISC-V 2025-01-12 04:51:00 +01: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 6cfc9c0e02 Merge pull request #22459 from jacobly0/fix-miscomps
cbe/x86_64: fix more miscomps
2025-01-10 15:36:21 -05: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
Andrew Kelley b36ea592b8 build.zig: make unit tests not use the full matrix 2025-01-10 06:03:57 -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 6a837e64cf compiler: bump stack size 32 MiB -> 46 MiB
Before the prior commit, the maximum comptime recursion depth on my
system was 4062. After the prior commit, it decreased to 2854. This
commit increases the compiler's stack size enough so that the recursion
depth limit is no less than it was before the `Sema.analyzeCall`
rewrite, preventing this from being a breaking change. Specifically,
this stack size increases my observed maximum comptime recursion depth
to 4105.
2025-01-10 05:41:21 +00: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
Des-Nerger 6a21d18adf -fwine: allow 32-bit .exe's be run on backward-compatible 64-bit arches
Closes #22361.
2025-01-07 19:03:40 +01:00
David Rubin 40f5eac79c Sema: fix invalid AIR from array concat 2025-01-07 06:17:40 -05:00
Alex Rønne Petersen 23281704dc test: Enable long calls for all thumb/thumbeb module tests.
The relocation range issues will happen eventually as we add more code to the
standard library and test suites, so we may as well just deal with this now.
@MasonRemaley ran into this in #20271, for example.
2025-01-07 08:44:45 +01:00
David Rubin fc28a71d9f Target: update the extra features before resolving the dynamic linker 2025-01-07 02:58:10 +01: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
Alex Rønne Petersen 0fb80b0633 Merge pull request #22430 from alexrp/thumbeb
Some QEMU fixes + disable some tests for `thumbeb` in addition to `armeb`
2025-01-06 21:51:56 +01:00
Alex Rønne Petersen 03ac40d570 std: Disable some tests affected by #22060 for thumbeb too. 2025-01-06 16:47:40 +01:00
Alex Rønne Petersen c1ae99efb3 test: Disable align(N) on functions and @alignCast functions for thumbeb too. 2025-01-06 16:31:32 +01:00
Alex Rønne Petersen 52e9fd7c3c test: Disable vector behavior tests affected by #22060 for thumbeb too. 2025-01-06 16:20:27 +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
Alex Rønne Petersen f54f58b60f std.zig.system: Handle thumb/thumbeb for QEMU in getExternalExecutor(). 2025-01-06 15:37:25 +01:00
Alex Rønne Petersen 749e67dee8 std.zig.system: Reject x32 for QEMU in getExternalExecutor(). 2025-01-06 15:37:23 +01:00
cdelerandAndrew Kelley 745d3ed0ac Remove strict verifyContext invocation from hash_map implementation. (#22370)
Fixes #19640

Co-authored-by: Andrew Kelley <andrew@ziglang.org>
2025-01-06 13:37:30 +00: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
mlugg 137787edbb Sema: fix incorrect type in optional_payload instruction
Resolves: #22417
2025-01-05 19:38:19 +00:00
Travis Lange 82e7f23c49 Added support for thin lto 2025-01-05 18:08:11 +01:00
mlugg da1ffae7d2 std: fix undefined value in Target.Query
This is an RLS footgun.

Resolves: #21834
2025-01-05 16:26:21 +00:00
Matthew Lugg 41786fabfc Merge pull request #22412 from mlugg/line-number-incremental
incremental: debug line number updates
2025-01-05 11:48:58 +00:00
mlugg b039a8b615 compiler: slightly simplify builtin decl memoization
Rather than `Zcu.BuiltinDecl.Memoized` being a struct with fields, it
can instead just be an array, indexed by the enum. This allows runtime
indexing, avoiding a few now-unnecessary `inline` switch cases.
2025-01-05 05:52:02 +00:00
Jacob Young dde3116e50 Dwarf: implement new incremental line number update API 2025-01-05 02:20:56 +00:00
mlugg 065e10c95c link: new incremental line number update API 2025-01-05 02:20:56 +00:00
Matthew Lugg 136c5a916e Merge pull request #22403 from mlugg/incremental
incremental: fixes
2025-01-05 00:28:06 +00:00
axel escalada ff4f2753e4 Improve first() documentation for split iterators
* remove  from doc., add explicit info when panic

* match convention for assert documentation, avoiding to use panic here
2025-01-04 13:45:12 +00:00
mlugg 6cc848e9f6 incremental: add new test cases
These cover the fixes from the last few commits.
2025-01-04 07:51:19 +00:00
mlugg f01029c4af incremental: new AnalUnit to group dependencies on std.builtin decls
This commit reworks how values like the panic handler function are
memoized during a compiler invocation. Previously, the value was
resolved by whichever analysis requested it first, and cached on `Zcu`.
This is problematic for incremental compilation, as after the initial
resolution, no dependencies are marked by users of this memoized state.
This is arguably acceptable for `std.builtin`, but it's definitely not
acceptable for the panic handler/messages, because those can be set by
the user (`std.builtin.Panic` checks `@import("root").Panic`).

So, here we introduce a new kind of `AnalUnit`, called `memoized_state`.
There are 3 such units:
* `.{ .memoized_state = .va_list }` resolves the type `std.builtin.VaList`
* `.{ .memoized_state = .panic }` resolves `std.Panic`
* `.{ .memoized_state = .main }` resolves everything else we want

These units essentially "bundle" the resolution of their corresponding
declarations, storing the results into fields on `Zcu`. This way, when,
for instance, a function wants to call the panic handler, it simply runs
`ensureMemoizedStateResolved`, registering one dependency, and pulls the
values from the `Zcu`. This "bundling" minimizes dependency edges. The 3
units are separated to allow them to act independently: for instance,
the panic handler can use `std.builtin.Type` without triggering a
dependency loop.
2025-01-04 07:51:19 +00:00
mlugg fd62912787 incremental: correctly handle losing file root struct_decl inst 2025-01-04 05:44:29 +00:00
mlugg f818098971 incremental: correctly return error.AnalysisFail when type structure changes
`Zcu.PerThead.ensureTypeUpToDate` is set up in such a way that it only
returns the updated type the first time it is called. In general, that's
okay; however, the exception is that we want the function to continue
returning `error.AnalysisFail` when the type has been lost, or its
number of captures changed.

Therefore, the check for this case now happens before the up-to-date
success return.

For simplicity, the number of captures is now handled by intentionally
losing the instruction in `Zcu.mapOldZirToNew`, since there is nothing
to gain from tracking a type when old instances of it can never be
reused.
2025-01-04 05:44:29 +00:00
mlugg 814491f599 Zcu: fix crash when incremental re-analysis of type annotation yields same result 2025-01-04 05:44:29 +00:00
mlugg b4da8eef2a Zir: split up start and end of range in for_len
The old lowering was kind of neat, but it unintentionally allowed the
syntax `for (123) |_| { ... }`, and there wasn't really a way to fix
that. So, instead, we include both the start and the end of the range in
the `for_len` instruction (each operand to `for` now has *two* entries
in this multi-op instruction). This slightly increases the size of ZIR
for loops of predominantly indexables, but the difference is small
enough that it's not worth complicating ZIR to try and fix it.
2025-01-03 22:28:37 +00:00
mlugg 252c203101 Sema: correctly label block_comptime for restoring error return trace index
Resolves: #22384
2025-01-02 16:26:50 +00:00
GalaxyShard e6879e99e2 compiler_rt: fix incorrect __clzsi2_thumb1 lookup table usage 2025-01-02 01:01:06 +01:00
Tangtang Zhou fed8df9217 fix: windows libc lib paths for x86-windows-msvc 2025-01-01 23:47:39 +01:00
Matthew Lugg 0585ed0641 Merge pull request #22379 from mlugg/incremental-fixes
incremental: bugfixes
2025-01-01 21:49:02 +00:00
mlugg 5333d2443a Sema: fix invalid coercion *[n:x]T -> *[m]T for n != m
The change in `Sema.coerceExtra` is just to avoid an unhelpful error
message, covered by the added test case.

Resolves: #22373
2025-01-01 16:20:40 +00:00
mlugg f0d5e0df4d incremental: fix errors not being deleted upon re-analysis
Previously, logic in `Compilation.getAllErrorsAlloc` was corrupting the
`failed_analysis` hashmap. This meant that on updates after the initial
update, attempts to remove entries from this map (because the `AnalUnit`
in question is being re-analyzed) silently failed. This resulted in
compile errors from earlier updates wrongly getting "stuck", i.e. never
being removed.

This commit also adds a few log calls which helped me to find this bug.
2025-01-01 15:49:37 +00:00
mlugg ba78d79228 Zir: fix instruction tracking when function signatures are given 2025-01-01 12:19:14 +00:00