Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compiler: implement analysis-local comptime-mutable memory #19414

Merged
merged 2 commits into from
Mar 25, 2024

Commits on Mar 25, 2024

  1. compiler: implement analysis-local comptime-mutable memory

    This commit changes how we represent comptime-mutable memory
    (`comptime var`) in the compiler in order to implement the intended
    behavior that references to such memory can only exist at comptime.
    
    It does *not* clean up the representation of mutable values, improve the
    representation of comptime-known pointers, or fix the many bugs in the
    comptime pointer access code. These will be future enhancements.
    
    Comptime memory lives for the duration of a single Sema, and is not
    permitted to escape that one analysis, either by becoming runtime-known
    or by becoming comptime-known to other analyses. These restrictions mean
    that we can represent comptime allocations not via Decl, but with state
    local to Sema - specifically, the new `Sema.comptime_allocs` field. All
    comptime-mutable allocations, as well as any comptime-known const allocs
    containing references to such memory, live in here. This allows for
    relatively fast checking of whether a value references any
    comptime-mtuable memory, since we need only traverse values up to
    pointers: pointers to Decls can never reference comptime-mutable memory,
    and pointers into `Sema.comptime_allocs` always do.
    
    This change exposed some faulty pointer access logic in `Value.zig`.
    I've fixed the important cases, but there are some TODOs I've put in
    which are definitely possible to hit with sufficiently esoteric code. I
    plan to resolve these by auditing all direct accesses to pointers (most
    of them ought to use Sema to perform the pointer access!), but for now
    this is sufficient for all realistic code and to get tests passing.
    
    This change eliminates `Zcu.tmp_hack_arena`, instead using the Sema
    arena for comptime memory mutations, which is possible since comptime
    memory is now local to the current Sema.
    
    This change should allow `Decl` to store only an `InternPool.Index`
    rather than a full-blown `ty: Type, val: Value`. This commit does not
    perform this refactor.
    mlugg committed Mar 25, 2024
    Configuration menu
    Copy the full SHA
    9c3670f View commit details
    Browse the repository at this point in the history
  2. behavior: skip newly failing test

    This test has regressed due to a bug in the self-hosted COFF linker.
    Jakub recommended disabling it for now, since the COFF linker is being
    effectively rewritten, so there is little point in fixing the bug now.
    mlugg committed Mar 25, 2024
    Configuration menu
    Copy the full SHA
    f8b8259 View commit details
    Browse the repository at this point in the history