| Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
To be honest, I can't be bothered to figure out which commits these
changes should be in.
|
|
This implements the accepted proposal #18816. Namespace-owning types
(struct, enum, union, opaque) are no longer unique whenever analysed;
instead, their identity is determined based on their AST node and the
set of values they capture.
Reified types (`@Type`) are deduplicated based on the structure of the
type created. For instance, if two structs are created by the same
reification with identical fields, layout, etc, they will be the same
type.
This commit does not produce a working compiler; the next commit, adding
captures for decl references, is necessary. It felt appropriate to split
this up.
Resolves: #18816
|
|
Namespace types (`struct`, `enum`, `union`, `opaque`) do not use
structural equality - equivalence is based on their Decl index (and soon
will change to AST node + captures). However, we previously stored all
other information in the corresponding `InternPool.Key` anyway. For
logical consistency, it makes sense to have the key only be the true key
(that is, the Decl index) and to load all other data through another
function. This introduces those functions, by the name of
`loadStructType` etc. It's a big diff, but most of it is no-brainer
changes.
In future, it might be nice to eliminate a bunch of the loaded state in
favour of accessor functions on the `LoadedXyzType` types (like how we
have `LoadedUnionType.size()`), but that can be explored at a later
date.
|
|
LLVM: Fail to emit if LLVM encounters broken debug info
|
|
This prevents the possibility of not emitting a `.dbg_inline_end`
instruction and reduces the allocation requirements of the backends.
Closes #19093
|
|
|
|
Since we now elide more ZIR blocks in AstGen, care must be taken in
codegen to introduce lexical scopes for every body, not just `block`s.
Also, elide a few unnecessary AIR blocks in Sema.
|
|
|
|
|
|
|
|
Part of an effort to ship more of the compiler in source form.
|
|
This commit eliminates the `dbg_block_{begin,end}` instructions from
both ZIR and AIR. Instead, lexical scoping of `dbg_var_{ptr,val}`
instructions is decided based on the AIR block they exist within. This
is a much more robust system, and also results in a huge drop in ZIR
bytes - around 7% for Sema.zig.
This required some enhancements to Sema to prevent elision of blocks
when they are required for debug variable scoping. This can be observed
by looking at the AIR for the following simple test program with and
without `-fstrip`:
```zig
export fn f() void {
{
var a: u32 = 0;
_ = &a;
}
{
var a: u32 = 0;
_ = &a;
}
}
```
When `-fstrip` is passed, no AIR blocks are generated. When `-fno-strip`
is passed, the ZIR blocks are lowered to true AIR blocks to give correct
lexical scoping to the debug vars.
The changes here incidentally reolve #19060. A corresponding behavior
test has been added.
Resolves: #19060
|
|
llvm: implement per-module stripping
|
|
x86_64: pass more tests
|
|
* make test names contain the fully qualified name
* make test filters match the fully qualified name
* allow multiple test filters, where a test is skipped if it does not
match any of the specified filters
|
|
This reduces the max memory usage.
|
|
This avoids llvm module verification errors when the strip option
is different across modules.
|
|
Rework LLVM debug locations to not emit them twice
|
|
|
|
These used to be lowered elementwise in air, and now are a single air
instruction that can be lowered elementwise in the backend if necessary.
|
|
Debug locations are no longer emitted twice every time
|
|
Fixes test-stack-traces on windows.
|
|
|
|
|
|
Hello world now verifies when not stripped.
|
|
|
|
|
|
|
|
This fixes a problem where empty strings where not emitted as null.
This should also emit a smaller stringtab as all metadata strings were
emitted in both the strtab and in the strings block inside the metadata
block.
|
|
|
|
|
|
|
|
|
|
The LLVM bitcode requires all type references in
structs to be to earlier defined types.
We make sure types are ordered in the builder
itself in order to avoid having to iterate the
types multiple times and changing the values
of type indicies.
|
|
Closes #18916
|
|
This should avoid the random pointer invalidation crashes.
Closes #18954
|
|
This change allows recursing over types that are currently being
resolved fully with a second pass of forward resolution.
Closes #16414
|
|
|
|
This commit only does the file rename to be friendlier to version
control conflicts.
|
|
|
|
This change eliminates some problematic recursive logic in InternPool,
and provides a safer API.
|
|
Closes #13178
|
|
Fix some generic{Reader,Writer} related issues
|
|
Closes #18723
|
|
Closes #17996
|
|
|
|
Closes #18550
|