Skip to content

feat(gnovm): add per-type GC allocation tracking in debug builds#5437

Draft
omarsy wants to merge 2 commits intognolang:masterfrom
omarsy:feat/gc-debug-tracking
Draft

feat(gnovm): add per-type GC allocation tracking in debug builds#5437
omarsy wants to merge 2 commits intognolang:masterfrom
omarsy:feat/gc-debug-tracking

Conversation

@omarsy
Copy link
Copy Markdown
Member

@omarsy omarsy commented Apr 6, 2026

Summary

  • Adds typeName parameter to Allocate() and Recount() so every allocation site carries a type label
  • In debug builds (-tags debug), per-type byte counts are accumulated in Allocator.typeCounts
  • GarbageCollect() snapshots type counts before GC and logs any type where the recount exceeds the pre-GC allocation to stderr, making allocation tracking mismatches immediately visible
  • Zero runtime overhead in non-debug builds (map is nil, nil-check short-circuits)

Context

A recent bug showed that PrepareNewValues appended block items without AllocateBlockItems, causing GC recount > alloc.bytes. Diagnosing this required ad-hoc instrumentation. This PR adds a built-in debug facility so future mismatches are immediately visible with a debug build.

Test plan

  • Verify go build ./gnovm/... succeeds
  • Verify go test ./gnovm/pkg/gnolang/ -run "TestFiles/gas" -count=1 passes
  • Verify go test ./gnovm/pkg/gnolang/ -run "TestFiles/alloc_[0-9]" -count=1 passes

🤖 Generated with Claude Code

This PR was developed with AI assistance. See ADR gnovm/adr/prxxxx_gc_debug_tracking.md for design rationale.

Add typed allocation tracking to the GnoVM allocator behind the debug
build tag. Allocate() and Recount() now accept a typeName parameter,
and when debug is enabled, per-type byte counts are accumulated in a
map. GarbageCollect() snapshots counts before GC and logs any type
where the recount exceeds the pre-GC allocation, making allocation
tracking mismatches immediately visible.
@Gno2D2
Copy link
Copy Markdown
Collaborator

Gno2D2 commented Apr 6, 2026

🛠 PR Checks Summary

All Automated Checks passed. ✅

Manual Checks (for Reviewers):
  • IGNORE the bot requirements for this PR (force green CI check)
Read More

🤖 This bot helps streamline PR reviews by verifying automated checks and providing guidance for contributors and reviewers.

✅ Automated Checks (for Contributors):

🟢 Maintainers must be able to edit this pull request (more info)
🟢 Pending initial approval by a review team member, or review from tech-staff

☑️ Contributor Actions:
  1. Fix any issues flagged by automated checks.
  2. Follow the Contributor Checklist to ensure your PR is ready for review.
    • Add new tests, or document why they are unnecessary.
    • Provide clear examples/screenshots, if necessary.
    • Update documentation, if required.
    • Ensure no breaking changes, or include BREAKING CHANGE notes.
    • Link related issues/PRs, where applicable.
☑️ Reviewer Actions:
  1. Complete manual checks for the PR, including the guidelines and additional checks if applicable.
📚 Resources:
Debug
Automated Checks
Maintainers must be able to edit this pull request (more info)

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 The pull request was created from a fork (head branch repo: omarsy/gno)

Then

🟢 Requirement satisfied
└── 🟢 Maintainer can modify this pull request

Pending initial approval by a review team member, or review from tech-staff

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 Not (🔴 Pull request author is a member of the team: tech-staff)

Then

🟢 Requirement satisfied
└── 🟢 If
    ├── 🟢 Condition
    │   └── 🟢 Or
    │       ├── 🔴 At least one of these user(s) reviewed the pull request: [davd-gzl jefft0 notJoon omarsy MikaelVallenet] (with state "APPROVED")
    │       ├── 🔴 At least 1 user(s) of the team tech-staff reviewed pull request
    │       └── 🟢 This pull request is a draft
    └── 🟢 Then
        └── 🟢 Not (🔴 This label is applied to pull request: review/triage-pending)

Manual Checks
**IGNORE** the bot requirements for this PR (force green CI check)

If

🟢 Condition met
└── 🟢 On every pull request

Can be checked by

  • Any user with comment edit permission

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 6, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📦 🤖 gnovm Issues or PRs gnovm related

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

2 participants