DiagnosticGroups.td revision 227737
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 Availability : DiagGroup<"availability">;
28def BoolConversions : DiagGroup<"bool-conversions">;
29def BuiltinRequiresHeader : DiagGroup<"builtin-requires-header">;
30def CXXCompat: DiagGroup<"c++-compat">;
31def CastAlign : DiagGroup<"cast-align">;
32def : DiagGroup<"cast-qual">;
33def : DiagGroup<"char-align">;
34def Comment : DiagGroup<"comment">;
35def : DiagGroup<"ctor-dtor-privacy">;
36def : DiagGroup<"declaration-after-statement">;
37def DefaultArgSpecialMember : DiagGroup<"default-arg-special-member">;
38def GNUDesignator : DiagGroup<"gnu-designator">;
39
40def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor">;
41
42def DeprecatedDeclarations : DiagGroup<"deprecated-declarations">;
43def DeprecatedWritableStr : DiagGroup<"deprecated-writable-strings">;
44def Deprecated : DiagGroup<"deprecated", [ DeprecatedDeclarations] >,
45                 DiagCategory<"Deprecations">;
46
47def DeprecatedImplementations :DiagGroup<"deprecated-implementations">;
48
49def : DiagGroup<"disabled-optimization">;
50def : DiagGroup<"discard-qual">;
51def : DiagGroup<"div-by-zero">;
52def EmptyBody : DiagGroup<"empty-body">;
53def ExtraTokens : DiagGroup<"extra-tokens">;
54
55def FormatExtraArgs : DiagGroup<"format-extra-args">;
56def FormatZeroLength : DiagGroup<"format-zero-length">;
57
58def CXX98Compat : DiagGroup<"c++98-compat">;
59// Warnings for C++11 features which are Extensions in C++98 mode.
60def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic", [CXX98Compat]>;
61
62def CXX11Narrowing : DiagGroup<"c++11-narrowing">;
63def : DiagGroup<"c++0x-narrowing", [CXX11Narrowing]>;
64
65def CXX11Compat : DiagGroup<"c++11-compat", [CXX11Narrowing]>;
66def : DiagGroup<"c++0x-compat", [CXX11Compat]>;
67
68def : DiagGroup<"effc++">;
69def ExitTimeDestructors : DiagGroup<"exit-time-destructors">;
70def FourByteMultiChar : DiagGroup<"four-char-constants">;
71def GlobalConstructors : DiagGroup<"global-constructors">;
72def : DiagGroup<"idiomatic-parentheses">;
73def BitwiseOpParentheses: DiagGroup<"bitwise-op-parentheses">;
74def LogicalOpParentheses: DiagGroup<"logical-op-parentheses">;
75def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
76def : DiagGroup<"import">;
77def IncompatiblePointerTypes : DiagGroup<"incompatible-pointer-types">;
78def : DiagGroup<"init-self">;
79def : DiagGroup<"inline">;
80def : DiagGroup<"int-to-pointer-cast">;
81def : DiagGroup<"invalid-pch">;
82def LiteralRange : DiagGroup<"literal-range">;
83def LocalTypeTemplateArgs : DiagGroup<"local-type-template-args">;
84def MalformedWarningCheck : DiagGroup<"malformed-warning-check">;
85def Main : DiagGroup<"main">;
86def MissingBraces : DiagGroup<"missing-braces">;
87def MissingDeclarations: DiagGroup<"missing-declarations">;
88def : DiagGroup<"missing-format-attribute">;
89def : DiagGroup<"missing-include-dirs">;
90def : DiagGroup<"missing-noreturn">;
91def MultiChar : DiagGroup<"multichar">;
92def : DiagGroup<"nested-externs">;
93def : DiagGroup<"newline-eof">;
94def LongLong : DiagGroup<"long-long">;
95def MismatchedTags : DiagGroup<"mismatched-tags">;
96def MissingFieldInitializers : DiagGroup<"missing-field-initializers">;
97def ModuleBuild : DiagGroup<"module-build">;
98def NullDereference : DiagGroup<"null-dereference">;
99def InitializerOverrides : DiagGroup<"initializer-overrides">;
100def NonNull : DiagGroup<"nonnull">;
101def : DiagGroup<"nonportable-cfstrings">;
102def NonVirtualDtor : DiagGroup<"non-virtual-dtor">;
103def : DiagGroup<"old-style-cast">;
104def : DiagGroup<"old-style-definition">;
105def OutOfLineDeclaration : DiagGroup<"out-of-line-declaration">;
106def : DiagGroup<"overflow">;
107def OverlengthStrings : DiagGroup<"overlength-strings">;
108def OverloadedVirtual : DiagGroup<"overloaded-virtual">;
109def ObjCMissingSuperCalls : DiagGroup<"objc-missing-super-calls">;
110def ObjCRetainBlockProperty : DiagGroup<"objc-noncopy-retain-block-property">;
111def ObjCContinuationPropertyType :DiagGroup<"objc-continuation-property-type">;
112def Packed : DiagGroup<"packed">;
113def Padded : DiagGroup<"padded">;
114def PointerArith : DiagGroup<"pointer-arith">;
115def PoundWarning : DiagGroup<"#warnings">,
116                   DiagCategory<"#warning Directive">;
117def PoundPragmaMessage : DiagGroup<"#pragma messages">,
118                         DiagCategory<"#pragma message Directive">;
119def : DiagGroup<"pointer-to-int-cast">;
120def : DiagGroup<"redundant-decls">;
121def ReturnType : DiagGroup<"return-type">;
122def BindToTemporaryCopy : DiagGroup<"bind-to-temporary-copy">;
123def SelfAssignment : DiagGroup<"self-assign">;
124def SemiBeforeMethodBody : DiagGroup<"semicolon-before-method-body">;
125def Sentinel : DiagGroup<"sentinel">;
126def MissingMethodReturnType : DiagGroup<"missing-method-return-type">;
127def : DiagGroup<"sequence-point">;
128def Shadow : DiagGroup<"shadow">;
129def : DiagGroup<"shorten-64-to-32">;
130def : DiagGroup<"sign-promo">;
131def SignCompare : DiagGroup<"sign-compare">;
132def : DiagGroup<"stack-protector">;
133def : DiagGroup<"switch-default">;
134def : DiagGroup<"synth">;
135def SizeofArrayArgument : DiagGroup<"sizeof-array-argument">;
136def TautologicalCompare : DiagGroup<"tautological-compare">;
137def HeaderHygiene : DiagGroup<"header-hygiene">;
138
139// Preprocessor warnings.
140def : DiagGroup<"builtin-macro-redefined">;
141
142// Just silence warnings about -Wstrict-aliasing for now.
143def : DiagGroup<"strict-aliasing=0">;
144def : DiagGroup<"strict-aliasing=1">;
145def : DiagGroup<"strict-aliasing=2">;
146def : DiagGroup<"strict-aliasing">;
147
148// Just silence warnings about -Wstrict-overflow for now.
149def : DiagGroup<"strict-overflow=0">;
150def : DiagGroup<"strict-overflow=1">;
151def : DiagGroup<"strict-overflow=2">;
152def : DiagGroup<"strict-overflow=3">;
153def : DiagGroup<"strict-overflow=4">;
154def : DiagGroup<"strict-overflow=5">;
155def : DiagGroup<"strict-overflow">;
156
157def InvalidOffsetof : DiagGroup<"invalid-offsetof">;
158def : DiagGroup<"strict-prototypes">;
159def StrictSelector : DiagGroup<"strict-selector-match">;
160def SwitchEnum     : DiagGroup<"switch-enum">;
161def Switch         : DiagGroup<"switch", [SwitchEnum]>;
162def Trigraphs      : DiagGroup<"trigraphs">;
163
164def : DiagGroup<"type-limits">;
165def Uninitialized  : DiagGroup<"uninitialized">;
166def UninitializedMaybe : DiagGroup<"conditional-uninitialized">;
167def UnknownPragmas : DiagGroup<"unknown-pragmas">;
168def UnknownAttributes : DiagGroup<"attributes">;
169def UnnamedTypeTemplateArgs : DiagGroup<"unnamed-type-template-args">;
170def UnusedArgument : DiagGroup<"unused-argument">;
171def UnusedComparison : DiagGroup<"unused-comparison">;
172def UnusedExceptionParameter : DiagGroup<"unused-exception-parameter">;
173def UnneededInternalDecl : DiagGroup<"unneeded-internal-declaration">;
174def UnneededMemberFunction : DiagGroup<"unneeded-member-function">;
175def UnusedFunction : DiagGroup<"unused-function", [UnneededInternalDecl]>;
176def UnusedMemberFunction : DiagGroup<"unused-member-function",
177                                     [UnneededMemberFunction]>;
178def UnusedLabel : DiagGroup<"unused-label">;
179def UnusedParameter : DiagGroup<"unused-parameter">;
180def UnusedResult : DiagGroup<"unused-result">;
181def UnusedValue : DiagGroup<"unused-value", [UnusedComparison, UnusedResult]>;
182def UnusedVariable : DiagGroup<"unused-variable">;
183def UsedButMarkedUnused : DiagGroup<"used-but-marked-unused">;
184def UserDefinedLiterals : DiagGroup<"user-defined-literals">;
185def ReadOnlySetterAttrs : DiagGroup<"readonly-setter-attrs">;
186def Reorder : DiagGroup<"reorder">;
187def UndeclaredSelector : DiagGroup<"undeclared-selector">;
188def ImplicitAtomic : DiagGroup<"implicit-atomic-properties">;
189def CustomAtomic : DiagGroup<"custom-atomic-properties">;
190def AtomicProperties : DiagGroup<"atomic-properties",
191                                 [ImplicitAtomic, CustomAtomic]>;
192def AutomaticReferenceCountingABI : DiagGroup<"arc-abi">;
193def ARCUnsafeRetainedAssign : DiagGroup<"arc-unsafe-retained-assign">;
194def ARCRetainCycles : DiagGroup<"arc-retain-cycles">;
195def ARCNonPodMemAccess : DiagGroup<"arc-non-pod-memaccess">;
196def AutomaticReferenceCounting : DiagGroup<"arc",
197                                           [AutomaticReferenceCountingABI,
198                                            ARCUnsafeRetainedAssign,
199                                            ARCRetainCycles,
200                                            ARCNonPodMemAccess]>;
201def Selector : DiagGroup<"selector">;
202def NonfragileAbi2 : DiagGroup<"nonfragile-abi2">;
203def Protocol : DiagGroup<"protocol">;
204def SuperSubClassMismatch : DiagGroup<"super-class-method-mismatch">;
205def OverridingMethodMismatch : DiagGroup<"overriding-method-mismatch">;
206def : DiagGroup<"variadic-macros">;
207def VariadicMacros : DiagGroup<"variadic-macros">;
208def VectorConversions : DiagGroup<"vector-conversions">;      // clang specific
209def VLA : DiagGroup<"vla">;
210def VolatileRegisterVar : DiagGroup<"volatile-register-var">;
211
212// GCC calls -Wdeprecated-writable-strings -Wwrite-strings.
213def GCCWriteStrings : DiagGroup<"write-strings" , [DeprecatedWritableStr]>;
214
215def CharSubscript : DiagGroup<"char-subscripts">;
216def LargeByValueCopy : DiagGroup<"large-by-value-copy">;
217def DuplicateArgDecl : DiagGroup<"duplicate-method-arg">;
218
219// Aggregation warning settings.
220
221// -Widiomatic-parentheses contains warnings about 'idiomatic'
222// missing parentheses;  it is off by default.  We do not include it
223// in -Wparentheses because most users who use -Wparentheses explicitly
224// do not want these warnings.
225def ParenthesesOnEquality : DiagGroup<"parentheses-equality">;
226def Parentheses : DiagGroup<"parentheses",
227                            [LogicalOpParentheses,
228                             BitwiseOpParentheses,
229                             ParenthesesOnEquality]>;
230
231// -Wconversion has its own warnings, but we split a few out for
232// legacy reasons:
233//   - some people want just 64-to-32 warnings
234//   - conversion warnings with constant sources are on by default
235//   - conversion warnings for literals are on by default
236//   - bool-to-pointer conversion warnings are on by default
237def Conversion : DiagGroup<"conversion",
238                           [DiagGroup<"shorten-64-to-32">,
239                            DiagGroup<"constant-conversion">,
240                            DiagGroup<"literal-conversion">,
241                            DiagGroup<"string-conversion">,
242                            DiagGroup<"sign-conversion">,
243                            BoolConversions]>,
244                 DiagCategory<"Value Conversion Issue">;
245
246def Unused : DiagGroup<"unused",
247                       [UnusedArgument, UnusedFunction, UnusedLabel,
248                        // UnusedParameter, (matches GCC's behavior)
249                        // UnusedMemberFunction, (clean-up llvm before enabling)
250                        UnusedValue, UnusedVariable]>,
251                        DiagCategory<"Unused Entity Issue">;
252
253// Format settings.
254def FormatInvalidSpecifier : DiagGroup<"format-invalid-specifier">;
255def FormatSecurity : DiagGroup<"format-security">;
256def FormatY2K : DiagGroup<"format-y2k">;
257def Format : DiagGroup<"format",
258                       [FormatExtraArgs, FormatZeroLength, NonNull,
259                        FormatSecurity, FormatY2K, FormatInvalidSpecifier]>,
260             DiagCategory<"Format String Issue">;
261def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
262def Format2 : DiagGroup<"format=2",
263                        [FormatNonLiteral, FormatSecurity, FormatY2K]>;
264
265def Extra : DiagGroup<"extra", [
266    MissingFieldInitializers,
267    IgnoredQualifiers,
268    InitializerOverrides,
269    SemiBeforeMethodBody,
270    MissingMethodReturnType,
271    SignCompare,
272    UnusedParameter
273  ]>;
274
275def Most : DiagGroup<"most", [
276    CharSubscript,
277    Comment,
278    DeleteNonVirtualDtor,
279    Format,
280    Implicit,
281    MismatchedTags,
282    MissingBraces,
283    MultiChar,
284    Reorder,
285    ReturnType,
286    SelfAssignment,
287    Switch,
288    SizeofArrayArgument,
289    Trigraphs,
290    Uninitialized,
291    UnknownPragmas,
292    Unused,
293    VolatileRegisterVar,
294    ObjCMissingSuperCalls,
295    OverloadedVirtual
296 ]>;
297
298// Thread Safety warnings 
299def ThreadSafety : DiagGroup<"thread-safety">;
300
301// -Wall is -Wmost -Wparentheses -Wtop-level-comparison
302def : DiagGroup<"all", [Most, Parentheses]>;
303
304// Aliases.
305def : DiagGroup<"", [Extra]>;                   // -W = -Wextra
306def : DiagGroup<"endif-labels", [ExtraTokens]>; // -Wendif-labels=-Wendif-tokens
307def : DiagGroup<"comments", [Comment]>;         // -Wcomments = -Wcomment
308
309// A warning group for warnings that we want to have on by default in clang,
310// but which aren't on by default in GCC.
311def NonGCC : DiagGroup<"non-gcc",
312    [SignCompare, Conversion, LiteralRange]>;
313
314// A warning group for warnings about using C++11 features as extensions in
315// earlier C++ versions.
316def CXX11 : DiagGroup<"c++11-extensions">;
317def : DiagGroup<"c++0x-extensions", [CXX11]>;
318def DelegatingCtorCycles :
319  DiagGroup<"delegating-ctor-cycles">;
320
321// A warning group for warnings about using C1X features as extensions.
322def C1X : DiagGroup<"c1x-extensions">;
323
324// A warning group for warnings about GCC extensions.
325def GNU : DiagGroup<"gnu", [GNUDesignator, VLA]>;
326
327// A warning group for warnings about Microsoft extensions.
328def Microsoft : DiagGroup<"microsoft">;
329
330def ObjCNonUnifiedException : DiagGroup<"objc-nonunified-exceptions">;
331
332def ObjCProtocolMethodImpl : DiagGroup<"objc-protocol-method-implementation">;
333