On 05/31/2013 12:01 PM, Iyer, Balaji V wrote:


-----Original Message----- From: gcc-patches-ow...@gcc.gnu.org
[mailto:gcc-patches- ow...@gcc.gnu.org] On Behalf Of Jeff Law Sent:
Friday, May 31, 2013 11:50 AM To: Iyer, Balaji V Cc:
gcc-patches@gcc.gnu.org; Steve Ellcey Subject: Re: [PATCH] pr57457

On 05/31/2013 07:54 AM, Iyer, Balaji V wrote:
Hello Everyone, This patch will fix a bug reported in PR57457.
One of the array notation
function was not checking for NULL_TREE before accessing its
fields. This patch should fix that issue. A test case is also
added.

Is this OK for trunk?

Here are the ChangeLog Entries:

gcc/c/ChangeLog 2013-05-31  Balaji V. Iyer
<balaji.v.i...@intel.com>

* c-array-notation.c (is_cilkplus_reduce_builtin): Added a check
for NULL_TREE parameter input.

gcc/testsuite/ChangeLog 2013-05-31  Balaji V. Iyer
<balaji.v.i...@intel.com>

PR c/57457 * c-c++-common/cilk-plus/AN/pr57457.c: New testcase.
So what you need to do is explain how you got into this function
with a NULL fndecl and why that's OK.

Hi Jeff, I looked into it, and there is another function call called
inform_declaration, and that does exactly what I did (i.e. check for
NULL fundecl before accessing its fields). From what I can tell,
fundecl will be NULL_TREE if a function declaration is a function
pointer.
The problematical calls are coming from convert_arguments which is a bit inconsistent in how it handles a null FUNDECL. In some places it checks it direction in convert_arguments and avoids certain actions. In other places the callee checks.

The code looks like it's screaming to be simplified. Neither flag_cilkplus nor FUNDECL change inside the main loop in convert_arguments, so the first thing I'd ponder is pulling that condition out of the loop. And after doing that we a similar condition being used to suppress warnings just after the loop. I wonder if we could have something like

if (flag_enable_cilkplus
    && fundecl
    && is_cilkplus_reduction_builtin (fundecl))
  return vec_safe_length (values);

before the loop, then eliminate the the test inside the loop and just after the loop.

That simplifies the code a bit and should fix this problem unless I'm missing something?


jeff


Reply via email to