[gambit-list] Gambit no longer compiles with Clang >= 3.7

Marc Feeley feeley at iro.umontreal.ca
Tue Jan 19 08:39:49 EST 2016


Strange that this is undefined behavior in C.  Is it only when left shifting a constant or any signed integer expression?  In general I can understand it is undefined because it depends on the size of the integer type, but here ___TB is 3 so -7<<___TB will fit in any integer type including 8 bit integers!

Also, I don’t understand why gsi gets stuck.  After all you only got warnings.

Can you give more details, such as OS and Gambit versions?  I use the latest clang from Xcode and don’t have this problem.

Marc

> On Jan 19, 2016, at 3:35 AM, Alex Silva <asandroq at gmail.com> wrote:
> 
> Hallo,
> 
> Just a heads up: While compiling Gambit, Clang displays the following
> warning (thousands of times):
> 
> ```
> 
> _gambitgsc.c:27730:1: warning: shifting a negative signed value is
> undefined [-Wshift-negative-value]
> ___DEF_NEW_SYM_GLO(___S_xmm5,___S_xmm6,___X3334,376674065,___G_xmm6)
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../include/gambit.h:5487:35: note: expanded from macro '___DEF_NEW_SYM_GLO'
> ___EXP_DATA(___glo_struct,glo) = {___UNB1, ___FIX(hash), 0}; \
>                                  ^~~~~~~
> ../include/gambit.h:2098:38: note: expanded from macro '___UNB1'
> #define ___UNB1 ((___CAST(___WORD,-7)<<___TB)+___tSPECIAL)
>                  ~~~~~~~~~~~~~~~~~~~^
> 
> ```
> 
> This is indeed undefined behaviour according to the C standard[1]. The
> resulting `gsi` gets stuck when started and must be killed with SIGKILL.
> 
> [1] http://stackoverflow.com/a/22883850/341446
> 
> Cheers,
> -- 
> -alex
> http://unendli.ch/
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list




More information about the Gambit-list mailing list