On Mon, Jun 12, 2017 at 4:04 AM, Jakub Jelinek <ja...@redhat.com> wrote:
> On Fri, Jun 09, 2017 at 12:30:10PM -0700, Jason Merrill wrote:
>> On Thu, Jun 8, 2017 at 12:30 PM, Jakub Jelinek <ja...@redhat.com> wrote:
>> > cp_genericize_r now instruments INTEGER_CSTs that have REFERENCE_TYPE,
>> > so that we can diagnose binding references to NULL in some cases,
>> > see PR79572.  As the following testcase shows, there is one exception
>> > when we do not want to do that - in MEM_EXPR, the second operand
>> > is an INTEGER_CST whose value is an offset, but type is something
>> > unrelated - what should be used for aliasing purposes.  So, that
>> > is something we do not want to diagnose, and it is also invalid IL,
>> > as the second argument has to be an INTEGER_CST, not some expression
>> > with side-effects.
>> >
>> > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
>> > ok for trunk/7.x?
>> >
>> >         PR c++/80973
>> >         * cp-gimplify.c (cp_genericize_r): Don't instrument MEM_REF second
>> >         argument even if it has REFERENCE_TYPE.
>>
>> I wonder if we want to handle this in walk_tree_1, so all tree walks
>> by default avoid the second operand.
>
> MEM_REF has the second argument and there could be callbacks that really
> want to walk even that argument for whatever reason (gather all types
> mentioned in some expression, whatever).  Implying from one place where
> we do not want that what other code might want to do doesn't look right.

Well, such callbacks could walk it specifically, but...

> But, if you want, the patch could be simplified, handle the MEM_REF
> in there this way unconditionally, so:
>   else if (TREE_CODE (stmt) == MEM_REF)
>     {
>       cp_walk_tree (&TREE_OPERAND (stmt, 0), cp_genericize_r, data, NULL);
>       *walk_subtrees = 0;
>     }
> before the sanitizer block, perhaps with some comments explaining it,
> because we know cp_genericize_r doesn't need to have the callback
> on the second MEM_REF argument.

...this approach is fine, too.

Jason

Reply via email to