]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 */ |