Yeah, I've ran into this as well, on more than one occasion. Rant alert... 
:warning: 

Here's what C99 standard says of it:

> The  result  of E1 << E2 is E1 left-shifted E2 bit  positions;  vacated  bits 
>  are  filled  with zeros.  If E1 has  an  unsigned  type,  the  value  of  
> the  result  is E1×2^E2, reduced  modulo one  more  than  the  maximum  value 
>  representable  in  the  result  type.If E1 has  a  signed type  and  
> nonnegative  value,  and E1×2^E2 is  representable  in  the  result  type,  
> then  that  is the resulting value; otherwise, the behavior is undefined.

...and...

> Each  enumerated  type  shall  be  compatible  with char, a signed  integer  
> type,  or  an unsigned  integer  type. The  choice  of  type  is  
> implementation-defined, but shall  be capable   of   representing   the   
> values   of   all   the   members   of   the   enumeration. The enumerated  
> type  is  incomplete  until  after  the that  terminates  the  list  of  
> enumerator declarations.

To me that reads the compiler is responsible for figuring out the proper type 
for the enum, and meanwhile *we* don't actually care whether it thinks its 
signed or not because it's just an effing bitfield. However I'm quite positive 
any old number of compiler authors will disagree with my assessment. I deeply 
hate this language-lawyering - this is C, your friendly high-level assembler, 
and a bit-shift is a bit-shift regardless of the compiler vintage, damnit 
:unamused: 

I remember trying this very thing at some point, only to find that our Python 
(2.x) bindings blew up on 32bit systems because it couldn't represent the 
*unsigned* values. That's not an issue in Python 3 anymore, just noting that 
these kind of changes are not without risk.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/rpm-software-management/rpm/pull/1547#issuecomment-799401476
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint

Reply via email to