Hi,

I think that  NULL pointer checks should be added for all pointers
must_raw, may_raw etc, not only for the *_no_source ones. 

This will make the function more robust and easier to maintain.
Indeed in the current code only the *_no_source pointers may be NULL, but
this may change in the future so you don't want to base the correctness of
the code on this assumption.

Mircea

----- Original Message -----
> From: "Roman Gareev" <gareevro...@gmail.com>
> To: gcc-patches@gcc.gnu.org
> Cc: "Tobias Grosser" <tob...@grosser.es>, "mircea namolaru" 
> <mircea.namol...@inria.fr>
> Sent: Monday, March 10, 2014 5:39:47 PM
> Subject: Fix PR59586
> 
> This patch fixes PR59586.
> The segfault is caused by NULL arguments passed to compute_deps by
> loop_level_carries_dependences.
> This causes an assignment of NULL values to the no_source parameters
> of compute_deps.
> They are passed to subtract_commutative_associative_deps and dereferenced.
> 
> However, this NULL arguments are appropriate for the algorithm used
> in loop_level_carries_dependences. It uses compute_deps
> for finding RAW, WAR and WAW dependences of all basic blocks
> in the body of the given loop. Subsequently, it tries to
> determine presence of these dependences at the given level.
> Therefore it maps the relation of the dependences to the relation
> of the corresponding time-stamps and intersects the result with
> the relation in which all the inputs before the DEPTH occur at the
> same time as the output, and the input at the DEPTH occurs before output.
> If the intersection is not empty, some dependences are carried
> by the DEPTH we currently check and the loop is consequently not parallel.
> 
> This patch tries to avoid the problem by adding NULL checking of the
> no_source statements to
> subtract_commutative_associative_deps.
> 
> Tested x86_64-unknown-linux-gnu, applying to 4.8.3 and trunk.
> 

Reply via email to