JASL  [1.2.0]-2018-09-11
All Classes Files Typedefs Macros Pages
jasl_diagnostic.hpp
1 // JASL: For more information see https://github.com/matepek/jasl
2 //
3 // Copyright (c) 2018 Mate Pek
4 //
5 // This code is licensed under the MIT License (MIT).
6 
7 #pragma once
8 
10 
11 #if defined(__GNUG__) && !defined(__clang__) // gcc
12 
13 # define JASL_DIAGNOSTIC_PUSH() _Pragma("GCC diagnostic push")
14 # define JASL_DIAGNOSTIC_POP() _Pragma("GCC diagnostic pop")
15 
16 # define JASL_DIAGNOSTIC_IGNORED_MSVC(id)
17 # define JASL_DIAGNOSTIC_IGNORED_GCC(id) \
18  _Pragma(JASL_STR(GCC diagnostic ignored id))
19 # if __GNUC__ >= 7L
20 # define JASL_DIAGNOSTIC_IGNORED_GCC_SINCE7(id) \
21  JASL_DIAGNOSTIC_IGNORED_GCC(id)
22 # else
23 # define JASL_DIAGNOSTIC_IGNORED_GCC_SINCE7(id)
24 # endif
25 # define JASL_DIAGNOSTIC_IGNORED_CLANG(id)
26 
27 # define JASL_DIAGNOSTIC_IGNORED(id) JASL_DIAGNOSTIC_IGNORED_GCC(id)
28 
29 # define JASL_WARNING_OLD_STYLE_CAST
30 # define JASL_WARNING_SIGN_CONVERSION
31 # define JASL_WARNING_IMPLICIT_FALLTHROUGH "-Wimplicit-fallthrough"
32 # define JAS_WARNING_CAST_ALING
33 
34 #elif defined(__clang__) // clang
35 
36 // https://stackoverflow.com/questions/13826722/how-do-i-define-a-macro-with-multiple-pragmas-for-clang
37 # define JASL_DIAGNOSTIC_PUSH() _Pragma("clang diagnostic push")
38 # define JASL_DIAGNOSTIC_POP() _Pragma("clang diagnostic pop")
39 
40 # define JASL_DIAGNOSTIC_IGNORED_MSVC(id)
41 # define JASL_DIAGNOSTIC_IGNORED_GCC(id)
42 # define JASL_DIAGNOSTIC_IGNORED_GCC_SINCE7(id)
43 # define JASL_DIAGNOSTIC_IGNORED_CLANG(id) \
44  _Pragma(JASL_STR(clang diagnostic ignored id))
45 
46 # define JASL_DIAGNOSTIC_IGNORED(id) JASL_DIAGNOSTIC_IGNORED_CLANG(id)
47 
48 # define JASL_WARNING_OLD_STYLE_CAST "-Wold-style-cast"
49 # define JASL_WARNING_SIGN_CONVERSION "-Wsign-conversion"
50 # define JASL_WARNING_IMPLICIT_FALLTHROUGH "-Wimplicit-fallthrough"
51 # define JAS_WARNING_CAST_ALING "-Wcast-align"
52 
53 #elif defined(_MSC_VER) // msvc
54 
55 // https://msdn.microsoft.com/en-us/library/d9x1s805.aspx
56 # define JASL_DIAGNOSTIC_PUSH() __pragma(warning(push))
57 # define JASL_DIAGNOSTIC_POP() __pragma(warning(pop))
58 
59 # define JASL_DIAGNOSTIC_IGNORED_MSVC(id) __pragma(warning(disable : id))
60 # define JASL_DIAGNOSTIC_IGNORED_GCC(id)
61 # define JASL_DIAGNOSTIC_IGNORED_GCC_SINCE7(id)
62 # define JASL_DIAGNOSTIC_IGNORED_CLANG(id)
63 
64 # define JASL_DIAGNOSTIC_IGNORED(id) JASL_DIAGNOSTIC_IGNORED_MSVC(id)
65 
66 # define JASL_WARNING_OLD_STYLE_CAST
67 # define JASL_WARNING_SIGN_CONVERSION
68 # define JASL_WARNING_IMPLICIT_FALLTHROUGH
69 # define JAS_WARNING_CAST_ALING
70 
71 #else
72 
73 # define JASL_DIAGNOSTIC_PUSH()
74 # define JASL_DIAGNOSTIC_POP()
75 
76 # define JASL_DIAGNOSTIC_IGNORED_MSVC(id)
77 # define JASL_DIAGNOSTIC_IGNORED_GCC(id)
78 # define JASL_DIAGNOSTIC_IGNORED_GCC_SINCE7(id)
79 # define JASL_DIAGNOSTIC_IGNORED_CLANG(id)
80 
81 # define JASL_DIAGNOSTIC_IGNORED(id)
82 
83 # define JASL_WARNING_OLD_STYLE_CAST
84 # define JASL_WARNING_SIGN_CONVERSION
85 # define JASL_WARNING_IMPLICIT_FALLTHROUGH
86 # define JAS_WARNING_CAST_ALING
87 
88 #endif