summaryrefslogtreecommitdiff
path: root/src/inc/warningcontrol.h
blob: c0e21b90a709fca48e9cd21eec84fbc278d0d273 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
//
// warningcontrol.h
//
// Header file to globally control the warning settings for the entire Viper build.
// You do not need to explicitly include this file; rather, it gets included
// on the command line with a /FI (force include) directive. This is controlled
// in sources.vip.
//
// KEEP THIS LIST SORTED!
//

#if defined(_MSC_VER)
#pragma warning(disable :4001)   // "nonstandard extension 'single line comment' was used"
#pragma warning(error   :4007)   // 'main' : must be __cdecl
#pragma warning(disable :4010)   // "single-line comment contains line-continuation character"
#pragma warning(error   :4013)   // 'function' undefined - assuming extern returning int
#pragma warning(disable :4022)   // "'%s' : pointer mismatch for actual parameter %d"
#pragma warning(disable :4047)   // "'%$L' : '%$T' differs in levels of indirection from '%$T'"
#pragma warning(disable :4053)   // "one void operand for '?:'"
#pragma warning(disable :4056)   // "overflow in floating-point constant arithmetic"
#pragma warning(disable :4061)   // "enumerate '%$S' in switch of enum '%$S' is not explicitly handled by a case label"
#pragma warning(error   :4071)   // no function prototype given
#pragma warning(error   :4072)   // no function prototype given (fastcall)
#pragma warning(3               :4092)   // sizeof returns 'unsigned long'
#pragma warning(disable :4100)   // "'%$S' : unreferenced formal parameter"
#pragma warning(disable :4101)   // "'%$S' : unreferenced local variable"
//#pragma warning(error :4102)   // "'%$S' : unreferenced label"
#pragma warning(3               :4121)   // structure is sensitive to alignment
#pragma warning(disable :4127)   // "conditional expression is constant"
#pragma warning(3               :4125)   // decimal digit in octal sequence
#pragma warning(3               :4130)   // logical operation on address of string constant
#pragma warning(3               :4132)   // const object should be initialized
#pragma warning(error   :4171)   // no function prototype given (old style)
#pragma warning(4               :4177)   // pragma data_seg s/b at global scope
#pragma warning(disable :4201)   // "nonstandard extension used : nameless struct/union"
#pragma warning(disable :4204)   // "nonstandard extension used : non-constant aggregate initializer"
#pragma warning(4               :4206)   // Source File is empty
#pragma warning(3               :4212)   // function declaration used ellipsis
#pragma warning(error           :4259)   // pure virtual function was not defined
#pragma warning(disable         :4291)   // delete not defined for new, c++ exception may cause leak
#pragma warning(disable         :4302)   // truncation from '%$S' to '%$S'
#pragma warning(disable         :4311)   // pointer truncation from '%$S' to '%$S'
#pragma warning(disable         :4312)   // '<function-style-cast>' : conversion from '%$S' to '%$S' of greater size
#pragma warning(disable :4334)   // result of 32-bit shift implicitly converted to 64 bits
#pragma warning(disable :4345)   // behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
#pragma warning(disable :4430)   // missing type specifier: C++ doesn't support default-int
#pragma warning(disable :4477)   // format string '%$S' requires an argument of type '%$S', but variadic argument %d has type '%$S'
#pragma warning(3               :4509)   // "nonstandard extension used: '%$S' uses SEH and '%$S' has destructor"
                                                                 //
                                                                 // But beware of doing a return from inside such a try block:
                                                                 //
                                                                 //     int foo()
                                                                 //             {
                                                                 //             ClassWithDestructor c;
                                                                 //             __try {
                                                                 //                     return 0;
                                                                 //             } __finally {
                                                                 //                     printf("in finally");
                                                                 //             }
                                                                 //
                                                                 // as (it's a bug) the return value gets toasted. So DON'T casually
                                                                 // dismiss this warning if you're compiling w/o CXX EH turned on (the default).

#pragma warning(3               :4530)   // C++ exception handler used, but unwind semantics are not enabled. Specify -GX
#pragma warning(error   :4551)   // Function call missing argument list

#pragma warning(error   :4700)   // Local used w/o being initialized
#pragma warning(disable :4706)   // assignment within conditional expression
#pragma warning(error   :4806)   // unsafe operation involving type 'bool'
#pragma warning(disable :4995)   // '_OLD_IOSTREAMS_ARE_DEPRECATED': name was marked as #pragma deprecated

#if defined(_DEBUG) && (!defined(_MSC_FULL_VER) || (_MSC_FULL_VER <= 181040116))
// The CLR header file check.h, macro CHECK_MSG_EX, can create unreachable code if the LEAVE_DEBUG_ONLY_CODE
// macro is not empty (such as it is defined in contract.h) and the _RESULT macro expands to "return".
// Checked-in compilers used by the TFS-based desktop build (e.g., version 18.10.40116.8) started reporting
// unreachable code warnings when debugholder.h was changed to no longer #define "return" to something relatively
// complex. However, newer compilers, such as Visual Studio 2015, used to build the CLR from the open source
// GitHub repo, still do not report this warning. We don't want to disable this warning for open source build,
// which will use a newer compiler. Hence, only disable it for older compilers.
#pragma warning(disable :4702)   // unreachable code
#endif

#endif  // defined(_MSC_VER)