1 //---------------------------------------------------------------------------// 2 // Copyright (c) 2016 Jakub Szuppe <j.szuppe@gmail.com> 3 // 4 // Distributed under the Boost Software License, Version 1.0 5 // See accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt 7 // 8 // See http://boostorg.github.com/compute for more information. 9 //---------------------------------------------------------------------------// 10 11 #ifndef BOOST_COMPUTE_DETAIL_DIAGNOSTIC_HPP 12 #define BOOST_COMPUTE_DETAIL_DIAGNOSTIC_HPP 13 14 // Macros for suppressing warnings for GCC version 4.6 or later. Usage: 15 // 16 // BOOST_COMPUTE_BOOST_COMPUTE_GCC_DIAG_OFF(sign-compare); 17 // if(a < b){ 18 // BOOST_COMPUTE_BOOST_COMPUTE_GCC_DIAG_ON(sign-compare); 19 // 20 // Source: https://svn.boost.org/trac/boost/wiki/Guidelines/WarningsGuidelines 21 #if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402 22 #define BOOST_COMPUTE_GCC_DIAG_STR(s) #s 23 #define BOOST_COMPUTE_GCC_DIAG_JOINSTR(x,y) BOOST_COMPUTE_GCC_DIAG_STR(x ## y) 24 # define BOOST_COMPUTE_GCC_DIAG_DO_PRAGMA(x) _Pragma (#x) 25 # define BOOST_COMPUTE_GCC_DIAG_PRAGMA(x) BOOST_COMPUTE_GCC_DIAG_DO_PRAGMA(GCC diagnostic x) 26 # if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406 27 # define BOOST_COMPUTE_GCC_DIAG_OFF(x) BOOST_COMPUTE_GCC_DIAG_PRAGMA(push) \ 28 BOOST_COMPUTE_GCC_DIAG_PRAGMA(ignored BOOST_COMPUTE_GCC_DIAG_JOINSTR(-W,x)) 29 # define BOOST_COMPUTE_GCC_DIAG_ON(x) BOOST_COMPUTE_GCC_DIAG_PRAGMA(pop) 30 # else 31 # define BOOST_COMPUTE_GCC_DIAG_OFF(x) \ 32 BOOST_COMPUTE_GCC_DIAG_PRAGMA(ignored BOOST_COMPUTE_GCC_DIAG_JOINSTR(-W,x)) 33 # define BOOST_COMPUTE_GCC_DIAG_ON(x) \ 34 BOOST_COMPUTE_GCC_DIAG_PRAGMA(warning BOOST_COMPUTE_GCC_DIAG_JOINSTR(-W,x)) 35 # endif 36 #else // Ensure these macros do nothing for other compilers. 37 # define BOOST_COMPUTE_GCC_DIAG_OFF(x) 38 # define BOOST_COMPUTE_GCC_DIAG_ON(x) 39 #endif 40 41 // Macros for suppressing warnings for Clang. 42 // 43 // BOOST_COMPUTE_BOOST_COMPUTE_CLANG_DIAG_OFF(sign-compare); 44 // if(a < b){ 45 // BOOST_COMPUTE_BOOST_COMPUTE_CLANG_DIAG_ON(sign-compare); 46 // 47 // Source: https://svn.boost.org/trac/boost/wiki/Guidelines/WarningsGuidelines 48 #ifdef __clang__ 49 # define BOOST_COMPUTE_CLANG_DIAG_STR(s) # s 50 // stringize s to "no-sign-compare" 51 # define BOOST_COMPUTE_CLANG_DIAG_JOINSTR(x,y) BOOST_COMPUTE_CLANG_DIAG_STR(x ## y) 52 // join -W with no-unused-variable to "-Wno-sign-compare" 53 # define BOOST_COMPUTE_CLANG_DIAG_DO_PRAGMA(x) _Pragma (#x) 54 // _Pragma is unary operator #pragma ("") 55 # define BOOST_COMPUTE_CLANG_DIAG_PRAGMA(x) \ 56 BOOST_COMPUTE_CLANG_DIAG_DO_PRAGMA(clang diagnostic x) 57 # define BOOST_COMPUTE_CLANG_DIAG_OFF(x) BOOST_COMPUTE_CLANG_DIAG_PRAGMA(push) \ 58 BOOST_COMPUTE_CLANG_DIAG_PRAGMA(ignored BOOST_COMPUTE_CLANG_DIAG_JOINSTR(-W,x)) 59 // For example: #pragma clang diagnostic ignored "-Wno-sign-compare" 60 # define BOOST_COMPUTE_CLANG_DIAG_ON(x) BOOST_COMPUTE_CLANG_DIAG_PRAGMA(pop) 61 // For example: #pragma clang diagnostic warning "-Wno-sign-compare" 62 #else // Ensure these macros do nothing for other compilers. 63 # define BOOST_COMPUTE_CLANG_DIAG_OFF(x) 64 # define BOOST_COMPUTE_CLANG_DIAG_ON(x) 65 # define BOOST_COMPUTE_CLANG_DIAG_PRAGMA(x) 66 #endif 67 68 // Macros for suppressing warnings for MSVC. Usage: 69 // 70 // BOOST_COMPUTE_BOOST_COMPUTE_MSVC_DIAG_OFF(4018); //sign-compare 71 // if(a < b){ 72 // BOOST_COMPUTE_BOOST_COMPUTE_MSVC_DIAG_ON(4018); 73 // 74 #if defined(_MSC_VER) 75 # define BOOST_COMPUTE_MSVC_DIAG_DO_PRAGMA(x) __pragma(x) 76 # define BOOST_COMPUTE_MSVC_DIAG_PRAGMA(x) \ 77 BOOST_COMPUTE_MSVC_DIAG_DO_PRAGMA(warning(x)) 78 # define BOOST_COMPUTE_MSVC_DIAG_OFF(x) BOOST_COMPUTE_MSVC_DIAG_PRAGMA(push) \ 79 BOOST_COMPUTE_MSVC_DIAG_PRAGMA(disable: x) 80 # define BOOST_COMPUTE_MSVC_DIAG_ON(x) BOOST_COMPUTE_MSVC_DIAG_PRAGMA(pop) 81 #else // Ensure these macros do nothing for other compilers. 82 # define BOOST_COMPUTE_MSVC_DIAG_OFF(x) 83 # define BOOST_COMPUTE_MSVC_DIAG_ON(x) 84 #endif 85 86 // Macros for suppressing warnings for GCC, Clang and MSVC. Usage: 87 // 88 // BOOST_COMPUTE_DIAG_OFF(sign-compare, sign-compare, 4018); 89 // if(a < b){ 90 // BOOST_COMPUTE_DIAG_ON(sign-compare, sign-compare, 4018); 91 // 92 #if defined(_MSC_VER) // MSVC 93 # define BOOST_COMPUTE_DIAG_OFF(gcc, clang, msvc) BOOST_COMPUTE_MSVC_DIAG_OFF(msvc) 94 # define BOOST_COMPUTE_DIAG_ON(gcc, clang, msvc) BOOST_COMPUTE_MSVC_DIAG_ON(msvc) 95 #elif defined(__clang__) // Clang 96 # define BOOST_COMPUTE_DIAG_OFF(gcc, clang, msvc) BOOST_COMPUTE_CLANG_DIAG_OFF(clang) 97 # define BOOST_COMPUTE_DIAG_ON(gcc, clang, msvc) BOOST_COMPUTE_CLANG_DIAG_ON(clang) 98 #elif defined(__GNUC__) // GCC/G++ 99 # define BOOST_COMPUTE_DIAG_OFF(gcc, clang, msvc) BOOST_COMPUTE_GCC_DIAG_OFF(gcc) 100 # define BOOST_COMPUTE_DIAG_ON(gcc, clang, msvc) BOOST_COMPUTE_GCC_DIAG_ON(gcc) 101 #else // Ensure these macros do nothing for other compilers. 102 # define BOOST_COMPUTE_DIAG_OFF(gcc, clang, msvc) 103 # define BOOST_COMPUTE_DIAG_ON(gcc, clang, msvc) 104 #endif 105 106 #define BOOST_COMPUTE_DISABLE_DEPRECATED_DECLARATIONS() \ 107 BOOST_COMPUTE_DIAG_OFF(deprecated-declarations, deprecated-declarations, 4996) 108 #define BOOST_COMPUTE_ENABLE_DEPRECATED_DECLARATIONS() \ 109 BOOST_COMPUTE_DIAG_ON(deprecated-declarations, deprecated-declarations, 4996); 110 111 112 #endif /* BOOST_COMPUTE_DETAIL_DIAGNOSTIC_HPP */ 113