https://sourceware.org/bugzilla/show_bug.cgi?id=30079

--- Comment #3 from Michael Matz <matz at suse dot de> ---
The guards are supposed to be moved only, not removed:

  if (!wild->filenames_sorted
      && (sec == NULL || sec->spec.sorted == none
          || sec->spec.sorted == by_none))
    {
      return wild->rightmost;
    }
  ...
  while (*tree) {
    if (wild->filenames_sorted) {
      ...
      if (i > 0) ... continue; else if (i < 0) ... continue;
      if (fa || la) {
        ...
        if (i > 0) ... continue else if (i < 0) ... continue;
      }
    }
    ...
    compare_section (sec->spec.sorted, section, (*tree)->section) < 0)
  ...

So it could only get to calling compare_section() (with sec->spec.sorted being
none or by_none) when ->filename_sorted _and_ it falls through the compare
based on these names (i.e. if filenames are equal and containing archives (if
they exist) are equal).

I probably convinced myself that this situation is not supposed to happen,
and as testcases were totally missing I didn't notice otherwise.

If you can tar up the object files I can take a look myself (I don't have 
cross compilers here, but cross binutils).  Or you add the guard
back again and see how that goes.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to