aboutsummaryrefslogtreecommitdiff
path: root/src/Module.zig
AgeCommit message (Collapse)Author
2023-04-27sema: Rework Decl.value_arena to fix another memory corruption issuekcbanner
This fixes a bug where resolveStructLayout to was promoting from stale value_arena state which was then overwrriten when another ArenaAllocator higher in the call stack saved its state back. This resulted in the memory for struct_obj.optmized_order overlapping existing allocations. My initial fix in c7067ef wasn't sufficient, as it only checked if the struct being resolved had the same owner as the current sema instance. However, it's possible for resolveStructLayout to be called when the sema instance has a different owner, but the struct decl's value_arena is currently in use higher up in the callstack. This change introduces ValueArena, which holds the arena state as well as tracks if an arena has already been promoted from it. This allows callers to use the value_arena storage without needing to be aware of another user of this same storage higher up in the call stack.
2023-04-26enable debugging infrastructure when using C backendAndrew Kelley
Thanks to @jacobly0's recent enhancements to the C backend, this stuff works now.
2023-04-25cbe: fix mutability issues with builtin test_functionsJacob Young
2023-04-22wasm: implement `error_set_has_value`Luuk de Gram
This implements the safety check for error casts. The instruction generates a jump table with 2 possibilities. The operand is used as an index into the jump table. For cases where the value does not exist within the error set, it will generate a jump to the 'false' block. For cases where it does exist, it will generate a jump to the 'true' block. By calculating the highest and lowest value we can keep the jump table smaller, as it doesn't need to contain an index into the entire error set.
2023-04-20Liveness: add a liveness verification passJacob Young
This code only runs in a debug zig compiler, similar to verifying llvm modules.
2023-04-20Module: mark function body dependencies, don't re-analyze anonymous declsmlugg
2023-04-03link: cleanup lazy symbolsJacob Young
We now only update one lazy symbol in flushModule. Updating the rest from updateDecl is TBD.
2023-03-26Module: fix lazy srcloc resolution for new for loop syntaxVeikka Tuominen
Closes #15081
2023-03-21Improve error messages for break type coercionJohn Schmidt
2023-03-17main: add debug option to dump unoptimized llvm irJacob Young
2023-03-15Module: handle incremental update from ZIR with AST errorsAndrew Kelley
2023-03-15progress towards semantic error serializationAndrew Kelley
Introduces std.zig.ErrorBundle which is a trivially serializeable set of compilation errors. This is in the standard library so that both the compiler and the build runner can use it. The idea is they will use it to communicate compilation errors over a binary protocol. The binary encoding of ErrorBundle is a bit problematic - I got a little too aggressive with compaction. I need to change it in a follow-up commit to use some indirection in the error message list, otherwise iteration is too unergonomic. In fact it's so problematic right now that the logic getAllErrorsAlloc() actually fails to produce a viable ErrorBundle because it puts SourceLocation data in between the root level ErrorMessage data. This commit has a simplification - redundant logic for rendering AST errors to stderr has been removed in favor of moving the logic for lowering AST errors into AstGen. So even if we get parse errors, the errors will get lowered into ZIR before being reported. I believe this will be useful when working on --autofix. Either way, some redundant brittle logic was happily deleted. In Compilation, updateSubCompilation() is improved to properly perform error reporting when a sub-compilation object fails. It no longer dumps directly to stderr; instead it populates an ErrorBundle object, which gets added to the parent one during getAllErrorsAlloc(). In package fetching code, instead of dumping directly to stderr, it now populates an ErrorBundle object, and gets properly reported at the CLI layer of abstraction.
2023-03-11Module: retry ZIR cache file creationAndrius Bentkus
There are no dir components, so you would think that this was unreachable, however we have observed on macOS two processes racing to do openat() with O_CREAT manifest in ENOENT. closes #12138
2023-03-08Module: rewrite zir caching logicJacob Young
Multiple processes can sit waiting for the exclusive lock at the same time, so we want to recheck whether it needs to be updated whenever we get an exclusive lock. This also fixes a race condition between one process truncating the cache file and another process reading it without atomic locking.
2023-03-05stage2: add zig_backend to ZIR cache namespaceAndrew Kelley
2023-02-21Improve multi-module error messagesmlugg
- Fix assertion failure if AstGen failed on a multi-module file - Cap number of per-error reference notes and total multi-module errors each at 5 - Always put "root of package" reference notes first Resolves: #14499
2023-02-21Implement new module CLImlugg
2023-02-18improve error message for byref capture of byval arrayAndrew Kelley
2023-02-18Sema: improve error message for mismatched for loop lengthsAndrew Kelley
2023-02-18update std lib and compiler sources to new for loop syntaxAndrew Kelley
2023-02-13move the cache system from compiler to std libAndrew Kelley
2023-02-05make `@embedFile` support module-mapped names the same way as `@import`Andrew Kelley
closes #14553
2023-02-03link: remove `FnData` and make it self-ownedLuuk de Gram
This finishes the work started in #14502 where atoms are owned by the linker themselves. This now makes debug atoms fully owned by dwarf, and no information is left stored on the decl.
2023-02-03introduce ZON: Zig Object NotationAndrew Kelley
* std.zig.parse is moved to std.zig.Ast.parse * the new function has an additional parameter that requires passing Mode.zig or Mode.zon * moved parser.zig code to Parse.zig * added parseZon function next to parseRoot function
2023-02-01link: remove union types which are now internal to backendsJakub Konka
2023-02-01link: make Wasm atoms fully owned by the linkerLuuk de Gram
2023-02-01link: make SpirV atoms fully owned by the linkerJakub Konka
2023-02-01link: decouple DI atoms from linker atoms, and manage them in Dwarf linkerJakub Konka
2023-02-01link: make Plan9 atoms fully owned by the linkerJakub Konka
2023-01-31link: make Coff atoms fully owned by the linkerJakub Konka
2023-01-31link: make Elf atoms fully owned by the linkerJakub Konka
2023-01-31link: make MachO atoms fully owned by the linkerJakub Konka
2023-01-27self-hosted: remove allocateDeclIndexes from the public link.File APIJakub Konka
2023-01-27wasm: migrate to new non-allocateDeclIndexes APILuuk de Gram
2023-01-26coff: migrate to new non-allocateDeclIndexes APIJakub Konka
2023-01-26elf: migrate to new non-allocateDeclIndexes APIJakub Konka
2023-01-26macho: completely remove allocateDeclIndexes in favor of linker trackingJakub Konka
2023-01-22AstGen: detect and error on files included in multiple packagesmlugg
Previously, if a source file was referenced from multiple packages, it just became owned by the first one AstGen happened to reach; this was a problem, because it could lead to inconsistent behaviour in the compiler based on a race condition. This could be fixed by just analyzing such files multiple times - however, it was pointed out by Andrew that it might make more sense to enforce files being part of at most a single package. Having a file in multiple packages would not only impact compile times (due to Sema having to run multiple times on potentially a lot of code) but is also a confusing anti-pattern which more often than not is a mistake on the part of the user. Resolves: #13662
2023-01-22Package: store package name directlymlugg
By @Vexu's suggestion, since fetching the name from the parent package is error-prone and complex, and optimising Package for size isn't really a priority.
2023-01-16Sema: automatically optimize order of struct fieldsVeikka Tuominen
This is a simple starting version of the optimization described in #168 where the fields are just sorted by order of descending alignment.
2023-01-11Sema: fix typeInfo decls with usingnamespaceVeikka Tuominen
Closes #12403
2023-01-09std: add helper functions to std.zig.Ast for extracting data out of nodesTechatrix
2023-01-05Sema: handle enum expressions referencing local variablesVeikka Tuominen
Closes #12272
2023-01-05Sema: remove generic function from `monomorphed_funcs` on any errorVeikka Tuominen
2023-01-05Sema: add system for checking backend feature supportVeikka Tuominen
2023-01-03Sema: do not immediately destroy failed generic instantiationVeikka Tuominen
Closes #12535 Closes #12765 Closes #12927
2022-12-30fix generic function arg debug info referencing wrong parameterVeikka Tuominen
Closes #14123
2022-12-14stage2: remove `pub` from a private functionAndrew Kelley
2022-12-14std.fs.Dir.statFile reworkAndrew Kelley
* revert changes to Module because the error set is consistent across operating systems. * remove duplicated Stat.fromSystem code and use a less redundant name. * make fs.Dir.statFile follow symlinks, and avoid pointless control flow through the posix layer.
2022-12-14std.fs.Dir.statFile: use fstatatPhilippe Pittoli
This avoids extra syscalls.