If I compile my program containing:
#include <gcrypt.h> GCRY_THREAD_OPTION_PTHREAD_IMPL;
with Clang-10 or Clang-11, then I get a warning:
test.c:3:1: warning: 'gcry_thread_cbs' is deprecated [-Wdeprecated-declarations]
GCRY_THREAD_OPTION_PTHREAD_IMPL;
^
/usr/include/gcrypt.h:225:17: note: expanded from macro 'GCRY_THREAD_OPTION_PTHREAD_IMPL'
static struct gcry_thread_cbs gcry_threads_pthread = { \
^
/usr/include/gcrypt.h:218:3: note: 'gcry_thread_cbs' has been explicitly marked deprecated here
} _GCRY_ATTR_INTERNAL;
^
/usr/include/gcrypt.h:130:29: note: expanded from macro '_GCRY_ATTR_INTERNAL'
#define _GCRY_ATTR_INTERNAL _GCRY_GCC_ATTR_DEPRECATED
^
/usr/include/gcrypt.h:90:51: note: expanded from macro '_GCRY_GCC_ATTR_DEPRECATED'
#define _GCRY_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__))
^
test.c:3:1: warning: unused variable 'gcry_threads_pthread' [-Wunused-variable]
GCRY_THREAD_OPTION_PTHREAD_IMPL;
^
/usr/include/gcrypt.h:225:33: note: expanded from macro 'GCRY_THREAD_OPTION_PTHREAD_IMPL'
static struct gcry_thread_cbs gcry_threads_pthread = { \
^
2 warnings generated.This appears to be because gcrypt.h.in marks gcry_thread_cbs as deprecated in an attempt to restrict its use to only the macros. GCC doesn't warn in this case, but Clang does. This causes problems when compiling with -Werror.
Others seem to have noticed this too.
The attached patch isn't very satisfying, but it does solve the problem for me.