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