[prev in list] [next in list] [prev in thread] [next in thread]
List: musl
Subject: Re: [musl] [PATCH] Fix signed compare warning
From: Jeffrey Walton <noloader () gmail ! com>
Date: 2020-06-26 6:26:59
Message-ID: CAH8yC8n0JrkmERqgV07YeBRUCGFo4u3=RqDWyE574fLDGPfTmQ () mail ! gmail ! com
[Download RAW message or body]
On Fri, Jun 26, 2020 at 2:20 AM Daniel Santos <daniel@gsat.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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic