[PATCH] Isolate erroneous paths optimization -- preserve *0.
Jeff Law
law@redhat.com
Tue Nov 12 18:17:00 GMT 2013
On 11/12/13 10:14, Marc Glisse wrote:
> On Tue, 12 Nov 2013, Jeff Law wrote:
>
>> Here's a patch which arranges to leave a null pointer dereferece in
>> the IL. For a memory load through a null pointer, we just leave the
>> statement as-is since the LHS is going to be a throw-away SSA_NAME.
>> For a store through a null pointer, we try to simplify the RHS when
>> it's trivially easy to do so (when the RHS is an integral type). This
>> allows DCE to sometimes do a better job if the RHS is something that
>> was computed on the isolated path. This could be easily extended to
>> floating types, vectors and structures if someone is interested. We
>> issue the builtin_trap after the null dereference.
>
> You didn't like Jakub's comment about __builtin_unreachable?
No, it's certainly not appropriate for this optimization. The problem
with using builtin_unreachable is if you do reach that point, you fall
into an unrelated blob of code in the executable. That is a huge
security issue.
>
>> - /* Now delete all remaining statements in this block. */
>> + If the dereference is a load, then there's nothing to do as the
>> + LHS will be a throw-away SSA_NAME and the LHS is the NULL
>> dereference.
>
> I assume the second LHS should be RHS. Don't you want to mark it somehow
> so the next DCE doesn't remove it?
I'll fix the comment. Good point about DCE possibly removing the code.
I'll have to take a look at that.
>
> For PR59083, signals as yet another control flow mechanism are a pain...
Yup. The ability to catch the null dereference in a signal handler is
the primary motivation behind keeping the dereference in the IL.
jeff
More information about the Gcc-patches
mailing list