Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions tests/end_to_end/test_sanitizer.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import pytest
import torch
import numpy as np

Expand All @@ -12,6 +13,7 @@
_range_to_iterator_constraint,
)
from triton_viz.core.callbacks import ForLoopCallbacks
from triton_viz.core.config import config
from z3.z3 import BoolRef


Expand Down Expand Up @@ -844,3 +846,30 @@ def test_reduce_broadcast():
assert (
len(reduce_broadcast_sanitizer.records) == 0
), f"Expected no OOB records, got {len(reduce_broadcast_sanitizer.records)}"


# ======== Fake Tensor (Virtual Memory) OOB Tests ===========

fake_tensor_sanitizer = SymbolicSanitizer(abort_on_error=True)


@triton_viz.trace(client=fake_tensor_sanitizer)
@triton.jit
def fake_tensor_oob_kernel(x_ptr, out_ptr, N: tl.constexpr):
# Intentionally read out-of-bounds: offset N is beyond the valid range [0, N)
val = tl.load(x_ptr + N)
tl.store(out_ptr, val)


def test_oob_with_fake_tensor():
fake_tensor_sanitizer.records.clear()

old_virtual_memory = config.virtual_memory
config.virtual_memory = True
try:
x = torch.randn(8)
out = torch.empty(1)
with pytest.raises(SystemExit):
fake_tensor_oob_kernel[(1,)](x, out, N=8)
finally:
config.virtual_memory = old_virtual_memory
1 change: 1 addition & 0 deletions triton_viz/core/patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ class FakeTensor:
_stride: tuple[int, ...] = ()
_is_contiguous: bool = True
_element_size: int = 1
device: str = "fake_tensor"

def data_ptr(self) -> int:
return self._data_ptr
Expand Down