This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [COMMITTED] Bug 18589: Revert strcoll optimization using strdiff.
- From: Leonhard Holz <leonhard dot holz at web dot de>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Cc: Carlos O'Donell <carlos at redhat dot com>, "Joseph S. Myers" <joseph at codesourcery dot com>
- Date: Tue, 13 Oct 2015 07:41:27 +0200
- Subject: Re: [COMMITTED] Bug 18589: Revert strcoll optimization using strdiff.
- Authentication-results: sourceware.org; auth=none
- References: <5616D304 dot 8010909 at redhat dot com>
Sorry for coming up late with that, but the UTF-8 detection part is needed in the patch for #18441. How can I handle
this correctly?
Maybe it is also possible to fix the STRDIFF-patch.
Leonhard
Am 08.10.2015 um 22:33 schrieb Carlos O'Donell:
> The optimization introduced in commit
> f13c2a8dff2329c6692a80176262ceaaf8a6f74e, causes regressions in
> sorting for languages that have digraphs that change sort order, like
> cs_CZ which sorts ch between h and i.
>
> My analysis shows the fast-forwarding optimization in STRCOLL advances
> through a digraph while possibly stopping in the middle which results
> in a subsequent skipping of the digraph and incorrect sorting. The
> optimization is incorrect as implemented and because of that I'm
> removing it for 2.23, and I will also commit this fix for 2.22 where
> it was originally introduced.
>
> This patch reverts the optimization, introduces a new bug-strcoll2.c
> regression test that tests both cs_CZ.UTF-8 and da_DK.ISO-8859-1 and
> ensures they sort one digraph each correctly. The optimization can't be
> applied without regressing this test.
>
> Checked on x86_64, bug-strcoll2.c fails without this patch and passes
> after.
>
> Checked in for 2.23.
>
> 2015-10-08 Carlos O'Donell <carlos@redhat.com>
>
> [BZ #18589]
> * string/bug-strcoll2.c: New file.
> * locale/categories.def: Revert commit
> f13c2a8dff2329c6692a80176262ceaaf8a6f74e.
> * locale/langinfo.h: Likewise.
> * locale/localeinfo.h: Likewise.
> * locale/C-collate.c: Likewise.
> * programs/ld-collate.c (collate_output): Likewise.
> * string/strcoll_l.c (STRDIFF): Likewise.
> (STRCOLL): Likewise.
> * wcsmbs/wcscoll_l.c: Likewise.
>