This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: V10 [PATCH] C/C++: Add -Waddress-of-packed-member


On Thu, Dec 20, 2018 at 1:28 PM Jason Merrill <jason@redhat.com> wrote:
>
> On 12/20/18 2:52 PM, H.J. Lu wrote:
> > On Thu, Dec 20, 2018 at 11:28 AM Jason Merrill <jason@redhat.com> wrote:
> >>
> >> On 12/19/18 12:35 PM, H.J. Lu wrote:
> >>> +  while (handled_component_p (rhs))
> >>> +    {
> >>> +      if (TREE_CODE (rhs) == COMPONENT_REF)
> >>> +     break;
> >>> +      rhs = TREE_OPERAND (rhs, 0);
> >>> +    }
> >>> +
> >>> +  if (TREE_CODE (rhs) != COMPONENT_REF)
> >>> +    return NULL_TREE;
> >>> +
> >>> +  object = TREE_OPERAND (rhs, 0);
> >>> +  field = TREE_OPERAND (rhs, 1);
> >>> +
> >>> +  tree context = check_alignment_of_packed_member (type, field);
> >>> +  if (context)
> >>> +    return context;
> >>
> >> All the above looks unnecessary; it will be handled by the loop below.
> >>
> >>> +  /* Check alignment of the object.  */
> >>> +  while (handled_component_p (object))
> >>> +    {
> >>> +      if (TREE_CODE (object) == COMPONENT_REF)
> >>> +     {
> >>> +       do
> >>> +         {
> >>> +           field = TREE_OPERAND (object, 1);
> >>> +           context = check_alignment_of_packed_member (type, field);
> >>> +           if (context)
> >>> +             return context;
> >>> +           object = TREE_OPERAND (object, 0);
> >>> +         }
> >>> +       while (TREE_CODE (object) == COMPONENT_REF);
> >>
> >> This inner loop also seems unnecessary.
> >>
> >>> +     }
> >>> +      else
> >>> +     object = TREE_OPERAND (object, 0);
> >>> +    }
> >>
> >> Jason
> >
> > I changed it to
> >
> > static tree
> > check_address_of_packed_member (tree type, tree rhs)
> > {
> >    if (INDIRECT_REF_P (rhs))
> >      rhs = TREE_OPERAND (rhs, 0);
> >
> >    if (TREE_CODE (rhs) == ADDR_EXPR)
> >      rhs = TREE_OPERAND (rhs, 0);
> >
> >    tree context = NULL_TREE;
> >
> >    /* Check alignment of the object.  */
> >    while (handled_component_p (rhs))
> >      {
> >        if (TREE_CODE (rhs) == COMPONENT_REF)
> >          {
> >            tree field = TREE_OPERAND (rhs, 1);
> >            context = check_alignment_of_packed_member (type, field);
> >            if (context)
> >              break;
> >          }
> >        rhs = TREE_OPERAND (rhs, 0);
> >      }
> >
> >    return context;
> > }
> >
> > Here is the updated patch.  OK for trunk?
>
> OK.
>

Checked in.  Thanks for everyone, especially Jason.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]