https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95052

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:43a4fc095e30188392cc42299c4081297e321104

commit r11-711-g43a4fc095e30188392cc42299c4081297e321104
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Fri May 29 10:42:50 2020 +0200

    expander: Optimize store_expr from STRING_CST [PR95052]

    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.

    2020-05-29  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.

Reply via email to