DiagnosticGroups.td revision 210299
1//==--- DiagnosticGroups.td - Diagnostic Group Definitions ----------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10def ImplicitFunctionDeclare : DiagGroup<"implicit-function-declaration">;
11def ImplicitInt : DiagGroup<"implicit-int">;
12
13// Aggregation warning settings.
14def Implicit : DiagGroup<"implicit", [
15    ImplicitFunctionDeclare,
16    ImplicitInt
17]>;
18
19// Empty DiagGroups are recognized by clang but ignored.
20def : DiagGroup<"abi">;
21def : DiagGroup<"address">;
22def AddressOfTemporary : DiagGroup<"address-of-temporary">;
23def : DiagGroup<"aggregate-return">;
24def AmbigMemberTemplate : DiagGroup<"ambiguous-member-template">;
25def : DiagGroup<"attributes">;
26def : DiagGroup<"bad-function-cast">;
27def BoolConversions : DiagGroup<"bool-conversions">;
28def : DiagGroup<"c++-compat">;
29def : DiagGroup<"cast-align">;
30def : DiagGroup<"cast-qual">;
31def : DiagGroup<"char-align">;
32def Comment : DiagGroup<"comment">;
33def : DiagGroup<"ctor-dtor-privacy">;
34def : DiagGroup<"declaration-after-statement">;
35def GNUDesignator : DiagGroup<"gnu-designator">;
36def Deprecated : DiagGroup<"deprecated">;
37def : DiagGroup<"disabled-optimization">;
38def : DiagGroup<"discard-qual">;
39def : DiagGroup<"div-by-zero">;
40def EmptyBody : DiagGroup<"empty-body">;
41def ExtraTokens : DiagGroup<"extra-tokens">;
42
43def FormatExtraArgs : DiagGroup<"format-extra-args">;
44def FormatZeroLength : DiagGroup<"format-zero-length">;
45
46def CXXHexFloats : DiagGroup<"c++-hex-floats">;
47
48def : DiagGroup<"c++0x-compat", [CXXHexFloats]>;
49def FourByteMultiChar : DiagGroup<"four-char-constants">;
50def : DiagGroup<"idiomatic-parentheses">;
51def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
52def : DiagGroup<"import">;
53def : DiagGroup<"init-self">;
54def : DiagGroup<"inline">;
55def : DiagGroup<"int-to-pointer-cast">;
56def : DiagGroup<"invalid-pch">;
57def LiteralRange : DiagGroup<"literal-range">;
58def : DiagGroup<"main">;
59def MissingBraces : DiagGroup<"missing-braces">;
60def : DiagGroup<"missing-declarations">;
61def : DiagGroup<"missing-format-attribute">;
62def : DiagGroup<"missing-include-dirs">;
63def : DiagGroup<"missing-noreturn">;
64def MultiChar : DiagGroup<"multichar">;
65def : DiagGroup<"nested-externs">;
66def : DiagGroup<"newline-eof">;
67def LongLong : DiagGroup<"long-long">;
68def MismatchedTags : DiagGroup<"mismatched-tags">;
69def MissingFieldInitializers : DiagGroup<"missing-field-initializers">;
70def InitializerOverrides : DiagGroup<"initializer-overrides">;
71def NonNull : DiagGroup<"nonnull">;
72def : DiagGroup<"nonportable-cfstrings">;
73def : DiagGroup<"non-virtual-dtor">;
74def : DiagGroup<"old-style-definition">;
75def : DiagGroup<"overflow">;
76def : DiagGroup<"overloaded-virtual">;
77def : DiagGroup<"packed">;
78def PointerArith : DiagGroup<"pointer-arith">;
79def PoundWarning : DiagGroup<"#warnings">,
80                   DiagCategory<"#warning Directive">;
81def : DiagGroup<"pointer-to-int-cast">;
82def : DiagGroup<"redundant-decls">;
83def ReturnType : DiagGroup<"return-type">;
84def BindToTemporaryCopy : DiagGroup<"bind-to-temporary-copy">;
85def SemiBeforeMethodBody : DiagGroup<"semicolon-before-method-body">;
86def : DiagGroup<"sequence-point">;
87def Shadow : DiagGroup<"shadow">;
88def : DiagGroup<"shorten-64-to-32">;
89def : DiagGroup<"sign-promo">;
90def SignCompare : DiagGroup<"sign-compare">;
91def : DiagGroup<"synth">;
92
93// Preprocessor warnings.
94def : DiagGroup<"builtin-macro-redefined">;
95
96// Just silence warnings about -Wstrict-aliasing for now.
97def : DiagGroup<"strict-aliasing=0">;
98def : DiagGroup<"strict-aliasing=1">;
99def : DiagGroup<"strict-aliasing=2">;
100def : DiagGroup<"strict-aliasing">;
101
102// Just silence warnings about -Wstrict-overflow for now.
103def : DiagGroup<"strict-overflow=0">;
104def : DiagGroup<"strict-overflow=1">;
105def : DiagGroup<"strict-overflow=2">;
106def : DiagGroup<"strict-overflow=3">;
107def : DiagGroup<"strict-overflow=4">;
108def : DiagGroup<"strict-overflow=5">;
109def : DiagGroup<"strict-overflow">;
110
111def InvalidOffsetof : DiagGroup<"invalid-offsetof">;
112def : DiagGroup<"strict-prototypes">;
113def : DiagGroup<"strict-selector-match">;
114def SwitchEnum     : DiagGroup<"switch-enum">;
115def Switch         : DiagGroup<"switch", [SwitchEnum]>;
116def Trigraphs      : DiagGroup<"trigraphs">;
117
118def : DiagGroup<"type-limits">;
119def Uninitialized  : DiagGroup<"uninitialized">;
120def UnknownPragmas : DiagGroup<"unknown-pragmas">;
121def UnknownAttributes : DiagGroup<"unknown-attributes">;
122def UnusedArgument : DiagGroup<"unused-argument">;
123def UnusedExceptionParameter : DiagGroup<"unused-exception-parameter">;
124def UnusedFunction : DiagGroup<"unused-function">;
125def UnusedLabel : DiagGroup<"unused-label">;
126def UnusedParameter : DiagGroup<"unused-parameter">;
127def UnusedValue    : DiagGroup<"unused-value">;
128def UnusedVariable : DiagGroup<"unused-variable">;
129def ReadOnlySetterAttrs : DiagGroup<"readonly-setter-attrs">;
130def Reorder : DiagGroup<"reorder">;
131def UndeclaredSelector : DiagGroup<"undeclared-selector">;
132def Protocol : DiagGroup<"protocol">;
133def SuperSubClassMismatch : DiagGroup<"super-class-method-mismatch">;
134def : DiagGroup<"variadic-macros">;
135def VariadicMacros : DiagGroup<"variadic-macros">;
136def VectorConversions : DiagGroup<"vector-conversions">;      // clang specific
137def VLA : DiagGroup<"vla">;
138def VolatileRegisterVar : DiagGroup<"volatile-register-var">;
139def : DiagGroup<"write-strings">;
140def CharSubscript : DiagGroup<"char-subscripts">;
141
142// Aggregation warning settings.
143
144// -Widiomatic-parentheses contains warnings about 'idiomatic'
145// missing parentheses;  it is off by default.
146def Parentheses : DiagGroup<"parentheses", [DiagGroup<"idiomatic-parentheses">]>;
147
148// -Wconversion has its own warnings, but we split this one out for
149// legacy reasons.
150def Conversion : DiagGroup<"conversion",
151                           [DiagGroup<"shorten-64-to-32">, BoolConversions]>,
152                 DiagCategory<"Value Conversion Issue">;
153
154def Unused : DiagGroup<"unused",
155                       [UnusedArgument, UnusedFunction, UnusedLabel,
156                        // UnusedParameter, (matches GCC's behavior)
157                        UnusedValue, UnusedVariable]>,
158                        DiagCategory<"Unused Entity Issue">;
159
160// Format settings.
161def Format : DiagGroup<"format", [FormatExtraArgs, FormatZeroLength, NonNull]>,
162             DiagCategory<"Format String Issue">;
163def FormatSecurity : DiagGroup<"format-security", [Format]>;
164def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
165def FormatY2K : DiagGroup<"format-y2k", [Format]>;
166def Format2 : DiagGroup<"format=2",
167                        [FormatNonLiteral, FormatSecurity, FormatY2K]>;
168
169def Extra : DiagGroup<"extra", [
170    MissingFieldInitializers,
171    IgnoredQualifiers,
172    InitializerOverrides,
173    SemiBeforeMethodBody,
174    SignCompare,
175    UnusedParameter
176  ]>;
177
178def Most : DiagGroup<"most", [
179    CharSubscript,
180    Comment,
181    Format,
182    Implicit,
183    MismatchedTags,
184    MissingBraces,
185    MultiChar,
186    Reorder,
187    ReturnType,
188    Switch,
189    Trigraphs,
190    Uninitialized,
191    UnknownPragmas,
192    Unused,
193    VectorConversions,
194    VolatileRegisterVar
195 ]>;
196
197// -Wall is -Wmost -Wparentheses
198def : DiagGroup<"all", [Most, Parentheses]>;
199
200// Aliases.
201def : DiagGroup<"", [Extra]>;                   // -W = -Wextra
202def : DiagGroup<"endif-labels", [ExtraTokens]>; // -Wendif-labels=-Wendif-tokens
203def : DiagGroup<"comments", [Comment]>;         // -Wcomments = -Wcomment
204
205// A warning group for warnings that we want to have on by default in clang,
206// but which aren't on by default in GCC.
207def NonGCC : DiagGroup<"non-gcc",
208    [SignCompare, Conversion, LiteralRange]>;
209
210// A warning group for warnings about GCC extensions.
211def GNU : DiagGroup<"gnu", [GNUDesignator, VLA]>;
212