Skip to content

Keep guards that prove later code unreachable - #154

Open
ddorian wants to merge 1 commit into
facebookincubator:mainfrom
ddorian:fix-jit-unreachable-trap
Open

Keep guards that prove later code unreachable#154
ddorian wants to merge 1 commit into
facebookincubator:mainfrom
ddorian:fix-jit-unreachable-trap

Conversation

@ddorian

@ddorian ddorian commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Hit in SQLAlchemy's inspect_formatargspec under jit.auto(). Free-threaded builds only: on GIL builds emitGetLengthInt64 pins the list type with a UseType, which kept the guard alive by accident.

fixes #115

Two TO_BOOL sites reading the same local can specialize on different
types, so the JIT ends up guarding one value as both a list and None.
The second guard can only fail, its output is Bottom, and the block is
truncated to `guard; Unreachable`. Nothing consumed the list-ness, so
GuardTypeRemoval dropped the GuardType<ListExact>; the None guard then
succeeded and the compiled function hit its own ud2 (SIGILL).

guardNeeded() now recomputes the output type of a Bottom-valued use with
the relaxed operand type. If it is no longer Bottom, the guard is what
makes the code unreachable, so keep it.

Hit in SQLAlchemy's inspect_formatargspec under jit.auto(). Free-threaded
builds only: on GIL builds emitGetLengthInt64 pins the list type with a
UseType, which kept the guard alive by accident.
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Sep 3, 2026
@meta-codesync

meta-codesync Bot commented Sep 3, 2026

Copy link
Copy Markdown

@mpage has imported this pull request. If you are a Meta employee, you can view this in D118655239.

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

Labels

CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fails with sqlalchemy KeyError: "Deferred loader for attribute 'id' failed to populate correctly"

1 participant