ToT build error with ToT GCC on Aarch64
Carlos O'Donell
carlos@redhat.com
Tue Jul 24 19:21:00 GMT 2018
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;
>
More information about the Libc-alpha
mailing list