DiagnosticGroups.td revision 263508
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 GNUAlignofExpression : DiagGroup<"gnu-alignof-expression">;
25def AmbigMemberTemplate : DiagGroup<"ambiguous-member-template">;
26def GNUAnonymousStruct : DiagGroup<"gnu-anonymous-struct">;
27def ArrayBounds : DiagGroup<"array-bounds">;
28def ArrayBoundsPointerArithmetic : DiagGroup<"array-bounds-pointer-arithmetic">;
29def Availability : DiagGroup<"availability">;
30def Section : DiagGroup<"section">;
31def AutoImport : DiagGroup<"auto-import">;
32def GNUBinaryLiteral : DiagGroup<"gnu-binary-literal">;
33def GNUCompoundLiteralInitializer : DiagGroup<"gnu-compound-literal-initializer">;
34def BitFieldConstantConversion : DiagGroup<"bitfield-constant-conversion">;
35def ConstantConversion :
36  DiagGroup<"constant-conversion", [ BitFieldConstantConversion ] >;
37def LiteralConversion : DiagGroup<"literal-conversion">;
38def StringConversion : DiagGroup<"string-conversion">;
39def SignConversion : DiagGroup<"sign-conversion">;
40def BoolConversion : DiagGroup<"bool-conversion">;
41def IntConversion : DiagGroup<"int-conversion">;
42def EnumConversion : DiagGroup<"enum-conversion">;
43def NonLiteralNullConversion : DiagGroup<"non-literal-null-conversion">;
44def NullConversion : DiagGroup<"null-conversion">;
45def ImplicitConversionFloatingPointToBool :
46  DiagGroup<"implicit-conversion-floating-point-to-bool">;
47def BadArrayNewLength : DiagGroup<"bad-array-new-length">;
48def BuiltinMacroRedefined : DiagGroup<"builtin-macro-redefined">;
49def BuiltinRequiresHeader : DiagGroup<"builtin-requires-header">;
50def C99Compat : DiagGroup<"c99-compat">;
51def CXXCompat: DiagGroup<"c++-compat">;
52def ExternCCompat : DiagGroup<"extern-c-compat">;
53def KeywordCompat : DiagGroup<"keyword-compat">;
54def GNUCaseRange : DiagGroup<"gnu-case-range">;
55def CastAlign : DiagGroup<"cast-align">;
56def : DiagGroup<"cast-qual">;
57def : DiagGroup<"char-align">;
58def Comment : DiagGroup<"comment">;
59def GNUComplexInteger : DiagGroup<"gnu-complex-integer">;
60def GNUConditionalOmittedOperand : DiagGroup<"gnu-conditional-omitted-operand">;
61def ConfigMacros : DiagGroup<"config-macros">;
62def : DiagGroup<"ctor-dtor-privacy">;
63def GNUDesignator : DiagGroup<"gnu-designator">;
64def GNUStringLiteralOperatorTemplate :
65  DiagGroup<"gnu-string-literal-operator-template">;
66
67def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor">;
68def AbstractFinalClass : DiagGroup<"abstract-final-class">;
69
70def CXX11CompatDeprecatedWritableStr :
71  DiagGroup<"c++11-compat-deprecated-writable-strings">;
72
73def DeprecatedDeclarations : DiagGroup<"deprecated-declarations">;
74def DeprecatedImplementations :DiagGroup<"deprecated-implementations">;
75def DeprecatedIncrementBool : DiagGroup<"deprecated-increment-bool">;
76def DeprecatedRegister : DiagGroup<"deprecated-register">;
77def DeprecatedWritableStr : DiagGroup<"deprecated-writable-strings",
78                                      [CXX11CompatDeprecatedWritableStr]>;
79// FIXME: Why are DeprecatedImplementations and DeprecatedWritableStr
80// not in this group?
81def Deprecated : DiagGroup<"deprecated", [DeprecatedDeclarations,
82                                          DeprecatedIncrementBool,
83                                          DeprecatedRegister]>,
84                 DiagCategory<"Deprecations">;
85
86def : DiagGroup<"disabled-optimization">;
87def : DiagGroup<"discard-qual">;
88def : DiagGroup<"div-by-zero">;
89
90def DocumentationHTML : DiagGroup<"documentation-html">;
91def DocumentationUnknownCommand : DiagGroup<"documentation-unknown-command">;
92def DocumentationPedantic : DiagGroup<"documentation-pedantic",
93                                      [DocumentationUnknownCommand]>;
94def DocumentationDeprecatedSync : DiagGroup<"documentation-deprecated-sync">;
95def Documentation : DiagGroup<"documentation",
96                              [DocumentationHTML,
97                               DocumentationDeprecatedSync]>;
98
99def EmptyBody : DiagGroup<"empty-body">;
100def GNUEmptyInitializer : DiagGroup<"gnu-empty-initializer">;
101def GNUEmptyStruct : DiagGroup<"gnu-empty-struct">;
102def ExtraTokens : DiagGroup<"extra-tokens">;
103def CXX11ExtraSemi : DiagGroup<"c++11-extra-semi">;
104def ExtraSemi : DiagGroup<"extra-semi", [CXX11ExtraSemi]>;
105
106def GNUFlexibleArrayInitializer : DiagGroup<"gnu-flexible-array-initializer">;
107def GNUFlexibleArrayUnionMember : DiagGroup<"gnu-flexible-array-union-member">;
108def GNUFoldingConstant : DiagGroup<"gnu-folding-constant">;
109def FormatExtraArgs : DiagGroup<"format-extra-args">;
110def FormatZeroLength : DiagGroup<"format-zero-length">;
111
112// Warnings for C++1y code which is not compatible with prior C++ standards.
113def CXXPre1yCompat : DiagGroup<"c++98-c++11-compat">;
114def CXXPre1yCompatPedantic : DiagGroup<"c++98-c++11-compat-pedantic",
115                                       [CXXPre1yCompat]>;
116
117def CXX98CompatBindToTemporaryCopy :
118  DiagGroup<"c++98-compat-bind-to-temporary-copy">;
119def CXX98CompatLocalTypeTemplateArgs :
120  DiagGroup<"c++98-compat-local-type-template-args">;
121def CXX98CompatUnnamedTypeTemplateArgs :
122  DiagGroup<"c++98-compat-unnamed-type-template-args">;
123
124def CXX98Compat : DiagGroup<"c++98-compat",
125                            [CXX98CompatBindToTemporaryCopy,
126                             CXX98CompatLocalTypeTemplateArgs,
127                             CXX98CompatUnnamedTypeTemplateArgs,
128                             CXXPre1yCompat]>;
129// Warnings for C++11 features which are Extensions in C++98 mode.
130def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic",
131                                    [CXX98Compat,
132                                     CXXPre1yCompatPedantic]>;
133
134def CXX11Narrowing : DiagGroup<"c++11-narrowing">;
135
136// Original name of this warning in Clang
137def : DiagGroup<"c++0x-narrowing", [CXX11Narrowing]>;
138
139// Name of this warning in GCC
140def : DiagGroup<"narrowing", [CXX11Narrowing]>;
141
142def CXX11CompatReservedUserDefinedLiteral :
143  DiagGroup<"c++11-compat-reserved-user-defined-literal">;
144def ReservedUserDefinedLiteral :
145  DiagGroup<"reserved-user-defined-literal",
146            [CXX11CompatReservedUserDefinedLiteral]>;
147
148def CXX11Compat : DiagGroup<"c++11-compat",
149                            [CXX11Narrowing,
150                             CXX11CompatReservedUserDefinedLiteral,
151                             CXX11CompatDeprecatedWritableStr,
152                             CXXPre1yCompat]>;
153def : DiagGroup<"c++0x-compat", [CXX11Compat]>;
154def CXX11CompatPedantic : DiagGroup<"c++11-compat-pedantic",
155                                    [CXXPre1yCompatPedantic]>;
156
157def : DiagGroup<"effc++">;
158def DivZero : DiagGroup<"division-by-zero">;
159def ExitTimeDestructors : DiagGroup<"exit-time-destructors">;
160def FlexibleArrayExtensions : DiagGroup<"flexible-array-extensions">;
161def FourByteMultiChar : DiagGroup<"four-char-constants">;
162def GlobalConstructors : DiagGroup<"global-constructors">;
163def BitwiseOpParentheses: DiagGroup<"bitwise-op-parentheses">;
164def LogicalOpParentheses: DiagGroup<"logical-op-parentheses">;
165def LogicalNotParentheses: DiagGroup<"logical-not-parentheses">;
166def ShiftOpParentheses: DiagGroup<"shift-op-parentheses">;
167def OverloadedShiftOpParentheses: DiagGroup<"overloaded-shift-op-parentheses">;
168def DanglingElse: DiagGroup<"dangling-else">;
169def DanglingField : DiagGroup<"dangling-field">;
170def DistributedObjectModifiers : DiagGroup<"distributed-object-modifiers">;
171def GNUImaginaryConstant : DiagGroup<"gnu-imaginary-constant">;
172def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
173def : DiagGroup<"import">;
174def IncompatiblePointerTypesDiscardsQualifiers 
175  : DiagGroup<"incompatible-pointer-types-discards-qualifiers">;
176def IncompatiblePointerTypes
177  : DiagGroup<"incompatible-pointer-types",
178    [IncompatiblePointerTypesDiscardsQualifiers]>;
179def IncompleteUmbrella : DiagGroup<"incomplete-umbrella">;
180def IncompleteModule : DiagGroup<"incomplete-module", [IncompleteUmbrella]>;
181def InvalidNoreturn : DiagGroup<"invalid-noreturn">;
182def InvalidSourceEncoding : DiagGroup<"invalid-source-encoding">;
183def KNRPromotedParameter : DiagGroup<"knr-promoted-parameter">;
184def : DiagGroup<"init-self">;
185def : DiagGroup<"inline">;
186def : DiagGroup<"invalid-pch">;
187def GNULabelsAsValue : DiagGroup<"gnu-label-as-value">;
188def LiteralRange : DiagGroup<"literal-range">;
189def LocalTypeTemplateArgs : DiagGroup<"local-type-template-args",
190                                      [CXX98CompatLocalTypeTemplateArgs]>;
191def LoopAnalysis : DiagGroup<"loop-analysis">;
192def MalformedWarningCheck : DiagGroup<"malformed-warning-check">;
193def Main : DiagGroup<"main">;
194def MainReturnType : DiagGroup<"main-return-type">;
195def MissingBraces : DiagGroup<"missing-braces">;
196def MissingDeclarations: DiagGroup<"missing-declarations">;
197def : DiagGroup<"missing-format-attribute">;
198def : DiagGroup<"missing-include-dirs">;
199def MissingNoreturn : DiagGroup<"missing-noreturn">;
200def MultiChar : DiagGroup<"multichar">;
201def : DiagGroup<"nested-externs">;
202def CXX11LongLong : DiagGroup<"c++11-long-long">;
203def LongLong : DiagGroup<"long-long", [CXX11LongLong]>;
204def MethodSignatures : DiagGroup<"method-signatures">;
205def MismatchedParameterTypes : DiagGroup<"mismatched-parameter-types">;
206def MismatchedReturnTypes : DiagGroup<"mismatched-return-types">;
207def MismatchedTags : DiagGroup<"mismatched-tags">;
208def MissingFieldInitializers : DiagGroup<"missing-field-initializers">;
209def ModuleConflict : DiagGroup<"module-conflict">;
210def NewlineEOF : DiagGroup<"newline-eof">;
211def NullArithmetic : DiagGroup<"null-arithmetic">;
212def NullCharacter : DiagGroup<"null-character">;
213def NullDereference : DiagGroup<"null-dereference">;
214def InitializerOverrides : DiagGroup<"initializer-overrides">;
215def NonNull : DiagGroup<"nonnull">;
216def NonPODVarargs : DiagGroup<"non-pod-varargs">;
217def : DiagGroup<"nonportable-cfstrings">;
218def NonVirtualDtor : DiagGroup<"non-virtual-dtor">;
219def OveralignedType : DiagGroup<"over-aligned">;
220def : DiagGroup<"old-style-cast">;
221def : DiagGroup<"old-style-definition">;
222def OutOfLineDeclaration : DiagGroup<"out-of-line-declaration">;
223def : DiagGroup<"overflow">;
224def ForwardClassReceiver : DiagGroup<"receiver-forward-class">;
225def MethodAccess : DiagGroup<"objc-method-access">;
226def ObjCReceiver : DiagGroup<"receiver-expr">;
227def OverlengthStrings : DiagGroup<"overlength-strings">;
228def OverloadedVirtual : DiagGroup<"overloaded-virtual">;
229def PrivateExtern : DiagGroup<"private-extern">;
230def SelTypeCast : DiagGroup<"cast-of-sel-type">;
231def BadFunctionCast : DiagGroup<"bad-function-cast">;
232def ObjCPropertyImpl : DiagGroup<"objc-property-implementation">;
233def ObjCPropertyNoAttribute : DiagGroup<"objc-property-no-attribute">;
234def ObjCMissingSuperCalls : DiagGroup<"objc-missing-super-calls">;
235def ObjCRetainBlockProperty : DiagGroup<"objc-noncopy-retain-block-property">;
236def ObjCReadonlyPropertyHasSetter : DiagGroup<"objc-readonly-with-setter-property">;
237def ObjCInvalidIBOutletProperty : DiagGroup<"invalid-iboutlet">;
238def ObjCRootClass : DiagGroup<"objc-root-class">;
239def ObjCPointerIntrospectPerformSelector : DiagGroup<"deprecated-objc-pointer-introspection-performSelector">;
240def ObjCPointerIntrospect : DiagGroup<"deprecated-objc-pointer-introspection", [ObjCPointerIntrospectPerformSelector]>;
241def DeprecatedObjCIsaUsage : DiagGroup<"deprecated-objc-isa-usage">;
242def Packed : DiagGroup<"packed">;
243def Padded : DiagGroup<"padded">;
244def PointerArith : DiagGroup<"pointer-arith">;
245def PoundWarning : DiagGroup<"#warnings">,
246                   DiagCategory<"#warning Directive">;
247def PoundPragmaMessage : DiagGroup<"#pragma-messages">,
248                         DiagCategory<"#pragma message Directive">;
249def : DiagGroup<"pointer-to-int-cast">;
250def : DiagGroup<"redundant-decls">;
251def RedeclaredClassMember : DiagGroup<"redeclared-class-member">;
252def GNURedeclaredEnum : DiagGroup<"gnu-redeclared-enum">;
253def ReturnStackAddress : DiagGroup<"return-stack-address">;
254def ReturnTypeCLinkage : DiagGroup<"return-type-c-linkage">;
255def ReturnType : DiagGroup<"return-type", [ReturnTypeCLinkage]>;
256def BindToTemporaryCopy : DiagGroup<"bind-to-temporary-copy",
257                                    [CXX98CompatBindToTemporaryCopy]>;
258def SelfAssignmentField : DiagGroup<"self-assign-field">;
259def SelfAssignment : DiagGroup<"self-assign", [SelfAssignmentField]>;
260def SemiBeforeMethodBody : DiagGroup<"semicolon-before-method-body">;
261def Sentinel : DiagGroup<"sentinel">;
262def MissingMethodReturnType : DiagGroup<"missing-method-return-type">;
263def Shadow : DiagGroup<"shadow">;
264def Shorten64To32 : DiagGroup<"shorten-64-to-32">;
265def : DiagGroup<"sign-promo">;
266def SignCompare : DiagGroup<"sign-compare">;
267def : DiagGroup<"stack-protector">;
268def : DiagGroup<"switch-default">;
269def : DiagGroup<"synth">;
270def SizeofArrayArgument : DiagGroup<"sizeof-array-argument">;
271def SizeofArrayDecay : DiagGroup<"sizeof-array-decay">;
272def SizeofPointerMemaccess : DiagGroup<"sizeof-pointer-memaccess">;
273def StaticInInline : DiagGroup<"static-in-inline">;
274def StaticLocalInInline : DiagGroup<"static-local-in-inline">;
275def GNUStaticFloatInit : DiagGroup<"gnu-static-float-init">;
276def StaticFloatInit : DiagGroup<"static-float-init", [GNUStaticFloatInit]>;
277def GNUStatementExpression : DiagGroup<"gnu-statement-expression">;
278def StringPlusInt : DiagGroup<"string-plus-int">;
279def StringPlusChar : DiagGroup<"string-plus-char">;
280def StrncatSize : DiagGroup<"strncat-size">;
281def TautologicalOutOfRangeCompare : DiagGroup<"tautological-constant-out-of-range-compare">;
282def TautologicalCompare : DiagGroup<"tautological-compare",
283                                    [TautologicalOutOfRangeCompare]>;
284def HeaderHygiene : DiagGroup<"header-hygiene">;
285def DuplicateDeclSpecifier : DiagGroup<"duplicate-decl-specifier">;
286def CompareDistinctPointerType : DiagGroup<"compare-distinct-pointer-types">;
287def GNUUnionCast : DiagGroup<"gnu-union-cast">;
288def GNUVariableSizedTypeNotAtEnd : DiagGroup<"gnu-variable-sized-type-not-at-end">;
289def Varargs : DiagGroup<"varargs">;
290
291def Unsequenced : DiagGroup<"unsequenced">;
292// GCC name for -Wunsequenced
293def : DiagGroup<"sequence-point", [Unsequenced]>;
294
295// Preprocessor warnings.
296def AmbiguousMacro : DiagGroup<"ambiguous-macro">;
297
298// Just silence warnings about -Wstrict-aliasing for now.
299def : DiagGroup<"strict-aliasing=0">;
300def : DiagGroup<"strict-aliasing=1">;
301def : DiagGroup<"strict-aliasing=2">;
302def : DiagGroup<"strict-aliasing">;
303
304// Just silence warnings about -Wstrict-overflow for now.
305def : DiagGroup<"strict-overflow=0">;
306def : DiagGroup<"strict-overflow=1">;
307def : DiagGroup<"strict-overflow=2">;
308def : DiagGroup<"strict-overflow=3">;
309def : DiagGroup<"strict-overflow=4">;
310def : DiagGroup<"strict-overflow=5">;
311def : DiagGroup<"strict-overflow">;
312
313def InvalidOffsetof : DiagGroup<"invalid-offsetof">;
314def : DiagGroup<"strict-prototypes">;
315def StrictSelector : DiagGroup<"strict-selector-match">;
316def MethodDuplicate : DiagGroup<"duplicate-method-match">;
317def CoveredSwitchDefault : DiagGroup<"covered-switch-default">;
318def SwitchEnum     : DiagGroup<"switch-enum">;
319def Switch         : DiagGroup<"switch">;
320def ImplicitFallthroughPerFunction :
321  DiagGroup<"implicit-fallthrough-per-function">;
322def ImplicitFallthrough  : DiagGroup<"implicit-fallthrough",
323                                     [ImplicitFallthroughPerFunction]>;
324def InvalidPPToken : DiagGroup<"invalid-pp-token">;
325def Trigraphs      : DiagGroup<"trigraphs">;
326
327def : DiagGroup<"type-limits">;
328def UndefinedReinterpretCast : DiagGroup<"undefined-reinterpret-cast">;
329def ReinterpretBaseClass : DiagGroup<"reinterpret-base-class">;
330def Unicode  : DiagGroup<"unicode">;
331def UninitializedMaybe : DiagGroup<"conditional-uninitialized">;
332def UninitializedSometimes : DiagGroup<"sometimes-uninitialized">;
333def UninitializedStaticSelfInit : DiagGroup<"static-self-init">;
334def Uninitialized  : DiagGroup<"uninitialized", [UninitializedSometimes,
335                                                 UninitializedStaticSelfInit]>;
336def UnknownPragmas : DiagGroup<"unknown-pragmas">;
337def UnknownWarningOption : DiagGroup<"unknown-warning-option">;
338def NSobjectAttribute : DiagGroup<"NSObject-attribute">;
339def UnknownAttributes : DiagGroup<"attributes">;
340def IgnoredAttributes : DiagGroup<"ignored-attributes">;
341def UnnamedTypeTemplateArgs : DiagGroup<"unnamed-type-template-args",
342                                        [CXX98CompatUnnamedTypeTemplateArgs]>;
343def UnsupportedFriend : DiagGroup<"unsupported-friend">;
344def UnusedArgument : DiagGroup<"unused-argument">;
345def UnusedSanitizeArgument : DiagGroup<"unused-sanitize-argument">;
346def UnusedCommandLineArgument : DiagGroup<"unused-command-line-argument",
347                                          [UnusedSanitizeArgument]>;
348def InvalidCommandLineArgument : DiagGroup<"invalid-command-line-argument">;
349def UnusedComparison : DiagGroup<"unused-comparison">;
350def UnusedExceptionParameter : DiagGroup<"unused-exception-parameter">;
351def UnneededInternalDecl : DiagGroup<"unneeded-internal-declaration">;
352def UnneededMemberFunction : DiagGroup<"unneeded-member-function">;
353def UnusedPrivateField : DiagGroup<"unused-private-field">;
354def UnusedFunction : DiagGroup<"unused-function", [UnneededInternalDecl]>;
355def UnusedMemberFunction : DiagGroup<"unused-member-function",
356                                     [UnneededMemberFunction]>;
357def UnusedLabel : DiagGroup<"unused-label">;
358def UnusedParameter : DiagGroup<"unused-parameter">;
359def UnusedResult : DiagGroup<"unused-result">;
360def UnusedValue : DiagGroup<"unused-value", [UnusedComparison, UnusedResult]>;
361def UnusedConstVariable : DiagGroup<"unused-const-variable">;
362def UnusedVariable : DiagGroup<"unused-variable",
363                               [UnusedConstVariable]>;
364def UnusedPropertyIvar :  DiagGroup<"unused-property-ivar">;
365def UsedButMarkedUnused : DiagGroup<"used-but-marked-unused">;
366def UserDefinedLiterals : DiagGroup<"user-defined-literals">;
367def ReadOnlySetterAttrs : DiagGroup<"readonly-setter-attrs">;
368def Reorder : DiagGroup<"reorder">;
369def UndeclaredSelector : DiagGroup<"undeclared-selector">;
370def ImplicitAtomic : DiagGroup<"implicit-atomic-properties">;
371def CustomAtomic : DiagGroup<"custom-atomic-properties">;
372def AtomicProperties : DiagGroup<"atomic-properties",
373                                 [ImplicitAtomic, CustomAtomic]>;
374// FIXME: Remove arc-abi once an Xcode is released that doesn't pass this flag.
375def : DiagGroup<"arc-abi">;
376def ARCUnsafeRetainedAssign : DiagGroup<"arc-unsafe-retained-assign">;
377def ARCRetainCycles : DiagGroup<"arc-retain-cycles">;
378def ARCNonPodMemAccess : DiagGroup<"arc-non-pod-memaccess">;
379def AutomaticReferenceCounting : DiagGroup<"arc",
380                                           [ARCUnsafeRetainedAssign,
381                                            ARCRetainCycles,
382                                            ARCNonPodMemAccess]>;
383def ARCRepeatedUseOfWeakMaybe : DiagGroup<"arc-maybe-repeated-use-of-weak">;
384def ARCRepeatedUseOfWeak : DiagGroup<"arc-repeated-use-of-weak",
385                                     [ARCRepeatedUseOfWeakMaybe]>;
386def ObjCBridge : DiagGroup<"bridge-cast">;
387
388def SelectorTypeMismatch : DiagGroup<"selector-type-mismatch">;
389def Selector : DiagGroup<"selector", [SelectorTypeMismatch]>;
390def Protocol : DiagGroup<"protocol">;
391def SuperSubClassMismatch : DiagGroup<"super-class-method-mismatch">;
392def OverridingMethodMismatch : DiagGroup<"overriding-method-mismatch">;
393def VariadicMacros : DiagGroup<"variadic-macros">;
394def VectorConversion : DiagGroup<"vector-conversion">;      // clang specific
395def VexingParse : DiagGroup<"vexing-parse">;
396def VLA : DiagGroup<"vla">;
397def VLAExtension : DiagGroup<"vla-extension">;
398def VolatileRegisterVar : DiagGroup<"volatile-register-var">;
399def Visibility : DiagGroup<"visibility">;
400def ZeroLengthArray : DiagGroup<"zero-length-array">;
401def GNUZeroLineDirective : DiagGroup<"gnu-zero-line-directive">;
402def GNUZeroVariadicMacroArguments : DiagGroup<"gnu-zero-variadic-macro-arguments">;
403
404// GCC calls -Wdeprecated-writable-strings -Wwrite-strings.
405def GCCWriteStrings : DiagGroup<"write-strings" , [DeprecatedWritableStr]>;
406
407def CharSubscript : DiagGroup<"char-subscripts">;
408def LargeByValueCopy : DiagGroup<"large-by-value-copy">;
409def DuplicateArgDecl : DiagGroup<"duplicate-method-arg">;
410
411// Aggregation warning settings.
412
413// -Widiomatic-parentheses contains warnings about 'idiomatic'
414// missing parentheses;  it is off by default.  We do not include it
415// in -Wparentheses because most users who use -Wparentheses explicitly
416// do not want these warnings.
417def ParenthesesOnEquality : DiagGroup<"parentheses-equality">;
418def Parentheses : DiagGroup<"parentheses",
419                            [LogicalOpParentheses,
420                             LogicalNotParentheses,
421                             BitwiseOpParentheses,
422                             ShiftOpParentheses,
423                             OverloadedShiftOpParentheses,
424                             ParenthesesOnEquality,
425                             DanglingElse]>;
426
427// -Wconversion has its own warnings, but we split a few out for
428// legacy reasons:
429//   - some people want just 64-to-32 warnings
430//   - conversion warnings with constant sources are on by default
431//   - conversion warnings for literals are on by default
432//   - bool-to-pointer conversion warnings are on by default
433//   - __null-to-integer conversion warnings are on by default
434def Conversion : DiagGroup<"conversion",
435                           [BoolConversion,
436                            ConstantConversion,
437                            EnumConversion,
438                            Shorten64To32,
439                            IntConversion,
440                            LiteralConversion,
441                            NonLiteralNullConversion, // (1-1)->pointer (etc)
442                            NullConversion, // NULL->non-pointer
443                            SignConversion,
444                            StringConversion]>,
445                 DiagCategory<"Value Conversion Issue">;
446
447def Unused : DiagGroup<"unused",
448                       [UnusedArgument, UnusedFunction, UnusedLabel,
449                        // UnusedParameter, (matches GCC's behavior)
450                        // UnusedMemberFunction, (clean-up llvm before enabling)
451                        UnusedPrivateField,
452                        UnusedValue, UnusedVariable, UnusedPropertyIvar]>,
453                        DiagCategory<"Unused Entity Issue">;
454
455// Format settings.
456def FormatInvalidSpecifier : DiagGroup<"format-invalid-specifier">;
457def FormatSecurity : DiagGroup<"format-security">;
458def FormatNonStandard : DiagGroup<"format-non-iso">;
459def FormatY2K : DiagGroup<"format-y2k">;
460def Format : DiagGroup<"format",
461                       [FormatExtraArgs, FormatZeroLength, NonNull,
462                        FormatSecurity, FormatY2K, FormatInvalidSpecifier]>,
463             DiagCategory<"Format String Issue">;
464def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
465def Format2 : DiagGroup<"format=2",
466                        [FormatNonLiteral, FormatSecurity, FormatY2K]>;
467
468def TypeSafety : DiagGroup<"type-safety">;
469
470def IntToVoidPointerCast : DiagGroup<"int-to-void-pointer-cast">;
471def IntToPointerCast : DiagGroup<"int-to-pointer-cast",
472                                 [IntToVoidPointerCast]>;
473
474def Extra : DiagGroup<"extra", [
475    MissingFieldInitializers,
476    IgnoredQualifiers,
477    InitializerOverrides,
478    SemiBeforeMethodBody,
479    MissingMethodReturnType,
480    SignCompare,
481    UnusedParameter
482  ]>;
483
484def Most : DiagGroup<"most", [
485    CharSubscript,
486    Comment,
487    DeleteNonVirtualDtor,
488    Format,
489    Implicit,
490    MismatchedTags,
491    MissingBraces,
492    MultiChar,
493    Reorder,
494    ReturnType,
495    SelfAssignment,
496    SizeofArrayArgument,
497    SizeofArrayDecay,
498    StringPlusInt,
499    Trigraphs,
500    Uninitialized,
501    UnknownPragmas,
502    Unused,
503    VolatileRegisterVar,
504    ObjCMissingSuperCalls,
505    OverloadedVirtual,
506    PrivateExtern,
507    SelTypeCast,
508    ExternCCompat
509 ]>;
510
511// Thread Safety warnings 
512def ThreadSafetyAttributes : DiagGroup<"thread-safety-attributes">;
513def ThreadSafetyAnalysis   : DiagGroup<"thread-safety-analysis">;
514def ThreadSafetyPrecise    : DiagGroup<"thread-safety-precise">;
515def ThreadSafety : DiagGroup<"thread-safety",
516                             [ThreadSafetyAttributes, 
517                              ThreadSafetyAnalysis,
518                              ThreadSafetyPrecise]>;
519def ThreadSafetyBeta : DiagGroup<"thread-safety-beta">;
520
521// Uniqueness Analysis warnings
522def Consumed       : DiagGroup<"consumed">;
523
524// Note that putting warnings in -Wall will not disable them by default. If a
525// warning should be active _only_ when -Wall is passed in, mark it as
526// DefaultIgnore in addition to putting it here.
527def : DiagGroup<"all", [Most, Parentheses, Switch]>;
528
529// Warnings enabled by -pedantic.  This is magically filled in by TableGen.
530def Pedantic : DiagGroup<"pedantic">;
531
532// Aliases.
533def : DiagGroup<"", [Extra]>;                   // -W = -Wextra
534def : DiagGroup<"endif-labels", [ExtraTokens]>; // -Wendif-labels=-Wextra-tokens
535def : DiagGroup<"comments", [Comment]>;         // -Wcomments = -Wcomment
536def : DiagGroup<"conversion-null",
537                [NullConversion]>; // -Wconversion-null = -Wnull-conversion
538def : DiagGroup<"bool-conversions",
539                [BoolConversion]>; // -Wbool-conversions  = -Wbool-conversion
540def : DiagGroup<"int-conversions",
541                [IntConversion]>; // -Wint-conversions = -Wint-conversion
542def : DiagGroup<"vector-conversions",
543                [VectorConversion]>; // -Wvector-conversions = -Wvector-conversion
544
545// A warning group for warnings that we want to have on by default in clang,
546// but which aren't on by default in GCC.
547def NonGCC : DiagGroup<"non-gcc",
548    [SignCompare, Conversion, LiteralRange]>;
549
550// A warning group for warnings about using C++11 features as extensions in
551// earlier C++ versions.
552def CXX11 : DiagGroup<"c++11-extensions", [CXX11ExtraSemi, CXX11LongLong]>;
553
554// A warning group for warnings about using C++1y features as extensions in
555// earlier C++ versions.
556def CXX1y : DiagGroup<"c++1y-extensions">;
557
558def : DiagGroup<"c++0x-extensions", [CXX11]>;
559def DelegatingCtorCycles :
560  DiagGroup<"delegating-ctor-cycles">;
561
562// A warning group for warnings about using C11 features as extensions.
563def C11 : DiagGroup<"c11-extensions">;
564
565// A warning group for warnings about using C99 features as extensions.
566def C99 : DiagGroup<"c99-extensions">;
567
568// A warning group for warnings about GCC extensions.
569def GNU : DiagGroup<"gnu", [GNUAlignofExpression, GNUAnonymousStruct,
570                            GNUBinaryLiteral, GNUCaseRange,
571                            GNUComplexInteger, GNUCompoundLiteralInitializer,
572                            GNUConditionalOmittedOperand, GNUDesignator,
573                            GNUEmptyInitializer, GNUEmptyStruct,
574                            VLAExtension, GNUFlexibleArrayInitializer,
575                            GNUFlexibleArrayUnionMember, GNUFoldingConstant,
576                            GNUImaginaryConstant, GNULabelsAsValue,
577                            RedeclaredClassMember, GNURedeclaredEnum,
578                            GNUStatementExpression, GNUStaticFloatInit,
579                            GNUStringLiteralOperatorTemplate,
580                            GNUUnionCast, GNUVariableSizedTypeNotAtEnd,
581                            ZeroLengthArray, GNUZeroLineDirective,
582                            GNUZeroVariadicMacroArguments]>;
583// A warning group for warnings about code that clang accepts but gcc doesn't.
584def GccCompat : DiagGroup<"gcc-compat">;
585
586// A warning group for warnings about Microsoft extensions.
587def Microsoft : DiagGroup<"microsoft">;
588
589def ObjCNonUnifiedException : DiagGroup<"objc-nonunified-exceptions">;
590
591def ObjCProtocolMethodImpl : DiagGroup<"objc-protocol-method-implementation">;
592
593def ObjCNoPropertyAutoSynthesis : DiagGroup<"objc-property-synthesis">;
594
595// ObjC API warning groups.
596def ObjCRedundantLiteralUse : DiagGroup<"objc-redundant-literal-use">;
597def ObjCRedundantAPIUse : DiagGroup<"objc-redundant-api-use", [
598    ObjCRedundantLiteralUse
599  ]>;
600
601def ObjCCocoaAPI : DiagGroup<"objc-cocoa-api", [
602    ObjCRedundantAPIUse
603  ]>;
604
605def ObjCStringComparison : DiagGroup<"objc-string-compare">;
606def ObjCStringConcatenation : DiagGroup<"objc-string-concatenation">;
607def ObjCLiteralComparison : DiagGroup<"objc-literal-compare", [
608    ObjCStringComparison
609  ]>;
610
611def ObjCLiteralMissingAtSign : DiagGroup<"objc-literal-missing-atsign">;
612
613// Inline ASM warnings.
614def ASMOperandWidths : DiagGroup<"asm-operand-widths">;
615def ASM : DiagGroup<"asm", [
616    ASMOperandWidths
617  ]>;
618
619// OpenMP warnings.
620def SourceUsesOpenMP : DiagGroup<"source-uses-openmp">;
621