This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR/63841: empty constructor doesn't zero-initialize
- From: Teresa Johnson <tejohnson at google dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Andrew Pinski <pinskia at gmail dot com>, Xinliang David Li <davidxl at google dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 13 Nov 2014 13:58:13 -0800
- Subject: Re: [PATCH] Fix PR/63841: empty constructor doesn't zero-initialize
- Authentication-results: sourceware.org; auth=none
- References: <CAAe5K+Ve=h0BJ_VTwGsugzur4jrxMjZxrqqQttTr-FSf9sGGgw at mail dot gmail dot com> <CA+=Sn1m+QKApfX051u1_SW5KNtQ0YhFWa-D94wO6hqEY93CE2A at mail dot gmail dot com> <CAAe5K+U9C1_WUE=OA-1goTvUFSTOTeHoAyzzcfMyoDjDywEzPw at mail dot gmail dot com> <20141113143617 dot GR5026 at tucnak dot redhat dot com> <CAAe5K+WJnQ+QMT6xH9co=MpjCTEoW-VkR0fBn5wdnw00UXSpuA at mail dot gmail dot com> <20141113151258 dot GT5026 at tucnak dot redhat dot com> <CAAe5K+UwWtbVP57Z5Qm052gxTv8S4y_SnzciDddLoMDJmnSfHQ at mail dot gmail dot com> <CAAe5K+XYPbX2SextpQvkShsa8ms-4DkzEVT8S38tVo9T2T9BUQ at mail dot gmail dot com> <20141113205547 dot GZ5026 at tucnak dot redhat dot com> <CAAe5K+US+=C6QmhA5A_Jfd_e0-q=ZTxAqk=kXQVNJ7RJY6XByA at mail dot gmail dot com> <20141113214514 dot GA5026 at tucnak dot redhat dot com>
On Thu, Nov 13, 2014 at 1:45 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Thu, Nov 13, 2014 at 01:33:07PM -0800, Teresa Johnson wrote:
>> > Supposedly the printfs should have been removed and the #include <cstdio>
>> > isn't needed then either. No need to clutter the test output and log files.
>> > On the other side, tests should abort (); or __builtin_abort (); on failure,
>> > not just return non-zero.
>>
>> Ok, sounds good. Here is the new patch. Confirmed that the test case
>> passes with the fix, aborts without it.
>>
>> If this looks good I will also update the trunk version of the test.
>
> LGTM, thanks.
>
> Please commit also the tree-ssa-strlen.c change to the trunk, it will not
> hurt.
Ok. It is on gcc-4_9 now, will commit both to trunk as soon as
regression testing completes.
Thanks,
Teresa
>
>> 2014-11-13 Teresa Johnson <tejohnson@google.com>
>>
>> gcc:
>> PR tree-optimization/63841
>> * tree-ssa-strlen.c (strlen_optimize_stmt): Ignore clobbers.
>>
>> 2014-11-13 Teresa Johnson <tejohnson@google.com>
>>
>> gcc/testsuite:
>> PR tree-optimization/63841
>> * testsuite/g++.dg/tree-ssa/pr63841.C: New test.
>>
>> Index: tree-ssa-strlen.c
>> ===================================================================
>> --- tree-ssa-strlen.c (revision 217503)
>> +++ tree-ssa-strlen.c (working copy)
>> @@ -1856,7 +1856,7 @@ strlen_optimize_stmt (gimple_stmt_iterator *gsi)
>> break;
>> }
>> }
>> - else if (is_gimple_assign (stmt))
>> + else if (is_gimple_assign (stmt) && !gimple_clobber_p (stmt))
>> {
>> tree lhs = gimple_assign_lhs (stmt);
>>
>> Index: testsuite/g++.dg/tree-ssa/pr63841.C
>> ===================================================================
>> --- testsuite/g++.dg/tree-ssa/pr63841.C (revision 0)
>> +++ testsuite/g++.dg/tree-ssa/pr63841.C (working copy)
>> @@ -0,0 +1,35 @@
>> +/* { dg-do run } */
>> +/* { dg-options "-O2" } */
>> +
>> +#include <string>
>> +
>> +std::string __attribute__ ((noinline)) comp_test_write() {
>> + std::string data;
>> +
>> + for (int i = 0; i < 2; ++i) {
>> + char b = 1 >> (i * 8);
>> + data.append(&b, 1);
>> + }
>> +
>> + return data;
>> +}
>> +
>> +std::string __attribute__ ((noinline)) comp_test_write_good() {
>> + std::string data;
>> +
>> + char b;
>> + for (int i = 0; i < 2; ++i) {
>> + b = 1 >> (i * 8);
>> + data.append(&b, 1);
>> + }
>> +
>> + return data;
>> +}
>> +
>> +int main() {
>> + std::string good = comp_test_write_good();
>> + std::string bad = comp_test_write();
>> +
>> + if (good != bad)
>> + __builtin_abort ();
>> +}
>
> Jakub
--
Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413