Skip to content
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
bridges_compiled=4
bridges_compiled=5
descr_set_absent=0
descr_set_ambiguous=0
descr_set_stale_absent=0
Expand All @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=814
guard_failures=1150
internal_compile_panics=0
loops_aborted=0
loops_compiled=7
loops_compiled=9
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
bridges_compiled=4
bridges_compiled=5
descr_set_absent=0
descr_set_ambiguous=0
descr_set_stale_absent=0
Expand All @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=814
guard_failures=1150
internal_compile_panics=0
loops_aborted=0
loops_compiled=7
loops_compiled=9
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
bridges_compiled=4
bridges_compiled=5
descr_set_absent=0
descr_set_ambiguous=0
descr_set_stale_absent=0
Expand All @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=814
guard_failures=1150
internal_compile_panics=0
loops_aborted=0
loops_compiled=7
loops_compiled=9
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_contains_frozenset.cranelift.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_contains_frozenset.dynasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
8 changes: 4 additions & 4 deletions pyre/bench/synth/set_contains_frozenset.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# No `max-pypy-ratio`: this fixture compiles no loop -- its jitstats record
# `loops_compiled=0` -- so a pypy ratio compares two interpreters' startup
# rather than any generated code, and reads whatever the host's process
# spawn cost happens to be that run. The jitstats baselines gate it.
# No `max-pypy-ratio`: the only loop this fixture compiles is its warmup, so a
# pypy ratio reads mostly the two interpreters' startup rather than the set
# operations the fixture names, and picks up whatever the host's process spawn
# cost happens to be that run. The jitstats baselines gate it.
# A set is unhashable, but when one is used to look an element up it stands
# in for the frozenset holding the same elements, so `in`, discard and remove
# find it. The element is hashed on the way, so a raising __hash__ propagates
Expand Down
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_contains_frozenset.wasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_intersection_operand.cranelift.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_intersection_operand.dynasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
8 changes: 4 additions & 4 deletions pyre/bench/synth/set_intersection_operand.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# No `max-pypy-ratio`: this fixture compiles no loop -- its jitstats record
# `loops_compiled=0` -- so a pypy ratio compares two interpreters' startup
# rather than any generated code, and reads whatever the host's process
# spawn cost happens to be that run. The jitstats baselines gate it.
# No `max-pypy-ratio`: the only loop this fixture compiles is its warmup, so a
# pypy ratio reads mostly the two interpreters' startup rather than the set
# operations the fixture names, and picks up whatever the host's process spawn
# cost happens to be that run. The jitstats baselines gate it.
# An intersection walks the shorter side and keeps that side's objects, so
# when two equal elements are distinct objects which one survives depends on
# the operand lengths. The shortest operand seeds the result, measured as
Expand Down
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_intersection_operand.wasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_update_hash_other.cranelift.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_update_hash_other.dynasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
8 changes: 4 additions & 4 deletions pyre/bench/synth/set_update_hash_other.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# No `max-pypy-ratio`: this fixture compiles no loop -- its jitstats record
# `loops_compiled=0` -- so a pypy ratio compares two interpreters' startup
# rather than any generated code, and reads whatever the host's process
# spawn cost happens to be that run. The jitstats baselines gate it.
# No `max-pypy-ratio`: the only loop this fixture compiles is its warmup, so a
# pypy ratio reads mostly the two interpreters' startup rather than the set
# operations the fixture names, and picks up whatever the host's process spawn
# cost happens to be that run. The jitstats baselines gate it.
# difference_update and intersection_update hash each element of the other
# operand as it is consumed, so an unhashable element raises and a raising
# __hash__ propagates -- including when self is empty and nothing can match.
Expand Down
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_update_hash_other.wasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_update_materialize_rhs.dynasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
8 changes: 4 additions & 4 deletions pyre/bench/synth/set_update_materialize_rhs.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# No `max-pypy-ratio`: this fixture compiles no loop -- its jitstats record
# `loops_compiled=0` -- so a pypy ratio compares two interpreters' startup
# rather than any generated code, and reads whatever the host's process
# spawn cost happens to be that run. The jitstats baselines gate it.
# No `max-pypy-ratio`: the only loop this fixture compiles is its warmup, so a
# pypy ratio reads mostly the two interpreters' startup rather than the set
# operations the fixture names, and picks up whatever the host's process spawn
# cost happens to be that run. The jitstats baselines gate it.
# symmetric_difference_update turns a non-set operand into a set before it
# toggles anything, so the operand is hashed and deduped up front: a duplicate
# toggles once, and a later unhashable element leaves self untouched. update
Expand Down
4 changes: 2 additions & 2 deletions pyre/bench/synth/set_update_materialize_rhs.wasm.jitstats
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fbw_rolled_back_with_effects=0
fbw_store_journal_rollback_failed=0
field_pos_attached_misplaced=0
field_pos_spec_misplaced=0
guard_failures=0
guard_failures=1
internal_compile_panics=0
loops_aborted=0
loops_compiled=0
loops_compiled=1
11 changes: 10 additions & 1 deletion pyre/check.py
Original file line number Diff line number Diff line change
Expand Up @@ -1441,11 +1441,20 @@ def _header_directive(path, prefix):


def _positive_float(raw, line, path, kind):
"""A directive value that has to parse as a number above zero."""
"""A directive value that has to parse as a finite number above zero.

`float()` accepts `inf` and `nan`, and neither is a threshold: a reading
compares below `inf` forever, and every comparison against `nan` is False,
so either one disarms the gate it configures while still looking like a
number in the header. `<= 0` does not catch them — `nan <= 0` is False —
so the finiteness test is separate.
"""
try:
value = float(raw)
except ValueError as e:
raise ValueError(f"invalid {kind} in {path}: {line.strip()}") from e
if not math.isfinite(value):
raise ValueError(f"{kind} must be finite in {path}: {line.strip()}")
if value <= 0:
raise ValueError(f"{kind} must be positive in {path}")
return value
Expand Down
14 changes: 12 additions & 2 deletions pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,8 @@ pub(crate) fn recipe_parent_frame_from_recipe(
ctx: &mut TraceCtx,
recipe: &majit_metainterp::ReconstructRecipe,
root_ec: *const pyre_interpreter::PyExecutionContext,
root_ec_box: majit_ir::OpRef,
root_frame_box: majit_ir::OpRef,
) -> Option<InlineParentFrame> {
let pjc = crate::state::pyjitcode_for_jitcode_index(recipe.jitcode_index)?;
if !pjc.is_populated() || pjc.code_ptr.is_null() {
Expand All @@ -936,8 +938,14 @@ pub(crate) fn recipe_parent_frame_from_recipe(
// `pending.sym.frame` / `pending.sym.execution_context` are consumed here;
// the `argboxes_r` register seeding is for the forward drive, not the
// snapshot.
let (pending, _argboxes_r) =
crate::state::setup_reconstructed_callee_frame(ctx, recipe, root_ec, Vec::new())?;
let (pending, _argboxes_r) = crate::state::setup_reconstructed_callee_frame(
ctx,
recipe,
root_ec,
root_ec_box,
root_frame_box,
Vec::new(),
)?;
let frame_box = pending.sym.frame();
let ec_box = pending.sym.execution_context();

Expand Down Expand Up @@ -1280,6 +1288,8 @@ pub(crate) fn drive_bridge_frame_subwalk<Sym: WalkSym>(
ctx,
parent_recipe,
root_sym.concrete_execution_context(),
root_sym.execution_context(),
root_sym.frame(),
)?;
}

Expand Down
Loading
Loading