Andrew Kelley
1d5f865cfa
Sema: fix runtime instructions omitted
...
in the presence of comptime control flow.
fixes #12171
2022-07-19 17:45:38 -07:00
Andrew Kelley
a39c51c6a4
Sema: fix UAF in coerceInMemoryAllowed
2022-07-16 13:48:12 -07:00
Veikka Tuominen
b2486fbc5e
Merge pull request #12121 from Vexu/span
...
Stage2 point to error location using spans
2022-07-16 12:22:53 +03:00
Veikka Tuominen
cf207df592
Module: improve source spans for initializers and var types
...
```zig
const U = union { foo: u32, bar: u32 };
test {
var a = U{ .foo = 1213, .bar = 1123 };
_ = a;
}
test {
var a: (123 + 5238094) = 0;
_ = a;
}
```
before:
```
:30: note: additional initializer here
var a = U{ .foo = 1213, .bar = 1123 };
^~~
:12: error: expected type 'type', found 'comptime_int'
var a: (123 + 5238094) = 0;
^
```
after:
```
:30: note: additional initializer here
var a = U{ .foo = 1213, .bar = 1123 };
~^~~~~~~~~~
:12: error: expected type 'type', found 'comptime_int'
var a: (123 + 5238094) = 0;
^~~~~~~~~~~~~~~
```
2022-07-15 16:06:16 +03:00
Andrew Kelley
04572f6e34
Sema: fix coerceResultPtr
...
It did not handle properly when the dummy operand was a comptime_int; it
was crashing in coerce because comptime_int is supposed to be
comptime-known. So when calling coerceResultPtr, we pass the actual
operand, not a dummy operand, which means it will have the proper
comptime value when necessary.
2022-07-14 18:11:46 -07:00
Andrew Kelley
667ad9250f
Sema: fix coerce_result_ptr in case of inferred result type
...
Previously, the logic for analyzing coerce_result_ptr would generate
invalid bitcast instructions which did not include coercion logic, such
as optional wrapping, resulting in miscompilations.
Now, the logic of resolve_inferred_alloc goes back over all the
placeholders inserted by coerce_result_ptr, and replaces them with logic
doing the proper coercions.
Closes #12045
2022-07-14 16:48:44 -07:00
Andrew Kelley
92bc3cbe27
stage2: fix comptime bitcast involving f80
...
* Sema: implement comptime bitcast of f80 with integer-like types
bitwise rather than taking a round trip through memory layout.
* Type: introduce `isAbiInt`.
* Value: comptime memory write of f80 writes 0 bytes for padding
instead of leaving the memory uninitialized.
* Value: floatReadFromMemory has a more general implementation, checking
the endianness rather than checking for specific architectures.
This fixes behavior test failures occurring on MIPS.
2022-07-13 13:14:37 -07:00
Andrew Kelley
4a28c1d5c3
stage2: lower each struct field type, align, init separately
...
Previously, struct types, alignment values, and initialization
expressions were all lowered into the same ZIR body, which caused false
positive "depends on itself" errors when the initialization expression
depended on the size of the struct.
This also uses ResultLoc.coerced_ty for struct field alignment and
initialization values. The resulting ZIR encoding ends up being roughly
the same, neither smaller nor larger than previously.
Closes #12029
2022-07-13 02:38:13 -04:00
Andrew Kelley
56f2e5c5bc
Sema: fix double-free on compile errors
...
when instantiating a generic function and an error occurs in the
function prototype.
2022-07-12 18:38:11 -07:00
Andrew Kelley
7d2e142679
Merge pull request #12044 from Vexu/stage2-compile-errors
...
Sema: add detailed error notes to `coerceInMemoryAllowed`
2022-07-11 20:45:27 -04:00
Veikka Tuominen
122c76a167
Sema: allow void as an extern union field & fix invalid extern unions
2022-07-11 20:30:16 +03:00
Veikka Tuominen
d00da05ecb
Sema: validate extern types
2022-07-11 18:47:29 +03:00
Veikka Tuominen
3ceb27c840
Sema: better explanation why opaque types require comptime
2022-07-11 18:47:29 +03:00
Veikka Tuominen
20d4f7213d
Sema: add notes about function return type
2022-07-11 17:55:19 +03:00
Veikka Tuominen
c9e1360cdb
Sema: add "cannot convert to payload type" error notes
2022-07-11 14:17:22 +03:00
Veikka Tuominen
0370006c1f
Sema: only add note about int mismatch if not coercible
...
`unsigned 64-bit int cannot represent all possible unsigned 63-bit values`
is nonsensical.
2022-07-11 11:59:26 +03:00
Veikka Tuominen
34fe2b4f4b
Sema: prefer original error message in coerce
2022-07-10 23:47:56 +03:00
Veikka Tuominen
b9f01bc394
Sema: add detailed error notes to coerceInMemoryAllowed
2022-07-10 23:15:17 +03:00
Veikka Tuominen
5b36b0ed0c
Sema: use tupleFieldIndex
2022-07-09 14:41:47 +03:00
Cody Tapscott
c830606bbe
stage2: Support @fieldParentPtr for tuples and anon structs
2022-07-08 19:52:23 -07:00
Cody Tapscott
51a8f52e6c
stage2: Support @offsetOf for tuples and anon structs
2022-07-08 19:51:35 -07:00
Cody Tapscott
2fff25fd22
stage2: Support initializing anonymous struct type
...
This commit adds support for initializing `.anon_struct` types. There
is also some follow-up work to do for both tuples and structs regarding
comptime fields, so this also adds some tests to keep track of that
work.
2022-07-08 19:50:28 -07:00
VÖRÖSKŐI András
75c33ba85e
Sema: add a note about @setEvalBranchQuota() when branch quota is exceeded
...
closes #11996
2022-07-08 02:13:33 +03:00
Veikka Tuominen
5007f727e5
stage2: move C pointer allowzero error to AstGen
2022-07-07 10:50:06 +03:00
Veikka Tuominen
b5ac2b4330
Sema: improve array source location
2022-07-07 10:50:06 +03:00
Veikka Tuominen
27ee414159
Sema: improve slice source locations
2022-07-07 10:50:06 +03:00
Veikka Tuominen
2ca752ea1a
Module: add .node_offset_un_op
2022-07-07 10:50:06 +03:00
Veikka Tuominen
89cef9f5f7
stage2: make line field of @src runtime known
2022-07-07 10:50:06 +03:00
Veikka Tuominen
226994cd7e
Sema: misc error message fixes
2022-07-07 10:50:06 +03:00
Veikka Tuominen
c07c2d68c7
Sema: more runtime indexing comptime value checks
2022-07-07 10:50:06 +03:00
Veikka Tuominen
1569b9c165
Sema: validate pointer types
2022-07-07 10:50:05 +03:00
Veikka Tuominen
299836dbd9
Sema: panic at comptime + misc error message improvements
2022-07-07 10:50:05 +03:00
Veikka Tuominen
252388eb28
AstGen: move error_to_int, int_to_error and select to extended
2022-07-07 10:45:45 +03:00
Riccardo Binetti
0101a5f75e
Sema: accept thumb and thumbeb with ARM calling conventions
...
Commit 3014a0d5f1 added calling convention
validation, but left out thumb and thumbeb from the archs that can use the
ARM-specific calling conventions. This plus
a8a7f15106 made compilation fail for thumb
targets.
2022-07-06 21:02:30 -04:00
Andrew Kelley
f3069f51aa
Sema: fix type resolution during generic function instantiation
...
Found when trying to compile the std lib tests for x86_64-macos.
2022-07-06 17:00:17 -07:00
Cody Tapscott
86570b3e2c
stage2: Fix corrupted Type when de-referencing field pointer
2022-07-05 15:02:13 -04:00
Andrew Kelley
9ecc47cd7c
Sema: fix intFitsInType implementation
...
The function did not handle comptime_int in the case of lazy_align or
lazy_size.
2022-07-04 16:52:34 -07:00
Andrew Kelley
eba8892b84
Sema: resolve lazy value before hashing it for generic fn
2022-07-04 16:44:41 -07:00
Veikka Tuominen
2029601cb2
AstGen: use elem_{ptr,val}_node for array access syntax
2022-07-01 10:22:26 +03:00
Veikka Tuominen
a6bf8c2593
Sema: add more validation to zirFieldParentPtr
2022-07-01 10:22:25 +03:00
Veikka Tuominen
e6ebf56dd6
Sema: validate @intToEnum int operand type
2022-07-01 10:22:25 +03:00
Veikka Tuominen
ae7b32eb62
Sema: validate deref operator type and value
2022-07-01 10:22:25 +03:00
Veikka Tuominen
3c73f71177
Sema: prefer func.onwer_decl for compilelog src
2022-07-01 10:22:25 +03:00
Veikka Tuominen
3014a0d5f1
Sema: validate callconv
2022-07-01 10:22:25 +03:00
Veikka Tuominen
6d24c40b6e
Sema: improve bitcast to enum error
2022-07-01 09:29:13 +03:00
Andrew Kelley
1951051e3d
Merge pull request #11942 from Vexu/stage2-compile-errors
...
Move passing stage1 compile error tests to stage2
2022-06-30 18:39:46 -04:00
Veikka Tuominen
90ae37cc00
tests: move compile errors not planned for stage2
2022-06-30 09:57:38 +02:00
Veikka Tuominen
cc3336c784
Sema: add source location to coerce result ptr, fix negation error
2022-06-30 09:57:38 +02:00
Veikka Tuominen
979910dc38
Sema: validate shift amounts and switch ranges
2022-06-30 09:57:38 +02:00
Veikka Tuominen
6cadac18b8
Sema: improve auto generated union enum name
2022-06-30 09:57:38 +02:00