Karl Rehm via llvm-dev
2020-Jan-29 07:40 UTC
[llvm-dev] Question about ObjectSizeOffsetVisitor::visitGlobalVariable
In this function (used to check the size of a global) there is an initial check for whether the initializer to this function is "definitive." My question is: why do we need this? How does the object's size change if a global's initializer is defined at link time? Thanks, Karl -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200129/82eff886/attachment-0001.html>
George Burgess IV via llvm-dev
2020-Jan-30 01:13 UTC
[llvm-dev] Question about ObjectSizeOffsetVisitor::visitGlobalVariable
Looks like the commit that added that was https://github.com/llvm/llvm-project/commit/16e42128c24f5df8a61cfd2e6cdf3bd3966db0c5 . A reduced example might look something like this: https://godbolt.org/z/r4G_g- At the C source level, static object size detection has to be similarly conservative in the face of 'variable-length' structs like `struct my_string { size_t size; char data[0]; };`, though I don't know how relevant that is here. On Tue, Jan 28, 2020 at 11:41 PM Karl Rehm via llvm-dev < llvm-dev at lists.llvm.org> wrote:> In this function (used to check the size of a global) there is an initial > check for whether the initializer to this function is "definitive." My > question is: why do we need this? How does the object's size change if a > global's initializer is defined at link time? > > Thanks, > Karl > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200129/c4f21ffd/attachment.html>
Karl Rehm via llvm-dev
2020-Jan-30 01:28 UTC
[llvm-dev] Question about ObjectSizeOffsetVisitor::visitGlobalVariable
Interesting, so I guess we can check for whether it's an array type and adjust accordingly instead? Blocking *all* global variables without definitive initializers feels a bit much to me, especially if they have primitive types (i.e. integers) that don't have the potential to be screwed around with like this. On Wed, Jan 29, 2020 at 8:14 PM George Burgess IV < george.burgess.iv at gmail.com> wrote:> Looks like the commit that added that was > https://github.com/llvm/llvm-project/commit/16e42128c24f5df8a61cfd2e6cdf3bd3966db0c5 > . A reduced example might look something like this: > https://godbolt.org/z/r4G_g- > > At the C source level, static object size detection has to be similarly > conservative in the face of 'variable-length' structs like `struct > my_string { size_t size; char data[0]; };`, though I don't know how > relevant that is here. > > On Tue, Jan 28, 2020 at 11:41 PM Karl Rehm via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> In this function (used to check the size of a global) there is an initial >> check for whether the initializer to this function is "definitive." My >> question is: why do we need this? How does the object's size change if a >> global's initializer is defined at link time? >> >> Thanks, >> Karl >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200129/93082068/attachment.html>
Reasonably Related Threads
- Question about ObjectSizeOffsetVisitor::visitGlobalVariable
- Removing a block of text within a string
- Questions about jump threading optimization and what we can do
- Questions about jump threading optimization and what we can do
- Questions about jump threading optimization and what we can do