Commit Graph

11665 Commits

Author SHA1 Message Date
Andrew Kelley 3c66850e42 Merge pull request #15278 from ziglang/memcpy-memset
change semantics of `@memcpy` and `@memset`
2023-04-26 10:01:54 -07:00
Loris Cro b294bff1a8 Autodoc: new decl search system (#15475)
New search system is based on a Radix Tree. The Radix Tree contains a shallow list of all decl names (ie no paths), plus some suffixes, split by following the official style guide (eg "HashMapUnmanaged" also produces "MapUnmanaged" and "Unmanaged", same with snake_case and camelCase names).

Additionally, the search system uses the decl graph data to recognize hierarchical relationships between decls, allowing you to zero on a target namespace for search. As an example "fs create" will score highe all things related to the creation of files and directories inside of `std.fs`, while still showing (but with lower score) matches from `std.Bulild`. 

As another example "fs windows" will prioritize windows-related results in `std.fs`, while "windows fs" will prioritize fs-related results in `std.windows`.
2023-04-26 18:17:20 +02:00
kcbanner b55b8e7745 add support for .field_ptr in elemValueAdvanced
This fixes a crash when @compileLog is passed a slice backed by an aggregate field at comptime.
2023-04-26 17:31:42 +03:00
Casey Banner bc4d9f3aa9 translate-c: fix codegen when C source has variables named the same as mangling prefixes
If the C code had variables that were named the same as the prefixes used
for name mangling, such as "tmp" or "ref", then the codegen would generate
incorrect code in some cases. This was because these aliases were immediately
visible to expressions that actually needed to use the original name.

I introduced the concept of reserving aliases without enabling them. An alias
that isn't enabled isn't visible to expression translation, but is still
reserved so that sub-expressions generate aliases that don't overlap.

Add test cases to cover the cases that would break before this change.

Co-authored-by: Veikka Tuominen <git@vexu.eu>
2023-04-26 17:30:46 +03:00
Nameless 7285eedcd2 std.http: do -> wait, fix redirects 2023-04-26 00:02:55 -07:00
Andrew Kelley 13101295b9 Merge pull request #15454 from jacobly0/cbe-extern
cbe: implement `@extern`
2023-04-25 23:48:03 -07:00
kcbanner 295b8ca467 sema: add error for coercing a slice to an anyopaque pointer 2023-04-26 00:53:09 +03:00
Andrew Kelley badad16f88 C backend: fix lowering comparison when array ptr meets ptr
Pointer comparisons were triggering `-Wcompare-distinct-pointer-types`
before this fix, which adds `(void*)` casts if the lhs type and rhs type
do not match pointer sizeness.
2023-04-25 11:23:41 -07:00
Andrew Kelley 792bbfa301 Sema: fix memcpy alias safety incorrect math
Previously it was not multiplying by the element ABI size. Now, it uses
ptr_add instructions which do math based on the element type.
2023-04-25 11:23:41 -07:00
Andrew Kelley 5378fdffdc stage2: introduce store_safe AIR instruction
store:
The value to store may be undefined, in which case the destination
memory region has undefined bytes after this instruction is
evaluated. In such case ignoring this instruction is legal
lowering.

store_safe:
Same as `store`, except if the value to store is undefined, the
memory region should be filled with 0xaa bytes, and any other
safety metadata such as Valgrind integrations should be notified of
this memory region being undefined.
2023-04-25 11:23:41 -07:00
Andrew Kelley d604553ee0 C backend: use ++ instead of += for airMemset
It does the same thing but has fewer bytes in the output.
2023-04-25 11:23:41 -07:00
Andrew Kelley 1ba72bcf9a update test cases for new memcpy/memset semantics 2023-04-25 11:23:41 -07:00
Andrew Kelley 747f58366a wasm backend: fix airMemset with slices 2023-04-25 11:23:41 -07:00
Andrew Kelley 58fabbc903 x86_64 backend: support @memset with slices 2023-04-25 11:23:41 -07:00
Andrew Kelley 881e931ee1 x86_64 backend: implement @memset for element ABI size > 1
* make memset and memset_safe guarantee that if the length is
   comptime-known then it will be nonzero.
2023-04-25 11:23:41 -07:00
Andrew Kelley 482a0f648c Sema: implement comptime @memcpy 2023-04-25 11:23:41 -07:00
Andrew Kelley 83a7303bbf Sema: implement comptime @memset 2023-04-25 11:23:41 -07:00
Andrew Kelley 0f65cc9275 C backend: fix memset for loop lowering
Previously, this code casted the array pointer to u8 pointer, but I
removed that in a different commit. This commit restores the cast, but
instead of hard-coding u8, it uses the destination element pointer,
since memset now supports arbitrary element types.
2023-04-25 11:23:41 -07:00
Andrew Kelley 057c950093 LLVM backend: support non-byte-sized memset
Also introduce memset_safe AIR tag and support it in C backend and LLVM
backend.
2023-04-25 11:23:41 -07:00
Andrew Kelley 25d11283b7 x86 backend: implement new memcpy/memset semantics 2023-04-25 11:23:40 -07:00
Andrew Kelley 76e340cbfa wasm backend: implement new memcpy/memset and ptrtoint semantics 2023-04-25 11:23:40 -07:00
Andrew Kelley 92186b8c13 C backend: implement new memcpy and inttoptr semantics 2023-04-25 11:23:40 -07:00
Andrew Kelley edb5e493e6 update @memcpy to require equal src and dest lens
* Sema: upgrade operands to array pointers if possible when emitting
   AIR.
 * Implement safety checks for length mismatch and aliasing.
 * AIR: make ptrtoint support slice operands. Implement in LLVM backend.
 * C backend: implement new `@memset` semantics. `@memcpy` is not done
   yet.
2023-04-25 11:23:40 -07:00
Andrew Kelley a5c910adb6 change semantics of @memcpy and @memset
Now they use slices or array pointers with any element type instead of
requiring byte pointers.

This is a breaking enhancement to the language.

The safety check for overlapping pointers will be implemented in a
future commit.

closes #14040
2023-04-25 11:23:40 -07:00
Loris Cro 015ea6fd6c Merge branch 'master' into autodoc-pkg-mod 2023-04-25 20:03:53 +02:00
Jacob Young a1fcb51692 cbe: fix mutability issues with builtin test_functions 2023-04-25 13:42:10 -04:00
Jacob Young f1782c07a9 cbe: implement @extern 2023-04-25 13:42:10 -04:00
Jacob Young e485d00621 cbe: remove unused arena 2023-04-25 13:42:10 -04:00
Andrew Kelley a2fe81a639 Merge pull request #15421 from Vexu/fixes
Runtime safety improvements
2023-04-24 16:23:03 -07:00
Andrew Kelley ef0a02081d Merge pull request #15290 from mlugg/feat/builtin-in-comptime
Add `@inComptime` builtin
2023-04-24 12:54:12 -07:00
Ian Johnson 2be347a2c8 Sema: allow method calls on optional pointers 2023-04-24 09:35:54 +03:00
Andrew Kelley 2dbcc03fb8 Merge pull request #15405 from Luukdegram/wasm
wasm: implement more runtime safety checks
2023-04-23 15:39:36 -07:00
mlugg 35d82d31be Add @inComptime builtin
Resolves: #868
2023-04-23 13:16:42 -07:00
kcbanner 42ee364e7b translate-c: support brace-enclosed string initializers (c++20 9.4.2.1) 2023-04-23 21:45:08 +03:00
zooster bc8e1e1de4 Improvements to docs and text
* docs(std.math): elaborate on difference between absCast and absInt

* docs(std.rand.Random.weightedIndex): elaborate on likelihood

I think this makes it easier to understand.

* langref: add small reminder

* docs(std.fs.path.extension): brevity

* docs(std.bit_set.StaticBitSet): mention the specific types

* std.debug.TTY: explain what purpose this struct serves

This should also make it clearer that this struct is not supposed to provide unrelated terminal manipulation functionality such as setting the cursor position or something because terminals are complicated and we should keep this struct simple and focused on debugging.

* langref(package listing): brevity

* langref: explain what exactly `threadlocal` causes to happen

* std.array_list: link between swapRemove and orderedRemove

Maybe this can serve as a TLDR and make it easier to decide.

* PrefetchOptions.locality: clarify docs that this is a range

This confused me previously and I thought I can only use either 0 or 3.

* fix typos and more

* std.builtin.CallingConvention: document some CCs

* langref: explain possibly cryptic names

I think it helps knowing what exactly these acronyms (@clz and @ctz) and
abbreviations (@popCount) mean.

* variadic function error: add missing preposition

* std.fmt.format docs: nicely hyphenate

* help menu: say what to optimize for

I think this is slightly more specific than just calling it
"optimizations". These are speed optimizations. I used the word
"performance" here.
2023-04-23 21:06:21 +03:00
Veikka Tuominen f1e43d1f4f Sema: emit cast to null panics for function pointers
Closes #14676
2023-04-23 19:09:14 +03:00
Veikka Tuominen f3d18d5413 AstGen: fix debug info for some builtins
Closes #15163
2023-04-23 12:28:50 +03:00
Krzysztof Wolicki a260fa8bf2 autodoc: Change package to module to better reflect the new names 2023-04-23 01:02:09 +02:00
Luuk de Gram 6c1ab376dd wasm: store __zig_lt_errors_len in linear data
Rather than using a function call to verify if an error fits within
the global error set's length, we now store the error set' size in
the .rodata segment of the linear memory and load that value onto
the stack to check with the integer value.
2023-04-22 21:57:38 +02:00
Luuk de Gram d4ceb12ae9 wasm: implement error_set_has_value
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-22 21:16:23 +02:00
Luuk de Gram c4b295bb6e wasm: implement cmp_lt_errors_len instruction
Creates a global undefined symbol when this instruction is called.
The linker will then resolve it as a lazy symbol, ensuring it is
only generated when the symbol was created. In `flush` it will then
generate the function as only then, all errors are known and we can
generate the function body. This logic allows us to re-use the same
functionality of linker-synthetic-functions.
2023-04-22 21:16:23 +02:00
Andrew Kelley 21aa55d34e Merge pull request #15356 from jacobly0/cbe-std-tests
cbe: enable CI for std tests
2023-04-22 11:04:36 -07:00
Casey Banner c7067ef6e8 sema: fix memory corruption caused by resolveStructLayout 2023-04-22 17:12:35 +00:00
Loris Cro c5fb245f60 Merge branch 'master' into autodoc-src-files-dirs 2023-04-22 19:10:23 +02:00
Loris Cro ad634bca9f Merge pull request #15385 from der-teufel-programming/autodoc-cc-inline
autodoc: Handle calling conventions better
2023-04-22 19:07:28 +02:00
Jacob Young 08a8aa100d cbe: fix local aliasing issues in atomic ops 2023-04-21 23:08:48 -04:00
Jacob Young 5feb27c126 zig.h: fix float negation 2023-04-21 23:08:48 -04:00
Krzysztof Wolicki 428f745270 autodoc: Change html file destination dirs
Each file is now saved with its package index in data.json
2023-04-22 02:36:19 +02:00
Jakub Konka 14dfbbc213 macho: rebase lazy pointers and apply corrected base offset 2023-04-21 22:44:28 +02:00
Jakub Konka 9a181f367d macho: mark relocs dirty by target when updating GOT/stubs 2023-04-21 22:44:28 +02:00