fix(codegen): store struct literal members with assignment semantics (1.0.x) - #1916
Merged
Merged
Conversation
Problem: A struct literal used as a value (array-of-struct initializers, or `x := (a := ..., b := ...)` in a body) inserted string members with the size of the value instead of the declared member size. The IR is invalid; at `-Onone` LLVM corrupts the heap while lowering it, so `plc` crashes or panics at an unrelated place instead of reporting an error. Solution: Struct literals with runtime member values are materialized in a stack temporary and every member is written through the regular assignment path, so strings follow the same size rules as any assignment. Literal-only struct literals still fold into one constant, now with strings sized to the declared member length. Refs: PRG-4799 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 05fa1c2)
Build Artifacts🐧 Linux
From workflow run 🪟 Windows
From workflow run |
volsa
approved these changes
Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Backport of #1912 to
release/1.0.x.Problem: A struct literal used as a value (array-of-struct initializers, or
x := (a := ..., b := ...)in a body) inserted string members with the size of the value instead of the declared member size. The resulting IR is invalid; at-OnoneLLVM corrupts the heap while lowering it, soplccrashes or panics at an unrelated place instead of reporting an error.Solution: Struct literals with runtime member values are now materialized in a stack temporary and every member is written through the regular assignment path, so strings follow the same size rules as any assignment. Literal-only struct literals still fold into a single constant, now with strings sized to the declared member length.
Refs: PRG-4799
🤖 Generated with Claude Code