X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BD1A53857C5B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1596391743; bh=WRnsrJ4XvkyN/IsfpFYkNl5PtHepv/kmWyYsRuDMlfo=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=x/rgvtRpaQF6WwTgSv55lR2z7R9L/uPxIGQxwWR/l+iTH9KjhepehvDUMhh2Sj+Gh wG18qc6XmBdfu4XX4h6zlfIV8EZ/xV2ZUWpz2nCiEQYlHGhaJAQjnNsTGpuDlO6fU8 /SkWzMroemKxxUb1bxkw8r9wp7Nvvc2BmunG5Qk8= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A63773858D35 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id :disposition-notification-to:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=4upJWVzHaieoCUssAa/wJ/n83Fn520vKMW2YU/0jHhM=; b=nko+uKOoNUssVOFnvApJjkbIMdobK1l8duwiENXQIcTUCICU8TETKwbSEIEOZQzmBk kGgPev/DWHHZjO1mnIH8Uvfxc3azHuWwYjapVkZLf6V6xTNdNF7zm/8m0chivYN2E07f rOGqxOiN4+R6F251UN16Wk28z3krAyXbXuB7DIAGPyy0Z3OAN8Fv0rDUYto/91HvGU0V AaMjYl3hI3IYgnfpxMfxN4RZWiaMQ0jY3vAV0uSPYufKoFNc65A5liHtPA65TkAS0rk0 mJ07afpCRpkTGmJYs0ypUlaUGHggIciOnNMMfSxHVDWR/ixM7bmqIIT0B0Iprw6rlnyh H4NQ== X-Gm-Message-State: AOAM531yyulUlSBUNXQr2S9Kv8HcEmROp33DWxQ7EVjIJVy+9ipwhBlo ID4H9KLWCqERwef/OCdm7sly1HKQjpE= X-Google-Smtp-Source: ABdhPJyC650aFiCdAwZAfnuFPL3IWFa/B3XRRTOdU91CCyTdtxbyV0brtFj3W7Oq4giuQpHrNA8RcQ== X-Received: by 2002:adf:f0ce:: with SMTP id x14mr11446041wro.137.1596391739327; Sun, 02 Aug 2020 11:08:59 -0700 (PDT) To: cygwin AT cygwin DOT com Subject: FD_{SET,ISSET,CLR} macros from sys/select.h triggerring gcc's -Wsign-conversion warnings Message-ID: <1f188b7e-6dc4-73af-e458-013760210469@gmail.com> Date: Sun, 2 Aug 2020 20:08:57 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 Content-Language: en-US X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GB_FREEMAIL_DISPTO, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.29 List-Id: General Cygwin discussions and problem reports List-Archive: List-Post: List-Help: List-Subscribe: , From: Petr Skocik via Cygwin Reply-To: Petr Skocik Content-Type: text/plain; charset="utf-8" Sender: "Cygwin" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by delorie.com id 072I9U6J024022 Example: #include void f(int X) {     fd_set set;     FD_ZERO(&set);     FD_SET(X,&set);     FD_CLR(X+1,&set);     (void)FD_ISSET(X+2,&set); } causes fds.c:7:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]   FD_SET(X,&set);   ^~~~~~ fds.c:7:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] fds.c:7:2: warning: conversion to ‘long unsigned int’ from ‘long int’ may change the sign of the result [-Wsign-conversion] fds.c:8:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]   FD_CLR(X+1,&set);   ^~~~~~ fds.c:8:2: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] fds.c:8:2: warning: conversion to ‘long unsigned int’ from ‘long int’ may change the sign of the result [-Wsign-conversion] fds.c:9:8: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]   (void)FD_ISSET(X+2,&set);         ^~~~~~~~ fds.c:9:8: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion] fds.c:9:8: warning: conversion to ‘long unsigned int’ from ‘long int’ may change the sign of the result [-Wsign-conversion] on gcc with -Wconversion -Wsign-conversion. The problem is caused by the following macros:     #  define    NFDBITS    (sizeof (fd_mask) * 8)    /* bits per mask */     #  define    FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))     #  define    FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))     #  define    FD_ISSET(n, p)    ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) int-casting the sizeof and using 1UL instead of 1L fixes the problem: #include #if __CYGWIN__     //current defs #  define    NFDBITS    (sizeof (fd_mask) * 8)    /* bits per mask */     #  define    NFDBITS    (sizeof (fd_mask) * 8)    /* bits per mask */     #  define    FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))     #  define    FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))     #  define    FD_ISSET(n, p)    ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))     #if CYGWIN_FD_REDEFS     #undef NFDBITS     #undef FD_SET     #undef FD_CLR     #undef FD_ISSET     //redefs that don't trigger gcc's  -Wsign-conversion     #  define    NFDBITS    ((int)sizeof (fd_mask) * 8)    /* bits per mask */     #  define    FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1UL << ((n) % NFDBITS)))     #  define    FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1UL << ((n) % NFDBITS)))     #  define    FD_ISSET(n, p)    ((p)->fds_bits[(n)/NFDBITS] & (1UL << ((n) % NFDBITS)))     #endif #endif void f(int X) {     fd_set set;     FD_ZERO(&set);     FD_SET(X,&set);     FD_CLR(X+1,&set);     (void)FD_ISSET(X+2,&set); } Regards, Petr Skocik -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple