> Where was the null condition created in the first place?
The reason it's happening is following. Before introduction of
define_subst, function apply_iterators had the following loop:
      condition = NULL;
      FOR_EACH_VEC_ELT (iterator_uses, i, iuse)
        {
          v = iuse->iterator->current_value;
          iuse->iterator->group->apply_iterator (iuse->ptr, v->number);
          condition = join_c_conditions (condition, v->string);
        }
      apply_attribute_uses ();
      x = copy_rtx_for_iterators (original);
      add_condition_to_rtx (x, condition);

This loop always iterated at least once, so 'condition' always became
not-null (though, it could become empty-string ""). So, function
add_condition_to_rtx always had not-null string in the arguments.

With subst-iterators this loop is looking like this:
      condition = NULL;
      FOR_EACH_VEC_ELT (iterator_uses, i, iuse)
        {
          if (iuse->iterator->group == &substs)
            continue;
          v = iuse->iterator->current_value;
          iuse->iterator->group->apply_iterator (iuse->ptr, v->number);
          condition = join_c_conditions (condition, v->string);
        }
So, it's possible that join_c_condition wouldn't be called at all, and
'condition' will remain NULL. Then it goes to add_condition_to_rtx and
we get the fail we've seen.

There is no mistake in such behaviour, but now we should be aware of
possible NULL-string. It should be handled properly, and I see two
places where we could do that - in join_c_conditions or in add_c_tests
and maybe_eval_c_test.

-- 
---
Best regards,
Michael V. Zolotukhin,
Software Engineer
Intel Corporation.

Reply via email to