Skip to content

nilness: bound generated state machine analysis - #1728

Closed
zbarsky-openai wants to merge 1 commit into
dominikh:masterfrom
zbarsky-openai:nilness-generated-state-machines
Closed

nilness: bound generated state machine analysis#1728
zbarsky-openai wants to merge 1 commit into
dominikh:masterfrom
zbarsky-openai:nilness-generated-state-machines

Conversation

@zbarsky-openai

Copy link
Copy Markdown

Dense nilness dataflow can spend more than 263 seconds analyzing one generated go-json encoder, even after the source carries the standard generated-file marker. The observed case was the vm_color_indent nogo action in a focused downstream build; the full invocation was interrupted after 286 seconds.

For functions with more than 1,000 IR blocks, check that the function belongs to a generated file before using the existing conservative unknown-return bailout. All handwritten functions and smaller generated functions retain their current nilness analysis. The new focused regression test constructs the large generated state machine at runtime instead of committing a large fixture.

This is intentionally separate from the recover fix in #1726.

Dense nilness dataflow can spend more than 263 seconds analyzing a
single generated go-json state machine. Return the existing
conservative unknown-result facts only for generated functions with
more than 1,000 IR blocks; leave handwritten functions and smaller
generated functions unchanged.

Construct the oversized generated state machine in a focused test
instead of committing a large fixture.
@dominikh

dominikh commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Thank you, but the number of blocks is a poor proxy for CFG complexity. There is also a better way to fix this, by improving the data flow analysis runner. github.com/goccy/go-json/internal/encoder/vm_color_indent is only slow to analyze because it is pathological for the current runner. I have a local change that fixes this that I'll push once it is ready.

@dominikh dominikh closed this Aug 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants