|
|
Message-ID: <CAH8yC8n0JrkmERqgV07YeBRUCGFo4u3=RqDWyE574fLDGPfTmQ@mail.gmail.com>
Date: Fri, 26 Jun 2020 02:26:59 -0400
From: Jeffrey Walton <noloader@...il.com>
To: musl@...ts.openwall.com
Cc: Khem Raj <raj.khem@...il.com>, Daniel Santos <daniel.santos@...ox.com>
Subject: Re: [PATCH] Fix signed compare warning
On Fri, Jun 26, 2020 at 2:20 AM Daniel Santos <daniel@...t.us> wrote:
>
> ...
> >> if (at) {
> >> - if (at->tv_nsec >= 1000000000UL) return EINVAL;
> >> + if ((unsigned long)at->tv_nsec >= 1000000000UL) return EINVAL;
> >> if (__clock_gettime(clk, &to)) return EINVAL;
> >> to.tv_sec = at->tv_sec - to.tv_sec;
> >> if ((to.tv_nsec = at->tv_nsec - to.tv_nsec) < 0) {
> >>
> > may be use < 0 || >= 1000000000L and avoid the cast.
> > there is a similar issue in src/thread/pthread_cond_timedwait.c as well
> Thank you for that. I'll resubmit changing both instances.
>
> In this case, the POSIX spec requires nt_nsec to be a long (
> https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html
> ). Either way, a good optimizer should convert this into an unsigned
I believe the C language says the signed value gets promoted to an
unsigned value. I don't believe the optimizer has anything to do with
it.
That's why -1 is greater than 1 in C:
int x = -1;
unsigned int y = 1;
if (x > y)
printf("WTF???\n");
Jeff
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.