On 11.03.2019 at 10:14 Jakub Jelinek wrote: > You could build with -fsanitize=undefined, that would tell you at runtime you > have undefined behavior in your code (if the SingleDiff has bit ever 0x20 > set).
Yes, that helps. Unfortunately I'm on an embedded system, thus the code size increase is just too big. > The fact that negative or >= bit precision shifts are UB is widely known, > and even if it wouldn't, for the compiler all the UBs are just UBs, the > compiler optimizes on the assumption that UB does not happen, so when it > sees 32-bit int << (x & 32), it can assume x must be 0 at that point, > anything else is UB. Thanks for that explanation. None the less, a compile time warning would be nice. Especially as I this was caused by a library provided by ST. :( Seems like we really need to add more sophisticated static analysis to our CI. Morty -- Redheads Ltd. Softwaredienstleistungen Schillerstr. 14 90409 Nürnberg Telefon: +49 (0)911 180778-50 E-Mail: moritz.stru...@redheads.de | Web: www.redheads.de Geschäftsführer: Andreas Hanke Sitz der Gesellschaft: Lauf Amtsgericht Nürnberg HRB 22681 Ust-ID: DE 249436843