DiagnosticGroups.td revision 243830
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 Availability : DiagGroup<"availability">;
26def Section : DiagGroup<"section">;
27def AutoImport : DiagGroup<"auto-import">;
28def ConstantConversion : DiagGroup<"constant-conversion">;
29def LiteralConversion : DiagGroup<"literal-conversion">;
30def StringConversion : DiagGroup<"string-conversion">;
31def SignConversion : DiagGroup<"sign-conversion">;
32def BoolConversion : DiagGroup<"bool-conversion">;
33def IntConversion : DiagGroup<"int-conversion">;
34def EnumConversion : DiagGroup<"enum-conversion">;
35def NonLiteralNullConversion : DiagGroup<"non-literal-null-conversion">;
36def NullConversion : DiagGroup<"null-conversion">;
37def ImplicitConversionFloatingPointToBool :
38  DiagGroup<"implicit-conversion-floating-point-to-bool">;
39def BuiltinRequiresHeader : DiagGroup<"builtin-requires-header">;
40def CXXCompat: DiagGroup<"c++-compat">;
41def CastAlign : DiagGroup<"cast-align">;
42def : DiagGroup<"cast-qual">;
43def : DiagGroup<"char-align">;
44def Comment : DiagGroup<"comment">;
45def : DiagGroup<"ctor-dtor-privacy">;
46def DefaultArgSpecialMember : DiagGroup<"default-arg-special-member">;
47def GNUDesignator : DiagGroup<"gnu-designator">;
48
49def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor">;
50def AbstractFinalClass : DiagGroup<"abstract-final-class">;
51
52def DeprecatedDeclarations : DiagGroup<"deprecated-declarations">;
53def DeprecatedWritableStr : DiagGroup<"deprecated-writable-strings">;
54def Deprecated : DiagGroup<"deprecated", [ DeprecatedDeclarations] >,
55                 DiagCategory<"Deprecations">;
56
57def DeprecatedImplementations :DiagGroup<"deprecated-implementations">;
58
59def : DiagGroup<"disabled-optimization">;
60def : DiagGroup<"discard-qual">;
61def : DiagGroup<"div-by-zero">;
62
63def DocumentationHTML : DiagGroup<"documentation-html">;
64def DocumentationPedantic : DiagGroup<"documentation-pedantic">;
65def DocumentationDeprecatedSync : DiagGroup<"documentation-deprecated-sync">;
66def Documentation : DiagGroup<"documentation",
67                              [DocumentationHTML,
68                               DocumentationDeprecatedSync]>;
69
70def EmptyBody : DiagGroup<"empty-body">;
71def ExtraTokens : DiagGroup<"extra-tokens">;
72def CXX11ExtraSemi : DiagGroup<"c++11-extra-semi">;
73def ExtraSemi : DiagGroup<"extra-semi", [CXX11ExtraSemi]>;
74
75def FormatExtraArgs : DiagGroup<"format-extra-args">;
76def FormatZeroLength : DiagGroup<"format-zero-length">;
77
78def CXX98CompatBindToTemporaryCopy :
79  DiagGroup<"c++98-compat-bind-to-temporary-copy">;
80def CXX98CompatLocalTypeTemplateArgs :
81  DiagGroup<"c++98-compat-local-type-template-args">;
82def CXX98CompatUnnamedTypeTemplateArgs :
83  DiagGroup<"c++98-compat-unnamed-type-template-args">;
84
85def CXX98Compat : DiagGroup<"c++98-compat",
86                            [CXX98CompatBindToTemporaryCopy,
87                             CXX98CompatLocalTypeTemplateArgs,
88                             CXX98CompatUnnamedTypeTemplateArgs]>;
89// Warnings for C++11 features which are Extensions in C++98 mode.
90def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic", [CXX98Compat]>;
91
92def CXX11Narrowing : DiagGroup<"c++11-narrowing">;
93
94// Original name of this warning in Clang
95def : DiagGroup<"c++0x-narrowing", [CXX11Narrowing]>;
96
97// Name of this warning in GCC
98def : DiagGroup<"narrowing", [CXX11Narrowing]>;
99
100def CXX11CompatReservedUserDefinedLiteral :
101  DiagGroup<"c++11-compat-reserved-user-defined-literal">;
102def ReservedUserDefinedLiteral :
103  DiagGroup<"reserved-user-defined-literal",
104            [CXX11CompatReservedUserDefinedLiteral]>;
105
106def CXX11Compat : DiagGroup<"c++11-compat",
107                            [CXX11Narrowing,
108                             CXX11CompatReservedUserDefinedLiteral]>;
109def : DiagGroup<"c++0x-compat", [CXX11Compat]>;
110
111def : DiagGroup<"effc++">;
112def DivZero : DiagGroup<"division-by-zero">;
113def ExitTimeDestructors : DiagGroup<"exit-time-destructors">;
114def FlexibleArrayExtensions : DiagGroup<"flexible-array-extensions">;
115def FourByteMultiChar : DiagGroup<"four-char-constants">;
116def GlobalConstructors : DiagGroup<"global-constructors">;
117def BitwiseOpParentheses: DiagGroup<"bitwise-op-parentheses">;
118def LogicalOpParentheses: DiagGroup<"logical-op-parentheses">;
119def ShiftOpParentheses: DiagGroup<"shift-op-parentheses">;
120def DanglingElse: DiagGroup<"dangling-else">;
121def IgnoredQualifiers : DiagGroup<"ignored-qualifiers">;
122def : DiagGroup<"import">;
123def IncompatiblePointerTypes : DiagGroup<"incompatible-pointer-types">;
124def IncompleteUmbrella : DiagGroup<"incomplete-umbrella">;
125def KNRPromotedParameter : DiagGroup<"knr-promoted-parameter">;
126def : DiagGroup<"init-self">;
127def : DiagGroup<"inline">;
128def : DiagGroup<"invalid-pch">;
129def LiteralRange : DiagGroup<"literal-range">;
130def LocalTypeTemplateArgs : DiagGroup<"local-type-template-args",
131                                      [CXX98CompatLocalTypeTemplateArgs]>;
132def MalformedWarningCheck : DiagGroup<"malformed-warning-check">;
133def Main : DiagGroup<"main">;
134def MainReturnType : DiagGroup<"main-return-type">;
135def MissingBraces : DiagGroup<"missing-braces">;
136def MissingDeclarations: DiagGroup<"missing-declarations">;
137def : DiagGroup<"missing-format-attribute">;
138def : DiagGroup<"missing-include-dirs">;
139def MultiChar : DiagGroup<"multichar">;
140def : DiagGroup<"nested-externs">;
141def CXX11LongLong : DiagGroup<"c++11-long-long">;
142def LongLong : DiagGroup<"long-long", [CXX11LongLong]>;
143def MismatchedParameterTypes : DiagGroup<"mismatched-parameter-types">;
144def MismatchedReturnTypes : DiagGroup<"mismatched-return-types">;
145def MismatchedTags : DiagGroup<"mismatched-tags">;
146def MissingFieldInitializers : DiagGroup<"missing-field-initializers">;
147def ModuleBuild : DiagGroup<"module-build">;
148def NullCharacter : DiagGroup<"null-character">;
149def NullDereference : DiagGroup<"null-dereference">;
150def InitializerOverrides : DiagGroup<"initializer-overrides">;
151def NonNull : DiagGroup<"nonnull">;
152def : DiagGroup<"nonportable-cfstrings">;
153def NonVirtualDtor : DiagGroup<"non-virtual-dtor">;
154def OveralignedType : DiagGroup<"over-aligned">;
155def : DiagGroup<"old-style-cast">;
156def : DiagGroup<"old-style-definition">;
157def OutOfLineDeclaration : DiagGroup<"out-of-line-declaration">;
158def : DiagGroup<"overflow">;
159def ForwardClassReceiver : DiagGroup<"receiver-forward-class">;
160def MethodAccess : DiagGroup<"objc-method-access">;
161def ObjCReceiver : DiagGroup<"receiver-expr">;
162def OverlengthStrings : DiagGroup<"overlength-strings">;
163def OverloadedVirtual : DiagGroup<"overloaded-virtual">;
164def PrivateExtern : DiagGroup<"private-extern">;
165def SelTypeCast : DiagGroup<"cast-of-sel-type">;
166def BadFunctionCast : DiagGroup<"bad-function-cast">;
167def ObjCPropertyImpl : DiagGroup<"objc-property-implementation">;
168def ObjCPropertyNoAttribute : DiagGroup<"objc-property-no-attribute">;
169def ObjCMissingSuperCalls : DiagGroup<"objc-missing-super-calls">;
170def ObjCRetainBlockProperty : DiagGroup<"objc-noncopy-retain-block-property">;
171def ObjCReadonlyPropertyHasSetter : DiagGroup<"objc-readonly-with-setter-property">;
172def ObjCRootClass : DiagGroup<"objc-root-class">;
173def Packed : DiagGroup<"packed">;
174def Padded : DiagGroup<"padded">;
175def PointerArith : DiagGroup<"pointer-arith">;
176def PoundWarning : DiagGroup<"#warnings">,
177                   DiagCategory<"#warning Directive">;
178def PoundPragmaMessage : DiagGroup<"#pragma-messages">,
179                         DiagCategory<"#pragma message Directive">;
180def : DiagGroup<"pointer-to-int-cast">;
181def : DiagGroup<"redundant-decls">;
182def ReturnTypeCLinkage : DiagGroup<"return-type-c-linkage">;
183def ReturnType : DiagGroup<"return-type", [ReturnTypeCLinkage]>;
184def BindToTemporaryCopy : DiagGroup<"bind-to-temporary-copy",
185                                    [CXX98CompatBindToTemporaryCopy]>;
186def SelfAssignmentField : DiagGroup<"self-assign-field">;
187def SelfAssignment : DiagGroup<"self-assign", [SelfAssignmentField]>;
188def SemiBeforeMethodBody : DiagGroup<"semicolon-before-method-body">;
189def Sentinel : DiagGroup<"sentinel">;
190def MissingMethodReturnType : DiagGroup<"missing-method-return-type">;
191def : DiagGroup<"sequence-point">;
192def Shadow : DiagGroup<"shadow">;
193def Shorten64To32 : DiagGroup<"shorten-64-to-32">;
194def : DiagGroup<"sign-promo">;
195def SignCompare : DiagGroup<"sign-compare">;
196def : DiagGroup<"stack-protector">;
197def : DiagGroup<"switch-default">;
198def : DiagGroup<"synth">;
199def SizeofArrayArgument : DiagGroup<"sizeof-array-argument">;
200def StringPlusInt : DiagGroup<"string-plus-int">;
201def StrncatSize : DiagGroup<"strncat-size">;
202def TautologicalOutOfRangeCompare : DiagGroup<"tautological-constant-out-of-range-compare">;
203def TautologicalCompare : DiagGroup<"tautological-compare",
204                                    [TautologicalOutOfRangeCompare]>;
205def HeaderHygiene : DiagGroup<"header-hygiene">;
206def DuplicateDeclSpecifier : DiagGroup<"duplicate-decl-specifier">;
207def CompareDistinctPointerType : DiagGroup<"compare-distinct-pointer-types">;
208
209// Preprocessor warnings.
210def AmbiguousMacro : DiagGroup<"ambiguous-macro">;
211
212// Just silence warnings about -Wstrict-aliasing for now.
213def : DiagGroup<"strict-aliasing=0">;
214def : DiagGroup<"strict-aliasing=1">;
215def : DiagGroup<"strict-aliasing=2">;
216def : DiagGroup<"strict-aliasing">;
217
218// Just silence warnings about -Wstrict-overflow for now.
219def : DiagGroup<"strict-overflow=0">;
220def : DiagGroup<"strict-overflow=1">;
221def : DiagGroup<"strict-overflow=2">;
222def : DiagGroup<"strict-overflow=3">;
223def : DiagGroup<"strict-overflow=4">;
224def : DiagGroup<"strict-overflow=5">;
225def : DiagGroup<"strict-overflow">;
226
227def InvalidOffsetof : DiagGroup<"invalid-offsetof">;
228def LambdaExtensions : DiagGroup<"lambda-extensions">;
229def : DiagGroup<"strict-prototypes">;
230def StrictSelector : DiagGroup<"strict-selector-match">;
231def MethodDuplicate : DiagGroup<"duplicate-method-match">;
232def CoveredSwitchDefault : DiagGroup<"covered-switch-default">;
233def SwitchEnum     : DiagGroup<"switch-enum">;
234def Switch         : DiagGroup<"switch">;
235def ImplicitFallthroughPerFunction :
236  DiagGroup<"implicit-fallthrough-per-function">;
237def ImplicitFallthrough  : DiagGroup<"implicit-fallthrough",
238                                     [ImplicitFallthroughPerFunction]>;
239def InvalidPPToken : DiagGroup<"invalid-pp-token">;
240def Trigraphs      : DiagGroup<"trigraphs">;
241
242def : DiagGroup<"type-limits">;
243def Unicode  : DiagGroup<"unicode">;
244def UninitializedMaybe : DiagGroup<"conditional-uninitialized">;
245def UninitializedSometimes : DiagGroup<"sometimes-uninitialized">;
246def Uninitialized  : DiagGroup<"uninitialized", [UninitializedSometimes]>;
247def UnknownPragmas : DiagGroup<"unknown-pragmas">;
248def NSobjectAttribute : DiagGroup<"NSObject-attribute">;
249def UnknownAttributes : DiagGroup<"attributes">;
250def IgnoredAttributes : DiagGroup<"ignored-attributes">;
251def UnnamedTypeTemplateArgs : DiagGroup<"unnamed-type-template-args",
252                                        [CXX98CompatUnnamedTypeTemplateArgs]>;
253def UnusedArgument : DiagGroup<"unused-argument">;
254def UnusedComparison : DiagGroup<"unused-comparison">;
255def UnusedExceptionParameter : DiagGroup<"unused-exception-parameter">;
256def UnneededInternalDecl : DiagGroup<"unneeded-internal-declaration">;
257def UnneededMemberFunction : DiagGroup<"unneeded-member-function">;
258def UnusedPrivateField : DiagGroup<"unused-private-field">;
259def UnusedFunction : DiagGroup<"unused-function", [UnneededInternalDecl]>;
260def UnusedMemberFunction : DiagGroup<"unused-member-function",
261                                     [UnneededMemberFunction]>;
262def UnusedLabel : DiagGroup<"unused-label">;
263def UnusedParameter : DiagGroup<"unused-parameter">;
264def UnusedResult : DiagGroup<"unused-result">;
265def UnusedValue : DiagGroup<"unused-value", [UnusedComparison, UnusedResult]>;
266def UnusedVariable : DiagGroup<"unused-variable">;
267def UsedButMarkedUnused : DiagGroup<"used-but-marked-unused">;
268def UserDefinedLiterals : DiagGroup<"user-defined-literals">;
269def ReadOnlySetterAttrs : DiagGroup<"readonly-setter-attrs">;
270def Reorder : DiagGroup<"reorder">;
271def UndeclaredSelector : DiagGroup<"undeclared-selector">;
272def ImplicitAtomic : DiagGroup<"implicit-atomic-properties">;
273def CustomAtomic : DiagGroup<"custom-atomic-properties">;
274def AtomicProperties : DiagGroup<"atomic-properties",
275                                 [ImplicitAtomic, CustomAtomic]>;
276// FIXME: Remove arc-abi once an Xcode is released that doesn't pass this flag.
277def : DiagGroup<"arc-abi">;
278def ARCUnsafeRetainedAssign : DiagGroup<"arc-unsafe-retained-assign">;
279def ARCRetainCycles : DiagGroup<"arc-retain-cycles">;
280def ARCNonPodMemAccess : DiagGroup<"arc-non-pod-memaccess">;
281def AutomaticReferenceCounting : DiagGroup<"arc",
282                                           [ARCUnsafeRetainedAssign,
283                                            ARCRetainCycles,
284                                            ARCNonPodMemAccess]>;
285def ARCRepeatedUseOfWeakMaybe : DiagGroup<"arc-maybe-repeated-use-of-weak">;
286def ARCRepeatedUseOfWeak : DiagGroup<"arc-repeated-use-of-weak",
287                                     [ARCRepeatedUseOfWeakMaybe]>;
288def Selector : DiagGroup<"selector">;
289def Protocol : DiagGroup<"protocol">;
290def SuperSubClassMismatch : DiagGroup<"super-class-method-mismatch">;
291def OverridingMethodMismatch : DiagGroup<"overriding-method-mismatch">;
292def VariadicMacros : DiagGroup<"variadic-macros">;
293def VectorConversion : DiagGroup<"vector-conversion">;      // clang specific
294def VexingParse : DiagGroup<"vexing-parse">;
295def VLA : DiagGroup<"vla">;
296def VolatileRegisterVar : DiagGroup<"volatile-register-var">;
297def Visibility : DiagGroup<"visibility">;
298def ZeroLengthArray : DiagGroup<"zero-length-array">;
299
300// GCC calls -Wdeprecated-writable-strings -Wwrite-strings.
301def GCCWriteStrings : DiagGroup<"write-strings" , [DeprecatedWritableStr]>;
302
303def CharSubscript : DiagGroup<"char-subscripts">;
304def LargeByValueCopy : DiagGroup<"large-by-value-copy">;
305def DuplicateArgDecl : DiagGroup<"duplicate-method-arg">;
306
307// Aggregation warning settings.
308
309// -Widiomatic-parentheses contains warnings about 'idiomatic'
310// missing parentheses;  it is off by default.  We do not include it
311// in -Wparentheses because most users who use -Wparentheses explicitly
312// do not want these warnings.
313def ParenthesesOnEquality : DiagGroup<"parentheses-equality">;
314def Parentheses : DiagGroup<"parentheses",
315                            [LogicalOpParentheses,
316                             BitwiseOpParentheses,
317                             ShiftOpParentheses,
318                             ParenthesesOnEquality,
319                             DanglingElse]>;
320
321// -Wconversion has its own warnings, but we split a few out for
322// legacy reasons:
323//   - some people want just 64-to-32 warnings
324//   - conversion warnings with constant sources are on by default
325//   - conversion warnings for literals are on by default
326//   - bool-to-pointer conversion warnings are on by default
327//   - __null-to-integer conversion warnings are on by default
328def Conversion : DiagGroup<"conversion",
329                           [BoolConversion,
330                            ConstantConversion,
331                            EnumConversion,
332                            Shorten64To32,
333                            IntConversion,
334                            LiteralConversion,
335                            NonLiteralNullConversion, // (1-1)->pointer (etc)
336                            NullConversion, // NULL->non-pointer
337                            SignConversion,
338                            StringConversion]>,
339                 DiagCategory<"Value Conversion Issue">;
340
341def Unused : DiagGroup<"unused",
342                       [UnusedArgument, UnusedFunction, UnusedLabel,
343                        // UnusedParameter, (matches GCC's behavior)
344                        // UnusedMemberFunction, (clean-up llvm before enabling)
345                        UnusedPrivateField,
346                        UnusedValue, UnusedVariable]>,
347                        DiagCategory<"Unused Entity Issue">;
348
349// Format settings.
350def FormatInvalidSpecifier : DiagGroup<"format-invalid-specifier">;
351def FormatSecurity : DiagGroup<"format-security">;
352def FormatNonStandard : DiagGroup<"format-non-iso">;
353def FormatY2K : DiagGroup<"format-y2k">;
354def Format : DiagGroup<"format",
355                       [FormatExtraArgs, FormatZeroLength, NonNull,
356                        FormatSecurity, FormatY2K, FormatInvalidSpecifier]>,
357             DiagCategory<"Format String Issue">;
358def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
359def Format2 : DiagGroup<"format=2",
360                        [FormatNonLiteral, FormatSecurity, FormatY2K]>;
361
362def TypeSafety : DiagGroup<"type-safety">;
363
364def IntToPointerCast : DiagGroup<"int-to-pointer-cast">;
365
366def Extra : DiagGroup<"extra", [
367    MissingFieldInitializers,
368    IgnoredQualifiers,
369    InitializerOverrides,
370    SemiBeforeMethodBody,
371    MissingMethodReturnType,
372    SignCompare,
373    UnusedParameter
374  ]>;
375
376def Most : DiagGroup<"most", [
377    CharSubscript,
378    Comment,
379    DeleteNonVirtualDtor,
380    Format,
381    Implicit,
382    IntToPointerCast,
383    MismatchedTags,
384    MissingBraces,
385    MultiChar,
386    Reorder,
387    ReturnType,
388    SelfAssignment,
389    SizeofArrayArgument,
390    StringPlusInt,
391    Trigraphs,
392    Uninitialized,
393    UnknownPragmas,
394    Unused,
395    VolatileRegisterVar,
396    ObjCMissingSuperCalls,
397    OverloadedVirtual,
398    PrivateExtern,
399    SelTypeCast
400 ]>;
401
402// Thread Safety warnings 
403def ThreadSafetyAttributes : DiagGroup<"thread-safety-attributes">;
404def ThreadSafetyAnalysis   : DiagGroup<"thread-safety-analysis">;
405def ThreadSafetyPrecise    : DiagGroup<"thread-safety-precise">;
406def ThreadSafety : DiagGroup<"thread-safety",
407                             [ThreadSafetyAttributes, 
408                              ThreadSafetyAnalysis,
409                              ThreadSafetyPrecise]>;
410
411// Note that putting warnings in -Wall will not disable them by default. If a
412// warning should be active _only_ when -Wall is passed in, mark it as
413// DefaultIgnore in addition to putting it here.
414def : DiagGroup<"all", [Most, Parentheses, Switch]>;
415
416// Warnings enabled by -pedantic.  This is magically filled in by TableGen.
417def Pedantic : DiagGroup<"pedantic">;
418
419// Aliases.
420def : DiagGroup<"", [Extra]>;                   // -W = -Wextra
421def : DiagGroup<"endif-labels", [ExtraTokens]>; // -Wendif-labels=-Wendif-tokens
422def : DiagGroup<"comments", [Comment]>;         // -Wcomments = -Wcomment
423def : DiagGroup<"conversion-null",
424                [NullConversion]>; // -Wconversion-null = -Wnull-conversion
425def : DiagGroup<"bool-conversions",
426                [BoolConversion]>; // -Wbool-conversions  = -Wbool-conversion
427def : DiagGroup<"int-conversions",
428                [IntConversion]>; // -Wint-conversions = -Wint-conversion
429def : DiagGroup<"vector-conversions",
430                [VectorConversion]>; // -Wvector-conversions = -Wvector-conversion
431
432// A warning group for warnings that we want to have on by default in clang,
433// but which aren't on by default in GCC.
434def NonGCC : DiagGroup<"non-gcc",
435    [SignCompare, Conversion, LiteralRange]>;
436
437// A warning group for warnings about using C++11 features as extensions in
438// earlier C++ versions.
439def CXX11 : DiagGroup<"c++11-extensions", [CXX11ExtraSemi, CXX11LongLong]>;
440
441def : DiagGroup<"c++0x-extensions", [CXX11]>;
442def DelegatingCtorCycles :
443  DiagGroup<"delegating-ctor-cycles">;
444
445// A warning group for warnings about using C11 features as extensions.
446def C11 : DiagGroup<"c11-extensions">;
447
448// A warning group for warnings about using C99 features as extensions.
449def C99 : DiagGroup<"c99-extensions">;
450
451// A warning group for warnings about GCC extensions.
452def GNU : DiagGroup<"gnu", [GNUDesignator, VLA, ZeroLengthArray]>;
453// A warning group for warnings about code that clang accepts but gcc doesn't.
454def GccCompat : DiagGroup<"gcc-compat">;
455
456// A warning group for warnings about Microsoft extensions.
457def Microsoft : DiagGroup<"microsoft">;
458
459def ObjCNonUnifiedException : DiagGroup<"objc-nonunified-exceptions">;
460
461def ObjCProtocolMethodImpl : DiagGroup<"objc-protocol-method-implementation">;
462
463// ObjC API warning groups.
464def ObjCRedundantLiteralUse : DiagGroup<"objc-redundant-literal-use">;
465def ObjCRedundantAPIUse : DiagGroup<"objc-redundant-api-use", [
466    ObjCRedundantLiteralUse
467  ]>;
468
469def ObjCCocoaAPI : DiagGroup<"objc-cocoa-api", [
470    ObjCRedundantAPIUse
471  ]>;
472
473def ObjCStringComparison : DiagGroup<"objc-string-compare">;
474def ObjCLiteralComparison : DiagGroup<"objc-literal-compare", [
475    ObjCStringComparison
476  ]>;
477
478// Inline ASM warnings.
479def ASMOperandWidths : DiagGroup<"asm-operand-widths">;
480def ASM : DiagGroup<"asm", [
481    ASMOperandWidths
482  ]>;
483