On Tue, 2020-05-12 at 10:12 +0200, Jakub Jelinek wrote: > Hi! > > In the following testcase, store_expr of e.g. 97 bytes long string literal > into 1MB long array is implemented by copying the 97 bytes from .rodata > section, followed by clearing the remaining bytes. But, as the STRING_CST > has type char[1024*1024], we actually allocate whole 1MB in .rodata section > for it, even when we only use the first 97 bytes from that. > > The following patch tweaks it so that if we are going to initialize only the > small part from it, we don't emit all the zeros that we never use after it. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2020-05-12 Jakub Jelinek <ja...@redhat.com> > > PR middle-end/95052 > * expr.c (store_expr): If expr_size is constant and significantly > larger than TREE_STRING_LENGTH, set temp to just the > TREE_STRING_LENGTH portion of the STRING_CST. > > * gcc.target/i386/pr95052.c: New test. OK. Initially I had a number of concerns, but this only affects the .rodata that's used to initialize the real object. The .rodata bits have no other purpose and aren't otherwise accessable.
jeff >