Skip to content

Yul Parser: reject functions in nested loops inside for-init - #17219

Open
kutluhaneth46 wants to merge 1 commit into
argotorg:developfrom
kutluhaneth46:fix/yul-function-in-nested-for-init
Open

kutluhaneth46 wants to merge 1 commit into
argotorg:developfrom
kutluhaneth46:fix/yul-function-in-nested-for-init

Conversation

@kutluhaneth46

Copy link
Copy Markdown

Description

Fixes #17211.

The Yul grammar forbids function definitions anywhere inside a for-loop init block. The parser only checked m_currentForLoopComponent == ForLoopPre, so a nested for inside init could switch the component to post/body and accept function there.

This adds m_forInitDepth, incremented while parsing an init block, and uses that for the function-definition check. Nested loops inside init keep the ban active. Top-level for post/body still allow functions.

Local checks: isoltest on yulSyntaxTests/function_defined_in_init*, plus solc --strict-assembly smoke for the issue repro.

Checklist

AI Disclosure

Assisted with drafting the patch and tests. I reviewed every change and verified locally with isoltest and solc.

Keep an init-depth counter so the grammar ban on function definitions
anywhere inside a for-loop init block still applies when a nested loop
switches the current component to post or body. Fixes argotorg#17211.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Yul parser accepts function definitions in the body of a loop that is inside a for-loop init block

1 participant