This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: ToT build error with ToT GCC on Aarch64
- From: Carlos O'Donell <carlos at redhat dot com>
- To: Andreas Schwab <schwab at suse dot de>, Steve Ellcey <sellcey at cavium dot com>
- Cc: libc-alpha <libc-alpha at sourceware dot org>
- Date: Tue, 24 Jul 2018 15:21:34 -0400
- Subject: Re: ToT build error with ToT GCC on Aarch64
- References: <1532361092.15609.7.camel@cavium.com> <mvm8t601uoc.fsf@suse.de>
On 07/24/2018 12:10 PM, Andreas Schwab wrote:
> On Jul 23 2018, Steve Ellcey <sellcey@cavium.com> wrote:
>
>> In file included from fnmatch.c:244:
>> fnmatch_loop.c: In function ‘internal_fnwmatch’:
>> ../locale/weightwc.h:124:28: error: array subscript 1 is outside array bounds of
>> ‘wint_t[1]’ {aka ‘unsigned int[1]’} [-Werror=array-bounds]
>> if (cp[nhere - 1] > usrc[nhere -1])
>> ~~~~^~~~~~~~~~
>> In file included from fnmatch.c:244:
>> fnmatch_loop.c: In function ‘internal_fnwmatch’:
>> ../locale/weightwc.h:124:28: error: array subscript 1 is outside array bounds of
>> ‘wint_t[1]’ {aka ‘unsigned int[1]’} [-Werror=array-bounds]
>> if (cp[nhere - 1] > usrc[nhere -1])
>> ~~~~^~~~~~~~~~
>> cc1: all warnings being treated as errors
>> ../o-iterator.mk:9: recipe for target '/home/sellcey/tot/obj/glibc64/posix/fnmat
>> ch.o' failed
>
> I think this is the correct change. The cnt == len check matches what
> is done in weight.h, and is needed when nhere - 1 == len and usrc is a
> prefix of cp.
I haven't had a chance to review this and probably won't get to it until
August. If you think this is correct, then feel free to commit this for
glibc 2.28. You really only make one logical change here and we can continue
to validate it. I will have to audit all of this because I still see widechar
failures in my C.UTF-8 full code-point sorting, so something is wrong in this
code.
> Andreas.
>
https://sourceware.org/bugzilla/show_bug.cgi?id=23442
[BZ #23442]
> * locale/weightwc.h (findidx): Handle the case where usrc is a
> prefix of cp but one character too short.
> ---
> locale/weightwc.h | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/locale/weightwc.h b/locale/weightwc.h
> index 36c65b5623..7ee335dc9a 100644
> --- a/locale/weightwc.h
> +++ b/locale/weightwc.h
> @@ -109,7 +109,7 @@ findidx (const int32_t *table,
> break;
> DIAG_POP_NEEDS_COMMENT;
>
> - if (cnt < nhere - 1)
> + if (cnt < nhere - 1 || cnt == len)
> {
> cp += 2 * nhere;
> continue;
> @@ -121,14 +121,14 @@ findidx (const int32_t *table,
> same reason as described above. */
> DIAG_PUSH_NEEDS_COMMENT;
> DIAG_IGNORE_Os_NEEDS_COMMENT (7, "-Wmaybe-uninitialized");
> - if (cp[nhere - 1] > usrc[nhere -1])
> + if (cp[nhere - 1] > usrc[nhere - 1])
> {
> cp += 2 * nhere;
> continue;
> }
> DIAG_POP_NEEDS_COMMENT;
>
> - if (cp[2 * nhere - 1] < usrc[nhere -1])
> + if (cp[2 * nhere - 1] < usrc[nhere - 1])
> {
> cp += 2 * nhere;
> continue;
>