105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
605436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function __attribute__ ((__warning__ (message)))
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern __typeof__ (function) function
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE(function, message) \
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is like _GL_WARN_ON_USE (function, "string"), except that the function is
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   declared with the given prototype, consisting of return type, parameters,
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   and attributes.
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   not work in this case.  */
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_ON_USE_CXX
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes \
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang     __attribute__ ((__warning__ (msg)))
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Verify the existence of the function.  */
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wangextern rettype function parameters_and_attributes
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else /* Unsupported.  */
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang_GL_WARN_EXTERN_C int _gl_warn_on_use
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* _GL_WARN_EXTERN_C declaration;
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   performs the declaration with C linkage.  */
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef _GL_WARN_EXTERN_C
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined __cplusplus
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern "C"
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# else
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define _GL_WARN_EXTERN_C extern
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif
47