On Thu, Dec 03, 2015 at 07:26:20PM +0100, Martin Jambor wrote: > this is a fix to the last "last" ICE of the hsa branch. THe problem > turned out not to be in the gridification itself but, depending your > point of view, in the gimple and tree walking infrastructure or in > function copy_gimple_seq_and_replace_locals from tree-inline.c on > which hsa gridification relies. > > The issue is that in between gimplification and omplow pass, there can > be gimple sequences attached to OMP_CLAUSE trees that are attached to > omp statements and that are neither copied by gimple_seq_copy nor > walked by walk_gimple_seq. > > While the correct solution would probably be to extend tree and gimple > walkers to handle them, that would be a big change. I have talked > with Jakub about this yesterday on the IRC and he suggested that I > enhance the internal walkers of copy_gimple_seq_and_replace_locals > deal with this situation. Even though that leaves gimple_seq_copy, > walk_gimple_seq and other to be technically incorrect, that is what I > have done in the patch below, which fixes my last ICEs and which I > have already committed to the branch.
The point is that those gimple_seqs are there only from gimplification till omplower, and I believe nothing else for now cares about those. > @@ -5200,6 +5231,18 @@ replace_locals_stmt (gimple_stmt_iterator *gsip, > return NULL_TREE; > } > > +/* Create a copy of SEQ and remap all decls in it. */ > + > +static gimple_seq > +duplicate_remap_omp_clause_seq (gimple_seq seq, struct walk_stmt_info *wi) > +{ I would have expected an early if (seq == NULL) return NULL; either here, or in the callers (not doing anything in the common case when it is NULL). Jakub