Skip to content

helpers: materialize a non-lvalue instance before calling a helper (fixes upstream#41589) - #47

Open
Moonbot-Tech wants to merge 1 commit into
unleashedpascal:mainfrom
Moonbot-Tech:fix-41589
Open

helpers: materialize a non-lvalue instance before calling a helper (fixes upstream#41589)#47
Moonbot-Tech wants to merge 1 commit into
unleashedpascal:mainfrom
Moonbot-Tech:fix-41589

Conversation

@Moonbot-Tech

Copy link
Copy Markdown

Problem. FPC issue #41589: a record-valued property read is flagged nf_no_lvalue, but helper lookup passed the backing field directly as hidden Self, so a mutating helper method changed the field behind a property read while the same call on a getter worked on a copy.

Fix. In pexpr.pas move the existing materialization of constant and address nodes into materialize_helper_instance, call it from the common consumer do_member_read, and let it accept nf_no_lvalue nodes as well: a genuine lvalue keeps its address, a non-lvalue is copied into a temporary with normal cleanup.

Test. tests/webtbs/tw41589.pp: the backing field is mutated through the property read on current main (exit code 3), unchanged after the fix.

Validation. Win64 build of main (a359fc1) with the patch; 405 neighbouring tests from tests/test (inline, rtti, helpers, generics, opt) give identical results before and after.

🤖 Generated with Claude Code

…ixes upstream#41589)

A record-valued property read is flagged nf_no_lvalue, but helper
lookup passed the backing field directly as hidden Self, so a mutating
helper method changed the field behind a property read while the same
call on a getter worked on a copy.

Move the existing materialization of constant and address nodes into
materialize_helper_instance, call it from the common consumer
do_member_read, and let it accept nf_no_lvalue nodes as well: a genuine
lvalue keeps its address, a non-lvalue is copied into a temporary with
normal cleanup.

FPC issue: https://gitlab.com/freepascal.org/fpc/source/-/issues/41589

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@fibodevy fibodevy added the waiting-upstream Stock FPC fix, waits for the upstream MR to be merged or rejected label Sep 6, 2026
@Moonbot-Tech

Copy link
Copy Markdown
Author

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

Labels

waiting-upstream Stock FPC fix, waits for the upstream MR to be merged or rejected

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants