[ELF] Initialize Symbol fields in the constructor instead of via memset#198129
Merged
MaskRay merged 1 commit intoMay 16, 2026
Merged
Conversation
`initSectionsAndLocalSyms` and `makeDefined` memset the storage to zero and then placement-new a Symbol-derived object into it. Placement new begins a new object's lifetime. The standard does not seem to guarantee the memset bytes carry into members the constructor leaves uninitialized. lld built by GCC 16 can make Valgrind report reads of Symbol::flags (via getSymSectionIndex during finalizeSections) as uses of uninitialized values (ClangBuiltLinux/linux#2162). This patch reinstates the per-field initialization that commit 7787427 ("[ELF] Avoid redundant assignment to Symbol fields. NFC") had replaced with a bulk memset.
Member
|
Thanks for the fix! Should this be applied to |
pedroMVicente
pushed a commit
to pedroMVicente/llvm-project
that referenced
this pull request
May 19, 2026
…et (llvm#198129) `initSectionsAndLocalSyms` and `makeDefined` memset the storage to zero and then placement-new a Symbol-derived object into it. Placement new begins a new object's lifetime. The standard does not seem to guarantee the memset bytes carry into members the constructor leaves uninitialized. lld built by GCC 16 can make Valgrind report reads of Symbol::flags (via getSymSectionIndex during finalizeSections) as uses of uninitialized values (ClangBuiltLinux/linux#2162). This patch reinstates the per-field initialization that commit 7787427 ("[ELF] Avoid redundant assignment to Symbol fields. NFC") had replaced with a bulk memset.
Member
|
/cherry-pick 905a88b |
Member
Error: Command failed due to missing milestone. |
Member
|
/cherry-pick 905a88b |
Member
|
/pull-request #198665 |
c-rhodes
pushed a commit
to llvmbot/llvm-project
that referenced
this pull request
May 26, 2026
…et (llvm#198129) `initSectionsAndLocalSyms` and `makeDefined` memset the storage to zero and then placement-new a Symbol-derived object into it. Placement new begins a new object's lifetime. The standard does not seem to guarantee the memset bytes carry into members the constructor leaves uninitialized. lld built by GCC 16 can make Valgrind report reads of Symbol::flags (via getSymSectionIndex during finalizeSections) as uses of uninitialized values (ClangBuiltLinux/linux#2162). This patch reinstates the per-field initialization that commit 7787427 ("[ELF] Avoid redundant assignment to Symbol fields. NFC") had replaced with a bulk memset. (cherry picked from commit 905a88b)
daunabomba
pushed a commit
to daunabomba/llvm-project
that referenced
this pull request
Jun 2, 2026
…et (llvm#198129) `initSectionsAndLocalSyms` and `makeDefined` memset the storage to zero and then placement-new a Symbol-derived object into it. Placement new begins a new object's lifetime. The standard does not seem to guarantee the memset bytes carry into members the constructor leaves uninitialized. lld built by GCC 16 can make Valgrind report reads of Symbol::flags (via getSymSectionIndex during finalizeSections) as uses of uninitialized values (ClangBuiltLinux/linux#2162). This patch reinstates the per-field initialization that commit 7787427 ("[ELF] Avoid redundant assignment to Symbol fields. NFC") had replaced with a bulk memset. (cherry picked from commit 905a88b)
nga888
added a commit
to nga888/llvm-project
that referenced
this pull request
Jun 9, 2026
On the "main" branch, Symbol no longer has the `used` member which was moved in PR llvm#190117 (commit 6a87416). Therefore, when the cherry pick from PR llvm#198129 (commit 905a88b) was merged to the "release/22.x" branch, the initialization of `used` was lost.
dyung
pushed a commit
to nga888/llvm-project
that referenced
this pull request
Jun 10, 2026
On the "main" branch, Symbol no longer has the `used` member which was moved in PR llvm#190117 (commit 6a87416). Therefore, when the cherry pick from PR llvm#198129 (commit 905a88b) was merged to the "release/22.x" branch, the initialization of `used` was lost.
daunabomba
pushed a commit
to daunabomba/llvm-project
that referenced
this pull request
Jun 17, 2026
On the "main" branch, Symbol no longer has the `used` member which was moved in PR llvm#190117 (commit 6a87416). Therefore, when the cherry pick from PR llvm#198129 (commit 905a88b) was merged to the "release/22.x" branch, the initialization of `used` was lost.
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.
initSectionsAndLocalSymsandmakeDefinedmemset the storage to zeroand then placement-new a Symbol-derived object into it. Placement new
begins a new object's lifetime. The standard does not seem to guarantee
the memset bytes carry into members the constructor leaves
uninitialized.
lld built by GCC 16 can make Valgrind report reads of Symbol::flags
(via getSymSectionIndex during finalizeSections) as uses of
uninitialized values (ClangBuiltLinux/linux#2162).
This patch reinstates the per-field initialization that commit
7787427 ("[ELF] Avoid redundant assignment to Symbol fields. NFC")
had replaced with a bulk memset.