Hi Jia, > I refreshed the patches based on the latest master branch.
Thanks. > Basically the problem we discussed may still exist. Yes it still exists. The testdir for 'crypto/gc-sm3' fails to compile for me, whereas 'crypto/gc-sha1' works. The following fixes it for me: diff --git a/modules/crypto/gc-sm3-tests b/modules/crypto/gc-sm3-tests index 21488df..006f41f 100644 --- a/modules/crypto/gc-sm3-tests +++ b/modules/crypto/gc-sm3-tests @@ -8,4 +8,4 @@ configure.ac: Makefile.am: TESTS += test-gc-sm3 check_PROGRAMS += test-gc-sm3 -test_gc_sm3_LDADD = $(LDADD) @LIB_CRYPTO@ $(LIBGCRYPT_LIBS) +test_gc_sm3_LDADD = $(LDADD) @LIB_CRYPTO@ diff --git a/tests/test-gc-sm3.c b/tests/test-gc-sm3.c index 3e412c8..608725d 100644 --- a/tests/test-gc-sm3.c +++ b/tests/test-gc-sm3.c @@ -19,7 +19,6 @@ #include <stdio.h> #include <string.h> -#include <gcrypt.h> #include "gc.h" int Rationale: 1) LIBGCRYPT_LIBS is nowhere defined, therefore always empty. 2) The module description modules/crypto/gc-sm3 states that the user of this module must include "gc.h", nothing else. I squashes these adjustments into your patch and pushed it. Thanks for the major work! > Changelog: > > - fix the following 10 failures: > [gc-gnulib.c] 8 failures > lib/gc-gnulib.c: In function 'gc_init': > lib/gc-gnulib.c:87:1: error: function might be candidate for attribute > 'const' [-Werror=suggest-attribute=const] > gc_init (void) > ^~~~~~~ > lib/gc-gnulib.c: In function 'gc_done': > lib/gc-gnulib.c:114:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_done (void) > ^~~~~~~ > lib/gc-gnulib.c: In function 'gc_set_allocators': > lib/gc-gnulib.c:217:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_set_allocators (gc_malloc_t func_malloc, > ^~~~~~~~~~~~~~~~~ > lib/gc-gnulib.c: In function 'gc_cipher_setkey': > lib/gc-gnulib.c:334:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_cipher_setkey (gc_cipher_handle handle, size_t keylen, const char > *key) > ^~~~~~~~~~~~~~~~ > lib/gc-gnulib.c: In function 'gc_cipher_setiv': > lib/gc-gnulib.c:398:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_cipher_setiv (gc_cipher_handle handle, size_t ivlen, const char *iv) > ^~~~~~~~~~~~~~~ > lib/gc-gnulib.c: In function 'gc_cipher_encrypt_inline': > lib/gc-gnulib.c:452:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char > *data) > ^~~~~~~~~~~~~~~~~~~~~~~~ > lib/gc-gnulib.c: In function 'gc_cipher_decrypt_inline': > lib/gc-gnulib.c:522:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char > *data) > ^~~~~~~~~~~~~~~~~~~~~~~~ > lib/gc-gnulib.c: In function 'gc_hash_digest_length': > lib/gc-gnulib.c:706:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_hash_digest_length (Gc_hash hash) > ^~~~~~~~~~~~~~~~~~~~~ > > [gc-libgcrypt.c] 2 failures > lib/gc-libgcrypt.c: In function 'gc_done': > lib/gc-libgcrypt.c:66:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_done (void) > ^~~~~~~ > lib/gc-libgcrypt.c: In function 'gc_hash_digest_length': > lib/gc-libgcrypt.c:368:1: error: function might be candidate for > attribute 'const' [-Werror=suggest-attribute=const] > gc_hash_digest_length (Gc_hash hash) > ^~~~~~~~~~~~~~~~~~~~~ No, this is wrong. As I tried to explain in the last mail, we must respect the semantics of the 'const' attribute. As a rule of thumb, - functions that take pointer arguments must not be declared 'const', - functions that make side effects must not be declared 'const'. In other words, 'const' functions are functions which only take immediate arguments, only do computations of a result (no side effects), and include no randomness. So, only 'gc_hash_digest_length' is eligible. Additionally, only the declaration (in the .h files) needs to be changed. You don't need the it at the implementation. I pushed a reduced version of your patch, that includes only this function. 2017-10-29 Jia Zhang <qianyue...@alibaba-inc.com> Bruno Haible <br...@clisp.org> crypto/gc: fix build failure with -Werror=suggest-attribute=const * lib/gc.h (gc_hash_digest_length): Mark with 'const' attribute. diff --git a/lib/gc.h b/lib/gc.h index e65ba49..00e29e1 100644 --- a/lib/gc.h +++ b/lib/gc.h @@ -136,7 +136,8 @@ extern Gc_rc gc_cipher_close (gc_cipher_handle handle); extern Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle *outhandle); extern Gc_rc gc_hash_clone (gc_hash_handle handle, gc_hash_handle *outhandle); -extern size_t gc_hash_digest_length (Gc_hash hash); +extern size_t gc_hash_digest_length (Gc_hash hash) + _GL_ATTRIBUTE_CONST; extern void gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key); extern void gc_hash_write (gc_hash_handle handle,