From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by sourceware.org (Postfix) with ESMTPS id A63773858D35 for ; Sun, 2 Aug 2020 18:09:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A63773858D35 Received: by mail-wr1-x42f.google.com with SMTP id f7so32211337wrw.1 for ; Sun, 02 Aug 2020 11:09:00 -0700 (PDT) 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) Received: from [10.0.0.1] ([91.139.110.250]) by smtp.gmail.com with ESMTPSA id 3sm9686635wms.36.2020.08.02.11.08.58 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 02 Aug 2020 11:08:58 -0700 (PDT) To: cygwin@cygwin.com From: Petr Skocik 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-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit 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@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 02 Aug 2020 18:09:03 -0000 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