Build failure with clang 3.6

Issue #102 resolved
Ashish SHUKLA created an issue

Due to stricter checks in clang 3.6, build fails for 0.6.1:

cd /wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/build/ext/crypto/libtomcrypt && /usr/bin/cc  -DDEBUG_VERSION -DENCRYPT_ONLY -DHAVE_CONFIG_H -fPIC -Wall -O2 -pipe  -fstack-protector -fno-strict-aliasing -O3 -O2 -pipe  -fstack-protector -fno-strict-aliasing -I/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/src -I/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1 -I/usr/local/include -I/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/headers    -o CMakeFiles/aes_enc.dir/src/ciphers/aes/aes.c.o   -c /wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/ciphers/aes/aes.c
In file included from /wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/ciphers/aes/aes.c:33:
In file included from /wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/headers/tomcrypt.h:67:
/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/headers/tomcrypt_macros.h:269:24: error: constraint 'I' expects an integer constant expression
      :"0" (word),"I" (i));
                       ^
/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/headers/tomcrypt_macros.h:277:24: error: constraint 'I' expects an integer constant expression
      :"0" (word),"I" (i));
                       ^
/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/headers/tomcrypt_macros.h:368:24: error: constraint 'J' expects an integer constant expression
      :"0" (word),"J" (i));
                       ^
/wrkdirs/usr/ports/lang/sagittarius-scheme/work/sagittarius-0.6.1/ext/crypto/libtomcrypt-1.17/src/headers/tomcrypt_macros.h:376:24: error: constraint 'J' expects an integer constant expression
      :"0" (word),"J" (i));
                       ^
4 errors generated.

The problem is not in sagittarius per se, but in the external library libtomcrypt which it includes.

The attached diff fixes the issue by converting the function to macros, which does not convert "i" into a runtime constant from compile-time constant that it intends to be, and therefore satisfying the constraint.

This patch is due to Dimitry Andric, who provided it against "security/libtomcrypt" FreeBSD port in FreeBSD PR 198017.

Thanks!

Comments (2)

  1. Log in to comment