aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/pointers.zig
AgeCommit message (Collapse)Author
2023-04-26behavior: update passing cbe testsJacob Young
2023-04-02x86_64: implement large cmpJacob Young
2023-03-25x86_64: implement atomic loopsJacob Young
2023-03-15behavior: enable passing behavior tests on stage2_x86_64Jacob Young
2023-02-23CType: fix lowering of generic function pointerJacob Young
2023-01-22stage2 ARM: add basic debug info for localsjoachimschmidt557
Also disables one behavior test which was failing
2023-01-22type: correct condition for eliding pointer alignment canonicalizationVeikka Tuominen
Closes #14373
2023-01-17AstGen: reset source cursor before generating pointer attributesVeikka Tuominen
These attributes can appear in any order but AstGen expects the source cursor to be incremented in a monotonically increasing order. Closes #14332
2023-01-05std: collect all options under one namespaceVeikka Tuominen
2022-12-27stage2 AArch64: unify callee-preserved regs on all targetsjoachimschmidt557
also enables many passing behavior tests
2022-12-10stage2: sparc64: Skip unimplemented testsKoakuma
2022-12-06remove references to stage1 in behavior testsAndrew Kelley
Good riddance.
2022-11-12llvm: correctly lower references to generic functionsVeikka Tuominen
Closes #13522
2022-10-30behavior: enable fixed cbe testsJacob Young
2022-10-25cbe: add support for all float literals typesJacob Young
2022-10-25cbe: fix atomicsJacob Young
2022-10-25behavior: enable stage2_c tests that are currently passingJacob Young
Also fix C warnings triggered by these tests.
2022-10-05Sema: use correct value when `@ptrCast` operand is comptime knownVeikka Tuominen
Closes #13034
2022-09-10x86_64: pass more behavior testsJakub Konka
2022-09-09stage2 ARM: implement ptr_elem_valjoachimschmidt557
2022-09-09stage2 ARM: implement struct_field_val for registersjoachimschmidt557
2022-09-08Sema: preserve alignment of const decl pointersVeikka Tuominen
Closes #12769
2022-06-25stage2 ARM: implement basic intCast and error union wrappingjoachimschmidt557
2022-05-27stage2 AArch64: complete genTypedValuejoachimschmidt557
2022-05-17stage2: fix pointer arithmetic result typeAndrew Kelley
This makes it so the result of doing pointer arithmetic creates a new pointer type that has adjusted alignment.
2022-05-17behavior tests: correction of C pointer testAndrew Kelley
This test was also covering this behavior: ```zig test "equality of pointers to comptime const" { const a: i32 = undefined; comptime assert(&a == &a); } ``` This check belongs in its own behavior test which isolates this behavior; not bundled along with a C pointer test.
2022-03-23Sema: fix comptime elem_ptr compare fixed addressAndrew Kelley
2022-03-23wasm: Enable all passing testsLuuk de Gram
All tests have been manually verified which are now passing. This means that any remaining TODO is an actual to-be-fixed or to-be-implemented test case.
2022-03-22CBE: enable more passing tests (#11258)Daniele Cocca
2022-03-17CBE: enable more tests that are currently passingDaniele Cocca
2022-03-16stage2: elem_ptr needs to know if slice or direct accessMitchell Hashimoto
This fixes one of the major issues plaguing the `std.sort` comptime tests. The high level issue is that at comptime, we need to know whether `elem_ptr` is being used to subslice an array-like pointer or access a child value. High-level example: var x: [2][2]i32 = undefined; var a = &x[0]; // elem_ptr, type *[2]i32 var y: [5]i32 = undefined; var b = y[1..3]; // elem_ptr, type *[2]i32 `a` is pointing directly to the 0th element of `x`. But `b` is subslicing the 1st and 2nd element of `y`. At runtime with a well defined memory layout, this is an inconsequential detail. At comptime, the values aren't laid out exactly in-memory so we need to know the difference. This becomes an issue specifically in this case: var c: []i32 = a; var d: []i32 = b; When converting the `*[N]T` to `[]T` we need to know what array to point to. For runtime, its all the same. For comptime, we need to know if its the parent array or the child value. See the behavior tests for more details. This commit fixes this by adding a boolean to track this on the `elem_ptr`. We can't just immediately deref the child for `&x[0]` because it is legal to ptrCast it to a many-pointer, do arithmetic, and then cast it back (see behavior test) so we need to retain access to the "parent" indexable.
2022-03-08stage2: sentinel array init must add sentinel to array valueMitchell Hashimoto
I didn't realize that the `array` value type has the sentinel on it.
2022-03-08stage2: elem vals of many pointers need not deref pointersMitchell Hashimoto
By the time zirElemVal is reached for a many pointer, a load has already happened, making sure the operand is already dereferenced. This makes `mem.sliceTo` now work.
2022-03-07stage2: resolve array type for typed array init expressionsMitchell Hashimoto
Array types with sentinels were not being typed correctly in the translation from ZIR to Sema (comptime). This modifies the `array_init` ZIR to also retain the type of the init expression (note: untyped array initialization is done via the `array_init_anon` ZIR and so is unchanged in this commit).
2022-03-05stage2: test changed behavior of c pointer resolution from stage1Mitchell Hashimoto
stage1 peer resolves the given test to `[*c]u8` but stage2 makes that a const u8. I believe stage2 behavior is correct since the pointer itself is const.
2022-03-03Sema: rework peer type logic for pointersAndrew Kelley
Now it's centered around a switch on the chosen type tag which gives us easy access to pointer data. The logic is simplied and in some cases logic is removed when it is sufficient to choose the type that is a better coercion target without knowing whether such coercion will succeed ahead of time. A bug is fixed at the bottom of the function; we were doing the opposite of what we were supposed to with `seen_const`. Also the bottom of the function has a more complete handling of the possible combinations of `any_are_null`, `convert_to_slice`, and `err_set_ty`. In the behavior tests, not as many backends needed to be skipped.
2022-03-03stage2: peer resolve *T to [*c]TMitchell Hashimoto
2022-03-03stage2: make analyzePtrArithmetic no-op with offset=0Veikka Tuominen
2022-02-24Sema: implement tupleFieldVal, fix comptime elem_ptrAndrew Kelley
2022-02-22Port more behavior testsJakub Konka
2022-01-26Sema: implement struct init is_ref=trueAndrew Kelley
Takes advantage of the pattern already established with array_init_anon. Also upgrades array_init (non-anon) to the pattern. Implements comptime struct value equality and pointer value hashing.
2021-11-16C backend: basic big ints, fix airPtrToInt, array references, pointer ↵drew
arithmetic UB with NULL, implement airPtrElemPtr/Val, fix redundant indirection/references with arrays -add additional test cases that were found to be passing -add basic int128 test cases which previously did not pass but weren't covered -most test cases in cast.zig now pass -i128/u128 or smaller int constants can now be rendered -unsigned int constants are now always suffixed with 'u' to prevent random compile errors -pointers with a val tag of 'zero' now just emit a 0 constant which coerces to the pointer type and fixes some warnings with ordered comparisons -pointers with a val tag of 'one' are now casted back to the pointer type -support pointers with a u64 val -fix bug where rendering an array's type will emit more indirection than is needed -render uint128_t/int128_t manually when needed -implement ptr_add/sub AIR handlers manually so they manually cast to int types which avoids UB if the result or ptr operand is NULL -implement airPtrElemVal/Ptr -airAlloc for arrays will not allocate a ref as the local for the array is already a reference/pointer to the array itself -fix airPtrToInt by casting to the int type
2021-10-23stage2: implement more C pointer Sema and comptime ptr arithAndrew Kelley
2021-10-17stage2: implement coercion from null to C pointerAndrew Kelley
2021-08-07stage2: pass some pointer testsAndrew Kelley
* New AIR instructions: ptr_add, ptr_sub, ptr_elem_val, ptr_ptr_elem_val - See the doc comments for details. * Sema: implement runtime pointer arithmetic. * Sema: implement elem_val for many-pointers. * Sema: support coercion from `*[N:s]T` to `[*]T`. * Type: isIndexable handles many-pointers.
2021-06-21fix code broken from previous commitJacob G-W
2021-06-21std, src, doc, test: remove unused variablesJacob G-W
2021-05-08Merge remote-tracking branch 'origin/master' into stage2-whole-file-astgenAndrew Kelley
Conflicts: * doc/langref.html.in * lib/std/enums.zig * lib/std/fmt.zig * lib/std/hash/auto_hash.zig * lib/std/math.zig * lib/std/mem.zig * lib/std/meta.zig * test/behavior/alignof.zig * test/behavior/bitcast.zig * test/behavior/bugs/1421.zig * test/behavior/cast.zig * test/behavior/ptrcast.zig * test/behavior/type_info.zig * test/behavior/vector.zig Master branch added `try` to a bunch of testing function calls, and some lines also had changed how to refer to the native architecture and other `@import("builtin")` stuff.
2021-04-29move behavior tests from test/stage1/ to test/Andrew Kelley
And fix test cases to make them pass. This is in preparation for starting to pass behavior tests with self-hosted.