25912 Commits

Author SHA1 Message Date
Robin Voetter
6f55a68964 spirv: air struct_field_ptr for unions 2023-09-23 12:36:56 -07:00
Robin Voetter
5dffbf32bf spirv: air struct_field_val for unions 2023-09-23 12:36:56 -07:00
Robin Voetter
decdedf97d spirv: add names to globals and initializers 2023-09-23 12:36:56 -07:00
Robin Voetter
924235a023 spirv: emit OpLogical(Not)Equal for comparing bools 2023-09-23 12:36:56 -07:00
Robin Voetter
c7c0517ac0 spirv: emit OpNot for arithmetic not 2023-09-23 12:36:56 -07:00
Robin Voetter
5141b4e05c spirv: fix store of undef 2023-09-23 12:36:56 -07:00
Robin Voetter
a86c939857 spirv: also add Float64 by default 2023-09-23 12:36:56 -07:00
Robin Voetter
f16d1603ab spirv: fix type_map use-after-realloc issues 2023-09-23 12:36:44 -07:00
Robin Voetter
42226fc1b7 spirv: make construct(Struct|Array) use the Function storage class 2023-09-23 12:36:44 -07:00
Robin Voetter
06d9e3b2eb spirv: always emit unsigned integers
This is required for SPIR-V in Kernel mode. The Intel
implementation just didn't care about this fact.
2023-09-23 12:36:44 -07:00
Robin Voetter
18d0909ada spirv: fixes 2023-09-23 12:36:44 -07:00
Robin Voetter
66036e6000 spirv: remove indirect constant lowering
It is stupid and I hate it.
2023-09-23 12:36:44 -07:00
Robin Voetter
b30cd67987 spirv: put global var initializers in functions 2023-09-23 12:36:44 -07:00
Robin Voetter
240f9d740d spirv: lower union initialization at runtime 2023-09-23 12:36:44 -07:00
Robin Voetter
d06862b759 spirv: lower struct aggregate initialization at runtime 2023-09-23 12:36:44 -07:00
Robin Voetter
001d76a412 spirv: lower array aggregate at runtime 2023-09-23 12:36:44 -07:00
Robin Voetter
ae17831cc0 spirv: lower opt constants 2023-09-23 12:36:44 -07:00
Robin Voetter
3e2553c712 spirv: lower ptr constants 2023-09-23 12:36:44 -07:00
Robin Voetter
cc13864dfb spirv: lower enum_tag constants 2023-09-23 12:36:44 -07:00
Robin Voetter
aeaaa953a0 spirv: assign type names to (error) unions 2023-09-23 12:36:44 -07:00
Robin Voetter
ece52640eb spirv: construct error union at runtime 2023-09-23 12:36:44 -07:00
Robin Voetter
ced8a2c3a6 spirv: add type_map to map AIR types to SPIR-V types
This will help us both to make the implementation a little
more efficient by caching emission for certain types like structs,
and also allow us to attach extra information about types that we
can use while lowering without performing a search over the entire
type tree for some property.
2023-09-23 12:36:44 -07:00
Robin Voetter
79f7481575 spirv: disable failing tests 2023-09-23 12:36:44 -07:00
Ryan Liptak
865b2e259b Fix reportRetryableWin32ResourceError
Follow up to https://github.com/ziglang/zig/pull/17069.

This TODO being left in was a complete oversight.

Before, any 'retryable' error would hit:

error: thread 2920 panic: access of union field 'success' while field 'failure_retryable' is active

Now, it will be reported/handled properly:

C:\Users\Ryan\Programming\Zig\zig\test\standalone\windows_resources\res\zig.rc:1:1: error: FileNotFound
2023-09-23 11:01:02 -07:00
mlugg
ce919ccf45 Sema: do not emit dbg_var_val and dbg_var_ptr instructions for comptime-only types 2023-09-23 14:45:59 +01:00
mlugg
05f78adeaf Sema: don't attempt to reinterpret comptime-only types when mutating comptime memory
I have no idea how correct this code is, but I'm working on a full
rewrite of this logic anyway, and this certainly seems more correct than
before.
2023-09-23 13:51:18 +01:00
mlugg
644041b3a4 Sema: refactor detection of comptime-known consts
This was previously implemented by analyzing the AIR prior to the ZIR
`make_ptr_const` instruction. This solution was highly delicate, and in
particular broke down whenever there was a second `alloc` between the
`store` and `alloc` instructions, which is especially common in
destructure statements.

Sema now uses a different strategy to detect whether a `const` is
comptime-known. When the `alloc` is created, Sema begins tracking all
pointers and stores which refer to that allocation in temporary local
state. If any store is not comptime-known or has a higher runtime index
than the allocation, the allocation is marked as being runtime-known.
When we reach the `make_ptr_const` instruction, if the allocation is not
marked as runtime-known, it must be comptime-known. Sema will use the
set of `store` instructions to re-initialize the value in comptime
memory. We optimize for the common case of a single `store` instruction
by not creating a comptime alloc in this case, instead directly plucking
the result value from the instruction.

Resolves: #16083
2023-09-23 13:51:18 +01:00
mlugg
fc3ff26237 TypedValue: print undef @ptrFromInt pointers correctly 2023-09-23 13:51:18 +01:00
Andrew Kelley
0710314de6
Merge pull request #15490 from kcbanner/skip_oom_steps
build_runner: add --skip-oom-steps
2023-09-22 15:09:46 -07:00
Andrew Kelley
5ae8469653 CI: let's not start using --skip-oom-steps quite yet 2023-09-22 15:09:09 -07:00
kcbanner
53d1282f0c build: add --skip-oom-steps
Specifying this argument causes steps that specify a max_rss that exceeds the
total max_rss value of the runner to be skipped, instead of failing.
2023-09-22 15:08:51 -07:00
mlugg
e011c31ee8 Sema: optimize comptime @memset by setting all elements at once
Previously, @memset at comptime performed N pointer stores. This is less
efficient than just storing a whole array of values at once. The
difference can be quite drastic when reinterpreting memory - a test case
which is 40s on master branch now takes under a second on a debug
compiler build.

Resolves: #17214
2023-09-22 14:42:27 -07:00
Andrew Kelley
272a57eeed Revert "CI: update x86_64 windows tarballs"
This reverts commit bb98ffbe7fc8d21f48286432fe685312fd9b07cc.

This caused master branch to fail the CI. We do need to figure out why
these assertions are tripping but let's do it in a branch other than
master.
2023-09-22 12:53:36 -07:00
Aven Bross
6c54ed73f7 Added basic support for wasm32-emscripten target 2023-09-22 12:49:03 -07:00
Wooster
4585cb1e2f AstGen: fix @export with undeclared identifier crashing
This required a third `if (found_already == null)` in another place in
AstGen.zig for this special case of `@export`.

Fixes #17188
2023-09-22 12:23:57 -07:00
Andrew Kelley
3fc7413574
Merge pull request #17069 from squeek502/resinator
Add a `.rc` -> `.res` compiler to the Zig compiler
2023-09-22 12:18:50 -07:00
Andrew Kelley
867e61e10b CI: update macos tarballs
Updates from LLVM release/17.x to 17.0.1
2023-09-22 09:43:31 -07:00
Andrew Kelley
bb98ffbe7f CI: update x86_64 windows tarballs
Updates from LLVM release/17.x to 17.0.1
2023-09-22 09:42:15 -07:00
Andrew Kelley
a8d2ed8065
Merge pull request #17172 from ziglang/ip-structs
compiler: move struct types into InternPool proper
2023-09-22 09:38:41 -07:00
Andrew Kelley
221295b7db wasm: fix regression of C ABI
It seems the webassembly backend does not want the exception that
`structFieldAlignmentExtern` makes for 128-bit integers. Perhaps that
logic should be modified to check if the target is wasm.

Without this, this branch fails the C ABI tests for wasm, causing this:
```
wasm-ld: warning: function signature mismatch: zig_struct_u128
>>> defined as (i64, i64) -> void in cfuncs.o
>>> defined as (i32) -> void in test-c-abi-wasm32-wasi-musl-ReleaseFast.wasm.o
```
2023-09-21 22:25:58 -07:00
Andrew Kelley
747440677d LLVM: fix UAF when lowering debug info for structs
Gotta call the get() function inside the loop if the loop adds anything
to InternPool.
2023-09-21 21:55:41 -07:00
Ryan Liptak
572956ce24 classifyFileExt: Use case-insensitive matching for .rc and .res 2023-09-21 21:30:21 -07:00
Andrew Kelley
81b5df347a compiler: fix structFieldName crash for tuples
When struct types have no field names, the names are implicitly
understood to be strings corresponding to the field indexes in
declaration order. It used to be the case that a NullTerminatedString
would be stored for each field in this case, however, now, callers must
handle the possibility that there are no names stored at all. This
commit introduces `legacyStructFieldName`, a function to fake the
previous behavior. Probably something better could be done by reworking
all the callsites of this function.
2023-09-21 17:29:34 -07:00
mlugg
edfada4317 Sema: mark transitive failure when @import refers to a failed file 2023-09-21 16:27:52 -07:00
Andrew Kelley
55bc8a7fa9 compiler: fix compilation for 32-bit targets 2023-09-21 15:27:25 -07:00
mlugg
2e5d13e9cf Sema: queue type resolution when analyzing ret_ptr during inline call 2023-09-21 14:48:41 -07:00
mlugg
9965d960b5 type: give empty unions 1-byte alignment
Zero-byte alignment is no longer valid for runtime types. I made most of
these changes in an earlier commit, but missed this case.
2023-09-21 14:48:41 -07:00
Andrew Kelley
d3f3de73ba Sema: less aggressive type resolution for field_val
This is an alternate version of c675daac7d0d6328ad89297e8938a6b17b59c489
2023-09-21 14:48:41 -07:00
mlugg
1b672e41c5 InternPool,Sema,type,llvm: alignment fixes
This changeset fixes the handling of alignment in several places. The
new rules are:
* `@alignOf(T)` where `T` is a runtime zero-bit type is at least 1,
  maybe greater.
* Zero-bit fields in `extern` structs *do* force alignment, potentially
  offsetting following fields.
* Zero-bit fields *do* have addresses within structs which can be
  observed and are consistent with `@offsetOf`.

These are not necessarily all implemented correctly yet (see disabled
test), but this commit fixes all regressions compared to master, and
makes one new test pass.
2023-09-21 14:48:41 -07:00
Andrew Kelley
cd242b7440 Sema: queue type resolution when adding a struct_field_val instruction 2023-09-21 14:48:40 -07:00