On Thu, Nov 13, 2014 at 6:32 AM, Richard Biener
<richard.guent...@gmail.com> wrote:
> On Thu, Nov 13, 2014 at 3:32 PM, Richard Biener
> <richard.guent...@gmail.com> wrote:
>> On Thu, Nov 13, 2014 at 3:20 PM, Teresa Johnson <tejohn...@google.com> wrote:
>>> Here is the new patch. Bootstrapped and tested on
>>> x86_64-unknown-linux-gnu. OK for trunk?
>>
>> Ok for trunk and branches.
>
> Err - please fix the changelog entry wording to "A clobber does
> not zero inintiaize"

Thanks for catching that - copied from the original patch.

Will commit to trunk now then to gcc-4_9 after regression testing with
the branch.

Thanks,
Teresa

>
>> Thanks,
>> Richard.
>>
>>> Thanks,
>>> Teresa
>>>
>>> 2014-11-13    <tejohn...@google.com>
>>>
>>> gcc:
>>>         PR tree-optimization/63841
>>>         * tree.c (initializer_zerop): A constructor with no elements
>>>         does not zero initialize.
>>>
>>> gcc/testsuite:
>>>         PR tree-optimization/63841
>>>         * g++.dg/tree-ssa/pr63841.C: New test.
>>>
>>> Index: tree.c
>>> ===================================================================
>>> --- tree.c      (revision 217190)
>>> +++ tree.c      (working copy)
>>> @@ -10330,6 +10330,8 @@ initializer_zerop (const_tree init)
>>>        {
>>>         unsigned HOST_WIDE_INT idx;
>>>
>>> +        if (TREE_CLOBBER_P (init))
>>> +          return false;
>>>         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
>>>           if (!initializer_zerop (elt))
>>>             return false;
>>> 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,38 @@
>>> +/* { dg-do run } */
>>> +/* { dg-options "-O2" } */
>>> +
>>> +#include <cstdio>
>>> +#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();
>>> +  printf("expected: %hx\n", *(short*)good.c_str());
>>> +
>>> +  std::string bad = comp_test_write();
>>> +  printf("got: %hx\n", *(short*)bad.c_str());
>>> +
>>> +  return good != bad;
>>> +}
>>>
>>> On Wed, Nov 12, 2014 at 9:40 PM, Andrew Pinski <pins...@gmail.com> wrote:
>>>> On Wed, Nov 12, 2014 at 9:38 PM, Teresa Johnson <tejohn...@google.com> 
>>>> wrote:
>>>>> On Wed, Nov 12, 2014 at 9:30 PM, Andrew Pinski <pins...@gmail.com> wrote:
>>>>>> On Wed, Nov 12, 2014 at 9:25 PM, Teresa Johnson <tejohn...@google.com> 
>>>>>> wrote:
>>>>>>> Added testcase. Here is the new patch:
>>>>>>>
>>>>>>> 2014-11-12    <tejohn...@google.com>
>>>>>>>
>>>>>>> gcc:
>>>>>>>         PR tree-optimization/63841
>>>>>>>         * tree.c (initializer_zerop): A constructor with no elements
>>>>>>>         does not zero initialize.
>>>>>>
>>>>>> Actually an empty constructor does zero initialize.  A clobber does not.
>>>>>
>>>>> Ok, thanks, I wasn't sure.
>>>>>
>>>>>>
>>>>>> The check you want is TREE_CLOBBER_P instead.
>>>>>
>>>>> So in initializer_zerop, a constructor that is a TREE_CLOBBER_P would
>>>>> return false, right? I will make that change and retest.
>>>>
>>>> Yes that is correct.  Note TREE_CLOBBER_P already checks if it is an
>>>> constructor.
>>>>
>>>> Thanks,
>>>> Andrew
>>>>
>>>>>
>>>>> Thanks,
>>>>> Teresa
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Andrew
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> gcc/testsuite:
>>>>>>>         * g++.dg/tree-ssa/pr63841.C: New test.
>>>>>>>
>>>>>>> Index: tree.c
>>>>>>> ===================================================================
>>>>>>> --- tree.c      (revision 217190)
>>>>>>> +++ tree.c      (working copy)
>>>>>>> @@ -10330,6 +10330,8 @@ initializer_zerop (const_tree init)
>>>>>>>        {
>>>>>>>         unsigned HOST_WIDE_INT idx;
>>>>>>>
>>>>>>> +        if (!CONSTRUCTOR_NELTS (init))
>>>>>>> +          return false;
>>>>>>>         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
>>>>>>>           if (!initializer_zerop (elt))
>>>>>>>             return false;
>>>>>>> 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,38 @@
>>>>>>> +/* { dg-do run } */
>>>>>>> +/* { dg-options "-O2" } */
>>>>>>> +
>>>>>>> +#include <cstdio>
>>>>>>> +#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();
>>>>>>> +  printf("expected: %hx\n", *(short*)good.c_str());
>>>>>>> +
>>>>>>> +  std::string bad = comp_test_write();
>>>>>>> +  printf("got: %hx\n", *(short*)bad.c_str());
>>>>>>> +
>>>>>>> +  return good != bad;
>>>>>>> +}
>>>>>>>
>>>>>>> On Wed, Nov 12, 2014 at 2:17 PM, Xinliang David Li <davi...@google.com> 
>>>>>>> wrote:
>>>>>>>> missing test case?
>>>>>>>>
>>>>>>>> David
>>>>>>>>
>>>>>>>> On Wed, Nov 12, 2014 at 2:13 PM, Teresa Johnson <tejohn...@google.com> 
>>>>>>>> wrote:
>>>>>>>>> This patch fixes an issue where tree-strlen was incorrectly removing a
>>>>>>>>> store of 0 into a string because it thought a prior CLOBBER (which is
>>>>>>>>> an empty constructor with no elements) was zero-initializing the
>>>>>>>>> string.
>>>>>>>>>
>>>>>>>>> Bootstrapped and tested on x86_64-unknown-linux-gnu. OK for trunk?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Teresa
>>>>>>>>>
>>>>>>>>> 2014-11-12    <tejohn...@google.com>
>>>>>>>>>
>>>>>>>>>         PR tree-optimization/63841
>>>>>>>>>         * tree.c (initializer_zerop): A constructor with no elements
>>>>>>>>>         does not zero initialize.
>>>>>>>>>
>>>>>>>>> Index: tree.c
>>>>>>>>> ===================================================================
>>>>>>>>> --- tree.c      (revision 217190)
>>>>>>>>> +++ tree.c      (working copy)
>>>>>>>>> @@ -10330,6 +10330,8 @@ initializer_zerop (const_tree init)
>>>>>>>>>        {
>>>>>>>>>         unsigned HOST_WIDE_INT idx;
>>>>>>>>>
>>>>>>>>> +        if (!CONSTRUCTOR_NELTS (init))
>>>>>>>>> +          return false;
>>>>>>>>>         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), idx, elt)
>>>>>>>>>           if (!initializer_zerop (elt))
>>>>>>>>>             return false;
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Teresa Johnson | Software Engineer | tejohn...@google.com | 
>>>>>>>>> 408-460-2413
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413
>>>
>>>
>>>
>>> --
>>> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413



-- 
Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413

Reply via email to