[Patch] Don't expand targetm.stack_protect_fail if it's NULL_TREE

Jiong Wang wong.kwongyuan.tools@gmail.com
Thu Oct 20 19:47:00 GMT 2016


2016-10-20 19:50 GMT+01:00 Jeff Law <law@redhat.com>:
>
> On 10/20/2016 09:28 AM, Jiong Wang wrote:
>>
>> The current code suppose targetm.stack_protect_fail always generate
>> something.
>> But in case one target start to generate NULL_TREE, there will be ICE.
>> This
>> patch adds a simple sanity check to only call expand if it's not NULL_TREE.
>>
>> OK for trunk?
>>
>> gcc/
>> 2016-10-20  Jiong Wang  <jiong.wang@arm.com>
>>
>>         * function.c (stack_protect_epilogue): Only expands
>>         targetm.stack_protect_fail if it's not NULL_TREE.
>
> Is there some reason we don't want to issue an error here and stop compilation?  I'm not at all comfortable silently ignoring failure to generate stack protector code.
>
> jeff


Hi Jeff,

  That's because I am doing some work where I will borrow
stack-protector's analysis infrastructure but for those
stack-protector standard rtl insn, they just need to be expanded into
empty, for example stack_protect_set/test just need to be expanded
into NOTE_INSN_DELETED.   The same for targetm.stack_protect_fail ()
which I want to simply return NULL_TREE.  but it's not an error.

  This do seems affect other targets (x86, rs6000) if NULL_TREE should
never be returned for them.  Currently I can see all of them use the
either default_external_stack_protect_fail or
default_hidden_stack_protect_fail, both of which are "return
build_call_expr (..", so I should also assert the the return value of
build_call_expr?

  Thanks.



More information about the Gcc-patches mailing list