Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

GC decodes a Number whose bits equal an 8-aligned heap address as a pointer (raw-or-tagged word ambiguity)

Open
#12,616 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
12/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
rust
Domain
compilers

Research direction

Start with the test descriptor_snapshot_public_raw_and_tagged_operands_move_during_key_conversion and the GC scanning of Any lanes and array elements, where a raw-or-tagged word can be misread as a pointer. Read the object model step 4 notes to see how overflow entries store Numbers without F64 lanes. Done means every scanned word has one unambiguous NaN-boxed encoding and a subnormal Number equal to an aligned heap address survives a copying collection unchanged. This is a design change to the GC word layout, so check with maintainers before starting.

Written by the indexing model from the issue text.

Description

The GC treats some JSValue-holding words as either raw pointers or tagged values. A Number whose bit pattern equals an 8-aligned heap address (a subnormal double) can be rewritten as a pointer when the GC moves objects.

This already applies on main to Any lanes and array elements. Object model step 4 makes it more reachable: overflow table entries have no F64 lanes, so more Numbers live in such words.

Found by the step 4 triage: descriptor_snapshot_public_raw_and_tagged_operands_move_during_key_conversion rewrote a numeric descriptor field during a copying collection. The test was ported to keep its subject (the define path); the hazard itself is not fixed.

Fix direction: every word the GC scans must have one unambiguous encoding (tagged NaN-box), not a raw-pointer-or-value guess.

Dominant language
Rust
Stars
4.9k
Forks
166
Avg merge
1h 26m
Merged PRs (30d)
912

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from PerryTS/perry

All issues in PerryTS/perry

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.