Module:ClangDiags/DiagsLongData19

From emmtrix Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:ClangDiags/DiagsLongData19/doc

local a="category_hist";
local b="id_hist";
local c="message_hist";
local d="hierarchical_hist";
local e="regex1";
local f="regex2";
local g="regex3";
local h="source";
local i="commit";
local j="(?:warning|error|fatal error)\\: ";
local k="maingroup";
local l="groups";
local m="tests2";
local n="Semantic Issue";
local o="CL4";
local p="6.0";
local q="all";
local r="most";
local s="10.0";
local t="7.0";
local u="14.0";
local v="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local w="5.0";
local x="clang/lib/Sema/SemaDeclAttr.cpp";
local y="clang/lib/Sema/SemaChecking.cpp";
local z="11.0";
local A="clang/lib/Sema/SemaExpr.cpp";
local B="16.0";
local C="13.0";
local D="15.0";
local E="None";
local F="";
local G="clang/lib/Sema/SemaDecl.cpp";
local H="ignored-attributes";
local I="8.0";
local J="12.0";
local K="unused";
local L="Unused Entity Issue";
local M="clang/lib/Sema/Sema.cpp";
local N="clang/lib/Sema/SemaDeclObjC.cpp";
local O="unused-value";
local P="clang/lib/Sema/SemaStmt.cpp";
local Q="(?: \\[(?:\\-Werror)?[^\\]]*\\])?";
local R="attributes";
local S="9.0";
local T="clang/lib/Sema/SemaDeclCXX.cpp";
local U="clang/lib/Sema/SemaType.cpp";
local V=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]";
local W="uninitialized";
local X="thread-safety";
local Y="reading";
local Z="thread-safety-analysis";
local ab="writing";
local bb="thread-safety-attributes";
local cb="Lexical or Preprocessor Issue";
local db="unicode";
local eb="95f50964fbf5";
local fb="Implement P2361 Unevaluated string literals";
local gb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local hb="\'C\'";
local ib="\'C\' exclusively";
local jb="7.1";
local kb="D";
local lb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local mb=" template";
local nb="function";
local ob="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local pb="b1c4d5507fad";
local qb="consumed";
local rb="conversion";
local sb="clang/lib/Sema/SemaInit.cpp";
local tb=" \\[(?:\\-Werror,)?\\-Wunused\\-value[^\\]]*\\]";
local ub="clang/lib/Lex/Lexer.cpp";
local vb=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-analysis[^\\]]*\\]";
local wb=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-attributes[^\\]]*\\]";
local xb="struct";
local yb="clang/lib/Sema/SemaExprCXX.cpp";
local zb="clang/lib/Sema/SemaExprObjC.cpp";
local Ab="varargs";
local Bb="unreachable-code-aggressive";
local Cb="extra";
local Db="branch-protection";
local Eb="Parse Issue";
local Fb="return-stack-address";
local Gb="strncat-size";
local Hb="xor-used-as-pow";
local Ib="type-safety";
local Jb="(?:error|warning|fatal error)\\: ";
local Kb="Reland [clang] Check unsupported types in expressions";
local Lb="3dbcea8b957a";
local Mb="Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n  float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315";
local Nb="non-gcc";
local Ob="variable";
local Pb="clang/lib/Sema/SemaAvailability.cpp";
local Qb="result of comparison of ";
local Rb="Value Conversion Issue";
local Sb="clang/lib/Sema/SemaTemplate.cpp";
local Tb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local Ub="ignored-qualifiers";
local Vb="dangling";
local Wb="tautological-constant-in-range-compare";
local Xb="clang/lib/Sema/SemaCast.cpp";
local Yb="unreachable-code";
local Zb="function-multiversion";
local ac="duplicate";
local bc=" \\[(?:\\-Werror,)?\\-Wuninitialized[^\\]]*\\]";
local cc="14f6bfcb52e7";
local dc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574";
local ec="unsupported";
local fc=" \\[(?:\\-Werror,)?\\-Wunicode[^\\]]*\\]";

return {
	["warn_ptr_independentclass_attribute"]={
		[l]={"IndependentClass-attribute"},
		[k]="IndependentClass-attribute",
		[b]="warn_ptr_independentclass_attribute",
		[c]="\'objc_independent_class\' attribute may be put on Objective-C object pointer type only; attribute is ignored",
		[d]="\'objc_independent_class\' attribute may be put on Objective-C object pointer type only; attribute is ignored",
		[e]=j,
		[f]="\'objc_independent_class\' attribute may be put on Objective\\-C object pointer type only; attribute is ignored",
		[g]=" \\[(?:\\-Werror,)?\\-WIndependentClass\\-attribute[^\\]]*\\]",
		[a]=n,
		[i]={"7a60b6db76f5",1429209524,"[Objective-C Sema] patch to introduce IndependentClass","[Objective-C Sema] patch to introduce IndependentClass\nattribute to be placed on Objective-C pointer typedef\nto make them strong enough so on their \"new\" method\nfamily no attempt is made to override these \ntypes. rdar://20255473\n\nllvm-svn: 235128"},
		[h]={{x,3021,"static void handleObjCIndependentClass(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(TD->getLocation(), diag::warn_ptr_independentclass_attribute);"}},
		[m]={
			["clang/test/SemaObjC/objc-independent-class-attribute.m"]={"clang/test/SemaObjC/objc-independent-class-attribute.m:8:70: warning: \'objc_independent_class\' attribute may be put on Objective-C object pointer type only; attribute is ignored [-WIndependentClass-attribute]"}
		}
	},
	["warn_qual_return_type"]={
		[l]={F,o,Cb,Ub},
		[k]=Ub,
		[b]="warn_qual_return_type",
		[c]="\'%0\' type qualifier%s1 on return type %plural{1:has|:have}1 no effect",
		[d]={{nil,nil,{"\'A\' type qualifierB on return type ",{"has","have"}," no effect"}}},
		[e]=j,
		[f]="\'(.*?)\' type qualifier(.*?) on return type (?:has|have) no effect",
		[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]",
		[a]=n,
		[i]={"603d81bf8d05",1279009102,"When forming a function call or message send expression, be sure to","When forming a function call or message send expression, be sure to\nstrip cv-qualifiers from the expression\'s type when the language calls\nfor it: in C, that\'s all the time, while C++ only does it for\nnon-class types. \n\nCentralized the computation of the call expression type in\nQualType::getCallResultType() and some helper functions in other nodes\n(FunctionDecl, ObjCMethodDecl, FunctionType), and updated all relevant\ncallers of getResultType() to getCallResultType().\n\nFixes PR7598 and PR7463, along with a bunch of getResultType() call\nsites that weren\'t stripping references off the result type (nothing\nstripped cv-qualifiers properly before this change).\n\nllvm-svn: 108234"},
		[h]={{U,3328,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n  // ...\n  if (FTI.hasTrailingReturnType()) {\n    S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, RetTy.getLocalCVRQualifiers(), FTI.getTrailingReturnTypeLoc());"},{U,3345,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n  // ...\n  for (unsigned OuterChunkIndex = FunctionChunkIndex + 1, End = D.getNumTypeObjects(); OuterChunkIndex != End; ++OuterChunkIndex) {\n    // ...\n    case DeclaratorChunk::Pointer: {\n      // ...\n      S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, PTI.TypeQuals, SourceLocation(), PTI.ConstQualLoc, PTI.VolatileQualLoc, PTI.RestrictQualLoc, PTI.AtomicQualLoc, PTI.UnalignedQualLoc);"},{U,3365,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n  // ...\n  for (unsigned OuterChunkIndex = FunctionChunkIndex + 1, End = D.getNumTypeObjects(); OuterChunkIndex != End; ++OuterChunkIndex) {\n    // ...\n    case DeclaratorChunk::Function:\n    case DeclaratorChunk::BlockPointer:\n    case DeclaratorChunk::Reference:\n    case DeclaratorChunk::Array:\n    case DeclaratorChunk::MemberPointer:\n    case DeclaratorChunk::Pipe:\n      // ...\n      S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, RetTy.getCVRQualifiers() | AtomicQual, D.getIdentifierLoc());"},{U,3382,"// Diagnose pointless type qualifiers on the return type of a function.\nstatic void diagnoseRedundantReturnTypeQualifiers(Sema &S, QualType RetTy, Declarator &D, unsigned FunctionChunkIndex) {\n  // ...\n  S.diagnoseIgnoredQualifiers(diag::warn_qual_return_type, D.getDeclSpec().getTypeQualifiers(), D.getIdentifierLoc(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc(), D.getDeclSpec().getUnalignedSpecLoc());"}},
		[m]={
			["clang/test/SemaCXX/return.cpp"]={"clang/test/SemaCXX/return.cpp:26:1: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:27:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:31:1: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:36:1: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:39:7: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:40:7: warning: \'volatile\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:43:1: warning: \'const volatile\' type qualifiers on return type have no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:47:1: warning: \'const volatile\' type qualifiers on return type have no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:53:1: warning: \'volatile\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:55:1: warning: \'const volatile\' type qualifiers on return type have no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:60:1: warning: \'_Atomic\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:65:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:68:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]","clang/test/SemaCXX/return.cpp:78:5: warning: \'const\' type qualifier on return type has no effect [-Wignored-qualifiers]"}
		}
	},
	["warn_quoted_include_in_framework_header"]={
		[l]={"quoted-include-in-framework-header"},
		[k]="quoted-include-in-framework-header",
		[b]={{nil,t,"warn_quoted_include_in_framework_header"}},
		[c]={{nil,t,"double-quoted include \"%0\" in framework header, expected angle-bracketed instead"}},
		[d]={{nil,t,"double-quoted include \"A\" in framework header, expected angle-bracketed instead"}},
		[e]=j,
		[f]="double\\-quoted include \"(.*?)\" in framework header, expected angle\\-bracketed instead",
		[g]=" \\[(?:\\-Werror,)?\\-Wquoted\\-include\\-in\\-framework\\-header[^\\]]*\\]",
		[a]={{nil,t,cb}},
		[i]={"d1d83df80764",1529532719,"Warning for framework headers using double quote includes","Warning for framework headers using double quote includes\n\nIntroduce -Wquoted-include-in-framework-header, which should fire a warning\nwhenever a quote include appears in a framework header and suggest a fix-it.\nFor instance, for header A.h added in the tests, this is how the warning looks\nlike:\n\n./A.framework/Headers/A.h:2:10: warning: double-quoted include \"A0.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]\n#include \"A0.h\"\n         ^~~~~~\n         <A/A0.h>\n./A.framework/Headers/A.h:3:10: warning: double-quoted include \"B.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]\n#include \"B.h\"\n         ^~~~~\n         <B.h>\n\nThis helps users to prevent frameworks from using local headers when in fact\nthey should be targetting system level ones.\n\nThe warning is off by default.\n\nDifferential Revision: https://reviews.llvm.org/D47157\n\nrdar://problem/37077034\n\nllvm-svn: 335184"},
		[h]={{"clang/lib/Lex/HeaderSearch.cpp",843,"static void diagnoseFrameworkInclude(DiagnosticsEngine &Diags, SourceLocation IncludeLoc, StringRef Includer, StringRef IncludeFilename, const FileEntry *IncludeFE, bool isAngled = false, bool FoundByHeaderMap = false) {\n  // ...\n  if (!isAngled && !FoundByHeaderMap) {\n    // ...\n    Diags.Report(IncludeLoc, diag::warn_quoted_include_in_framework_header) << IncludeFilename << FixItHint::CreateReplacement(IncludeLoc, NewInclude);"}},
		[m]={
			["clang/test/Modules/double-quotes.m"]={"clang/test/Modules/Inputs/double-quotes/A.framework/Headers/A.h:1:10: warning: double-quoted include \"A0.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]","clang/test/Modules/Inputs/double-quotes/A.framework/Headers/A.h:2:10: warning: double-quoted include \"B.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/Modules/Inputs/double-quotes/flat-header-path/Z.h:1:9: warning: double-quoted include \"B.h\" in framework header, expected angle-bracketed instead [-Wquoted-include-in-framework-header]"}
		}
	},
	["warn_reading_std_cxx_module_by_implicit_paths"]={
		[l]={"read-modules-implicitly"},
		[k]="read-modules-implicitly",
		[b]="warn_reading_std_cxx_module_by_implicit_paths",
		[c]="it is deprecated to read module \'%0\' implicitly; it is going to be removed in clang 18; consider to specify the dependencies explicitly",
		[d]="it is deprecated to read module \'A\' implicitly; it is going to be removed in clang 18; consider to specify the dependencies explicitly",
		[e]=j,
		[f]="it is deprecated to read module \'(.*?)\' implicitly; it is going to be removed in clang 18; consider to specify the dependencies explicitly",
		[g]=" \\[(?:\\-Werror,)?\\-Wread\\-modules\\-implicitly[^\\]]*\\]",
		[a]="AST Deserialization Issue",
		[i]={"e22fa1d4c615",1684317067,"[C++20] [Modules] Emit a warning if the we load the modules by implicit generated path","[C++20] [Modules] Emit a warning if the we load the modules by implicit generated path\n\nA step to address https://github.com/llvm/llvm-project/issues/62707.\n\nIt is not user friendly enough to drop the implicitly generated path\ndirectly. Let\'s emit the warning first and drop it in the next version."},
		[h]={{"clang/lib/Serialization/ASTReader.cpp",2918,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case IMPORTS: {\n      // ...\n      while (Idx < N) {\n        // ...\n        if (ImportedFile.empty()) {\n          // It is deprecated for C++20 Named modules to use the implicitly\n          // paths.\n          if (IsImportingStdCXXModule)\n            Diag(clang::diag::warn_reading_std_cxx_module_by_implicit_paths) << ImportedName;"}}
	},
	["warn_readonly_property"]={
		[l]={"property-attribute-mismatch"},
		[k]="property-attribute-mismatch",
		[b]="warn_readonly_property",
		[c]="attribute \'readonly\' of property %0 restricts attribute \'readwrite\' of property inherited from %1",
		[d]="attribute \'readonly\' of property A restricts attribute \'readwrite\' of property inherited from B",
		[e]=j,
		[f]="attribute \'readonly\' of property (.*?) restricts attribute \'readwrite\' of property inherited from (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wproperty\\-attribute\\-mismatch[^\\]]*\\]",
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{"clang/lib/Sema/SemaObjCProperty.cpp",1651,"/// DiagnosePropertyMismatch - Compares two properties for their\n/// attributes and types and warns on a variety of inconsistencies.\n///\nvoid Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, ObjCPropertyDecl *SuperProperty, const IdentifierInfo *inheritedName, bool OverridingProtocolProperty) {\n  // ...\n  // We allow readonly properties without an explicit ownership\n  // (assign/unsafe_unretained/weak/retain/strong/copy) in super class\n  // to be overridden by a property with any explicit ownership in the subclass.\n  if (!OverridingProtocolProperty && !getOwnershipRule(SAttr) && getOwnershipRule(CAttr))\n  // ...\n  else {\n    if ((CAttr & ObjCPropertyAttribute::kind_readonly) && (SAttr & ObjCPropertyAttribute::kind_readwrite))\n      Diag(Property->getLocation(), diag::warn_readonly_property) << Property->getDeclName() << inheritedName;"}},
		[m]={
			["clang/test/SemaObjC/property-3.m"]={"clang/test/SemaObjC/property-3.m:12:25: warning: attribute \'readonly\' of property \'d1\' restricts attribute \'readwrite\' of property inherited from \'I\' [-Wproperty-attribute-mismatch]"}
		}
	},
	["warn_receiver_forward_class"]={
		[l]={"receiver-forward-class"},
		[k]="receiver-forward-class",
		[b]="warn_receiver_forward_class",
		[c]="receiver %0 is a forward class and corresponding @interface may not exist",
		[d]="receiver A is a forward class and corresponding @interface may not exist",
		[e]=j,
		[f]="receiver (.*?) is a forward class and corresponding @interface may not exist",
		[g]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-forward\\-class[^\\]]*\\]",
		[a]=n,
		[i]={"1bd844da8057",1241823756,"Warn if forward class is used as a receiver.","Warn if forward class is used as a receiver.\n\nllvm-svn: 71278"},
		[h]={{zb,2664,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  // Find the method we are messaging.\n  if (!Method) {\n    // ...\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {"}},
		[m]={
			["clang/test/SemaObjC/forward-class-receiver.m"]={"clang/test/SemaObjC/forward-class-receiver.m:12:4: warning: receiver \'NotKnown\' is a forward class and corresponding @interface may not exist [-Wreceiver-forward-class]"}
		}
	},
	["warn_receiver_forward_instance"]={
		[l]={"receiver-forward-class"},
		[k]="receiver-forward-class",
		[b]="warn_receiver_forward_instance",
		[c]="receiver type %0 for instance message is a forward declaration",
		[d]="receiver type A for instance message is a forward declaration",
		[e]=j,
		[f]="receiver type (.*?) for instance message is a forward declaration",
		[g]=" \\[(?:\\-Werror,)?\\-Wreceiver\\-forward\\-class[^\\]]*\\]",
		[a]="ARC Semantic Issue",
		[i]={"c934de67e0c6",1328230964,"objc: Issue diagnostic when receiver type is a forward class declaration and","objc: Issue diagnostic when receiver type is a forward class declaration and\nit is treated as of \'id\' type resulting in multiple method lookup.\n// rdar://10686120\n\nllvm-svn: 149653"},
		[h]={{zb,3067,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n        // ...\n        if (RequireCompleteType(Loc, OCIType->getPointeeType(), getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_instance : diag::warn_receiver_forward_instance, RecRange)) {"}},
		[m]={
			["clang/test/SemaObjC/receiver-forward-class.m"]={"clang/test/SemaObjC/receiver-forward-class.m:15:11: warning: receiver type \'A\' for instance message is a forward declaration [-Wreceiver-forward-class]"}
		}
	},
	["warn_redecl_library_builtin"]={
		[l]={"incompatible-library-redeclaration"},
		[k]="incompatible-library-redeclaration",
		[b]="warn_redecl_library_builtin",
		[c]="incompatible redeclaration of library function %0",
		[d]="incompatible redeclaration of library function A",
		[e]=j,
		[f]="incompatible redeclaration of library function (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-library\\-redeclaration[^\\]]*\\]",
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{G,4296,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (Old->isImplicit() && (BuiltinID = Old->getBuiltinID())) {\n    // If it\'s actually a library-defined builtin function like \'malloc\'\n    // or \'printf\', just warn about the incompatible redeclaration.\n    if (Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID)) {\n      Diag(New->getLocation(), diag::warn_redecl_library_builtin) << New;"}},
		[m]={
			["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: warning: incompatible redeclaration of library function \'rindex\' [-Wincompatible-library-redeclaration]"}
		}
	},
	["warn_redeclaration_without_attribute_prev_attribute_ignored"]={
		[l]={"inconsistent-dllimport","microsoft"},
		[k]="inconsistent-dllimport",
		[b]="warn_redeclaration_without_attribute_prev_attribute_ignored",
		[c]="%q0 redeclared without %1 attribute: previous %1 ignored",
		[d]="A redeclared without B attribute: previous B ignored",
		[e]=j,
		[f]="(.*?) redeclared without (.*?) attribute\\: previous (.*?) ignored",
		[g]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-dllimport[^\\]]*\\]",
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{G,7147,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n    // ...\n    } else if (IsMicrosoftABI && IsSpecialization) {\n    // ...\n    } else {\n      S.Diag(NewDecl->getLocation(), diag::warn_redeclaration_without_attribute_prev_attribute_ignored) << NewDecl << OldImportAttr;"}},
		[m]={
			["clang/test/Sema/dllimport.c"]={"clang/test/Sema/dllimport.c:108:34: warning: \'GlobalRedecl3\' redeclared without \'dllimport\' attribute: previous \'dllimport\' ignored [-Winconsistent-dllimport]","clang/test/Sema/dllimport.c:180:28: warning: \'redecl2\' redeclared without \'dllimport\' attribute: previous \'dllimport\' ignored [-Winconsistent-dllimport]"}
		}
	},
	["warn_redeclaration_without_import_attribute"]={
		[l]={"inconsistent-dllimport","microsoft"},
		[k]="inconsistent-dllimport",
		[b]="warn_redeclaration_without_import_attribute",
		[c]="%q0 redeclared without \'dllimport\' attribute: \'dllexport\' attribute added",
		[d]="A redeclared without \'dllimport\' attribute: \'dllexport\' attribute added",
		[e]=j,
		[f]="(.*?) redeclared without \'dllimport\' attribute\\: \'dllexport\' attribute added",
		[g]=" \\[(?:\\-Werror,)?\\-Winconsistent\\-dllimport[^\\]]*\\]",
		[a]=n,
		[i]={"eebc4af0ed2f",1464175962,"[ms][dll] #26935 Defining a dllimport function should cause it to be exported","[ms][dll] #26935 Defining a dllimport function should cause it to be exported\n\nIf we have some function with dllimport attribute and then we have the function\ndefinition in the same module but without dllimport attribute we should add\ndllexport attribute to this function definition.\nThe same should be done for variables.\n\nExample:\nstruct __declspec(dllimport) C3 {\n  ~C3();\n};\nC3::~C3() {;} // we should export this definition.\n\nPatch by Andrew V. Tischenko\n\nDifferential revision: http://reviews.llvm.org/D18953\n\nllvm-svn: 270686"},
		[h]={{G,7135,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  // ...\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n      // ...\n      } else {\n        S.Diag(NewDecl->getLocation(), diag::warn_redeclaration_without_import_attribute) << NewDecl;"}},
		[m]={
			["clang/test/CodeGen/flip-dllimport.c"]={"clang/test/CodeGen/flip-dllimport.c:7:6: warning: \'f\' redeclared without \'dllimport\' attribute: \'dllexport\' attribute added [-Winconsistent-dllimport]"}
		}
	},
	["warn_redefine_extname_not_applied"]={
		[l]={"pragmas"},
		[k]="pragmas",
		[b]="warn_redefine_extname_not_applied",
		[c]="#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1",
		[d]={{nil,nil,{"#pragma redefine_extname is applicable to external C declarations only; not applied to ",{nb,Ob}," B"}}},
		[e]=j,
		[f]="\\#pragma redefine_extname is applicable to external C declarations only; not applied to (?:function|variable) (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wpragmas[^\\]]*\\]",
		[a]=n,
		[i]={"7572e58b66bc",1437066413,"Disable #pragma redefine_extname for C++ code as it does not make sense in such a context.","Disable #pragma redefine_extname for C++ code as it does not make sense in such a context.\n\nPatch by Andrey Bokhanko!\n\nllvm-svn: 242420"},
		[h]={{G,7985,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n  // ...\n  } else if (!ExtnameUndeclaredIdentifiers.empty()) {\n    // ...\n    if (I != ExtnameUndeclaredIdentifiers.end()) {\n      if (isDeclExternC(NewVD)) {\n      // ...\n      } else\n        Diag(NewVD->getLocation(), diag::warn_redefine_extname_not_applied) << /*Variable*/ 1 << NewVD;"},{G,10102,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  // Handle GNU asm-label extension (encoded as an attribute).\n  if (Expr *E = (Expr *)D.getAsmLabel()) {\n  // ...\n  } else if (!ExtnameUndeclaredIdentifiers.empty()) {\n    // ...\n    if (I != ExtnameUndeclaredIdentifiers.end()) {\n      if (isDeclExternC(NewFD)) {\n      // ...\n      } else\n        Diag(NewFD->getLocation(), diag::warn_redefine_extname_not_applied) << /*Variable*/ 0 << NewFD;"},{G,19979,"void Sema::ActOnPragmaRedefineExtname(IdentifierInfo *Name, IdentifierInfo *AliasName, SourceLocation PragmaLoc, SourceLocation NameLoc, SourceLocation AliasNameLoc) {\n  // ...\n  // If a declaration that:\n  // 1) declares a function or a variable\n  // 2) has external linkage\n  // already exists, add a label attribute to it.\n  if (PrevDecl && (isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) {\n    if (isDeclExternC(PrevDecl))\n    // ...\n    else\n      Diag(PrevDecl->getLocation(), diag::warn_redefine_extname_not_applied) << /*Variable*/ (isa<FunctionDecl>(PrevDecl) ? 0 : 1) << PrevDecl;"}},
		[m]={
			["clang/test/SemaCXX/redefine_extname.cpp"]={"clang/test/SemaCXX/redefine_extname.cpp:6:12: warning: #pragma redefine_extname is applicable to external C declarations only; not applied to function \'foo_cpp\' [-Wpragmas]"}
		}
	},
	["warn_redefinition_in_param_list"]={
		[l]={"visibility"},
		[k]="visibility",
		[b]="warn_redefinition_in_param_list",
		[c]="redefinition of %0 will not be visible outside of this function",
		[d]="redefinition of A will not be visible outside of this function",
		[e]=j,
		[f]="redefinition of (.*?) will not be visible outside of this function",
		[g]=" \\[(?:\\-Werror,)?\\-Wvisibility[^\\]]*\\]",
		[a]=n,
		[i]={"051390fffab6",1330452731,"Correctly track tags and enum members defined in the prototype of a function, and ensure they are pr...","Correctly track tags and enum members defined in the prototype of a function, and ensure they are properly scoped.\n\nThis fixes code such as:\n\nenum e {x, y};\nint f(enum {y, x} n) {\n  return 0;\n}\n\nThis finally fixes PR5464 and PR5477.\n\nllvm-svn: 151638"},
		[h]={{G,17367,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              // ...\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              // ...\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                  Diag(NameLoc, diag::warn_redefinition_in_param_list) << Name;"}},
		[m]={
			["clang/test/Sema/decl-in-prototype.c"]={"clang/test/Sema/decl-in-prototype.c:26:26: warning: redefinition of \'b\' will not be visible outside of this function [-Wvisibility]","clang/test/Sema/decl-in-prototype.c:34:27: warning: redefinition of \'ab\' will not be visible outside of this function [-Wvisibility]","clang/test/Sema/decl-in-prototype.c:34:51: warning: redefinition of \'ab\' will not be visible outside of this function [-Wvisibility]"}
		}
	},
	["warn_redundant_loop_iteration"]={
		[l]={o,q,"for-loop-analysis","loop-analysis",r},
		[k]="for-loop-analysis",
		[b]="warn_redundant_loop_iteration",
		[c]="variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body",
		[d]={{nil,nil,{"variable A is ",{"decremented","incremented"}," both in the loop header and in the loop body"}}},
		[e]=j,
		[f]="variable (.*?) is (?:decremented|incremented) both in the loop header and in the loop body",
		[g]=" \\[(?:\\-Werror,)?\\-Wfor\\-loop\\-analysis[^\\]]*\\]",
		[a]=n,
		[i]={"4e7c9628917a",1375824714,"Add a new warning to -Wloop-analysis to detect suspicious increments or","Add a new warning to -Wloop-analysis to detect suspicious increments or\ndecrements inside for loops.  Idea for this warning proposed in PR15636:\n\nhttp://llvm.org/bugs/show_bug.cgi?id=15636\n\nllvm-svn: 187817"},
		[h]={{P,2082,"// Emit a warning when a loop increment/decrement appears twice per loop\n// iteration.  The conditions which trigger this warning are:\n// 1) The last statement in the loop body and the third expression in the\n//    for loop are both increment or both decrement of the same variable\n// 2) No continue statements in the loop body.\nvoid CheckForRedundantIteration(Sema &S, Expr *Third, Stmt *Body) {\n  // ...\n  if (S.Diags.isIgnored(diag::warn_redundant_loop_iteration, Third->getBeginLoc()))"},{P,2105,"// Emit a warning when a loop increment/decrement appears twice per loop\n// iteration.  The conditions which trigger this warning are:\n// 1) The last statement in the loop body and the third expression in the\n//    for loop are both increment or both decrement of the same variable\n// 2) No continue statements in the loop body.\nvoid CheckForRedundantIteration(Sema &S, Expr *Third, Stmt *Body) {\n  // ...\n  S.Diag(LastDRE->getLocation(), diag::warn_redundant_loop_iteration) << LastDRE->getDecl() << LastIncrement;"}},
		[m]={
			["clang/test/SemaCXX/warn-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-loop-analysis.cpp:160:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:164:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:168:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:171:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:176:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:180:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:184:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:187:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:209:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:223:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:227:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:231:5: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:234:7: warning: variable \'i\' is incremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:239:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:243:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:247:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:250:7: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:272:5: warning: variable \'i\' is decremented both in the loop header and in the loop body [-Wfor-loop-analysis]"}
		}
	},
	["warn_redundant_move_on_return"]={
		[l]={o,q,r,"move","redundant-move"},
		[k]="redundant-move",
		[b]="warn_redundant_move_on_return",
		[c]="redundant move in return statement",
		[d]="redundant move in return statement",
		[e]=j,
		[f]="redundant move in return statement",
		[g]=" \\[(?:\\-Werror,)?\\-Wredundant\\-move[^\\]]*\\]",
		[a]=n,
		[i]={"ac3eca536d3d",1430272337,"Add -Wpessimizing-move and -Wredundant-move warnings.","Add -Wpessimizing-move and -Wredundant-move warnings.\n\n-Wpessimizing-move warns when a call to std::move would prevent copy elision\nif the argument was not wrapped in a call.  This happens when moving a local\nvariable in a return statement when the variable is the same type as the\nreturn type or using a move to create a new object from a temporary object.\n\n-Wredundant-move warns when an implicit move would already be made, so the\nstd::move call is not needed, such as when moving a local variable in a return\nthat is different from the return type.\n\nDifferential Revision: http://reviews.llvm.org/D7633\n\nllvm-svn: 236075"},
		[h]={{sb,8403,"/// Provide warnings when std::move is used on construction.\nstatic void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr, bool IsReturnStmt) {\n  // ...\n  if (IsReturnStmt) {\n    // ...\n    // If we\'re returning a function parameter, copy elision\n    // is not possible.\n    if (isa<ParmVarDecl>(VD))\n      DiagID = diag::warn_redundant_move_on_return;"}},
		[m]={
			["clang/test/SemaCXX/warn-redundant-move.cpp"]={"clang/test/SemaCXX/warn-redundant-move.cpp:82:10: warning: redundant move in return statement [-Wredundant-move]","clang/test/SemaCXX/warn-redundant-move.cpp:96:12: warning: redundant move in return statement [-Wredundant-move]"}
		}
	},
	["warn_redundant_parens_around_declarator"]={
		[l]={"redundant-parens"},
		[k]="redundant-parens",
		[b]={{nil,p,"warn_redundant_parens_around_declarator"}},
		[c]={{nil,p,"redundant parentheses surrounding declarator"}},
		[d]={{nil,p,"redundant parentheses surrounding declarator"}},
		[e]=j,
		[f]="redundant parentheses surrounding declarator",
		[g]=" \\[(?:\\-Werror,)?\\-Wredundant\\-parens[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a","Add a \"vexing parse\" warning for ambiguity between a variable declaration and a\nfunction-style cast.\n\nThis fires for cases such as\n\n  T(x);\n\n... where \'x\' was previously declared and T is a type. This construct declares\na variable named \'x\' rather than the (probably expected) interpretation of a\nfunction-style cast of \'x\' to T.\n\nllvm-svn: 314570"},
		[h]={{U,4016,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  // ...\n  if (!CouldBeTemporaryObject) {\n    // ...\n    S.Diag(Paren.Loc, diag::warn_redundant_parens_around_declarator) << ParenRange << FixItHint::CreateRemoval(Paren.Loc) << FixItHint::CreateRemoval(Paren.EndLoc);"}},
		[m]={
			["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:88:3: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:270:5: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:271:5: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:274:5: warning: redundant parentheses surrounding declarator [-Wredundant-parens]","clang/test/Parser/cxx-decl.cpp:279:6: warning: redundant parentheses surrounding declarator [-Wredundant-parens]"}
		}
	},
	["warn_reference_field_is_uninit"]={
		[l]={o,q,r,W},
		[k]=W,
		[b]="warn_reference_field_is_uninit",
		[c]="reference %0 is not yet bound to a value when used here",
		[d]="reference A is not yet bound to a value when used here",
		[e]=j,
		[f]="reference (.*?) is not yet bound to a value when used here",
		[g]=bc,
		[a]=n,
		[i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning.","Better wording for reference self-initialization warning.\n\nllvm-svn: 162198"},
		[h]={{T,3859,"class UninitializedFieldVisitor : public EvaluatedExprVisitor<UninitializedFieldVisitor> {\n  // ...\n  void HandleMemberExpr(MemberExpr *ME, bool CheckReferenceOnly, bool AddressOf) {\n    // ...\n    unsigned diag = IsReference ? diag::warn_reference_field_is_uninit : diag::warn_field_is_uninit;"}},
		[m]={
			["clang/test/SemaCXX/uninitialized.cpp"]={"clang/test/SemaCXX/uninitialized.cpp:840:13: warning: reference \'a\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:853:10: warning: reference \'b\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:855:14: warning: reference \'c\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1086:9: warning: reference \'c\' is not yet bound to a value when used here [-Wuninitialized]","clang/test/SemaCXX/uninitialized.cpp:1087:9: warning: reference \'c\' is not yet bound to a value when used here [-Wuninitialized]"}
		}
	},
	["warn_register_objc_catch_parm"]={
		[b]="warn_register_objc_catch_parm",
		[c]="\'register\' storage specifier on @catch parameter will be ignored",
		[d]="\'register\' storage specifier on @catch parameter will be ignored",
		[e]=j,
		[f]="\'register\' storage specifier on @catch parameter will be ignored",
		[g]=Q,
		[a]=n,
		[i]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"},
		[h]={{N,5193,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // We allow the \"register\" storage class on exception variables because\n  // GCC did, but we drop it completely. Any other storage class is an error.\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n    Diag(DS.getStorageClassSpecLoc(), diag::warn_register_objc_catch_parm) << FixItHint::CreateRemoval(SourceRange(DS.getStorageClassSpecLoc()));"}}
	},
	["warn_reinterpret_different_from_static"]={
		[l]={"reinterpret-base-class"},
		[k]="reinterpret-base-class",
		[b]="warn_reinterpret_different_from_static",
		[c]="\'reinterpret_cast\' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from \'static_cast\'",
		[d]={{nil,nil,{"\'reinterpret_cast\' ",{"from","to"}," class A ",{"to","from"}," its ",{"virtual base","base at non-zero offset"}," B behaves differently from \'static_cast\'"}}},
		[e]=j,
		[f]="\'reinterpret_cast\' (?:from|to) class (.*?) (?:to|from) its (?:virtual base|base at non\\-zero offset) (.*?) behaves differently from \'static_cast\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wreinterpret\\-base\\-class[^\\]]*\\]",
		[a]=n,
		[i]={"cda80833090b",1363921094,"Warn about attempts to reinterpret_cast between two types that are","Warn about attempts to reinterpret_cast between two types that are\nhierarchy-related at a possibly nonzero offset.\n\nPatch by Alexander Zinenko!\n\nllvm-svn: 177698"},
		[h]={{Xb,1073,"/// Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is not used as upcast\n/// or downcast between respective pointers or references.\nstatic void DiagnoseReinterpretUpDownCast(Sema &Self, const Expr *SrcExpr, QualType DestType, SourceRange OpRange) {\n  // ...\n  Self.Diag(BeginLoc, diag::warn_reinterpret_different_from_static) << DerivedType << BaseType << !VirtualBase << int(ReinterpretKind) << OpRange;"}},
		[m]={
			["clang/test/SemaCXX/warn-reinterpret-base-class.cpp"]={"clang/test/SemaCXX/warn-reinterpret-base-class.cpp:123:10: warning: \'reinterpret_cast\' to class \'DVA *\' from its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:128:10: warning: \'reinterpret_cast\' to class \'DDVA *\' from its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:133:10: warning: \'reinterpret_cast\' to class \'DMA *\' from its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:156:9: warning: \'reinterpret_cast\' to class \'DVA &\' from its virtual base \'A\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:161:9: warning: \'reinterpret_cast\' to class \'DDVA &\' from its virtual base \'A\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:166:9: warning: \'reinterpret_cast\' to class \'DMA &\' from its virtual base \'A\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:186:10: warning: \'reinterpret_cast\' from class \'DVA *\' to its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:191:10: warning: \'reinterpret_cast\' from class \'DDVA *\' to its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:196:10: warning: \'reinterpret_cast\' from class \'DDVA *\' to its virtual base \'DA *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:201:10: warning: \'reinterpret_cast\' from class \'DMA *\' to its virtual base \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:206:10: warning: \'reinterpret_cast\' from class \'DMA *\' to its virtual base \'DA *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:226:9: warning: \'reinterpret_cast\' from class \'DVA\' to its virtual base \'A &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:231:9: warning: \'reinterpret_cast\' from class \'DDVA\' to its virtual base \'A &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:236:9: warning: \'reinterpret_cast\' from class \'DDVA\' to its virtual base \'DA &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:241:9: warning: \'reinterpret_cast\' from class \'DMA\' to its virtual base \'A &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:246:9: warning: \'reinterpret_cast\' from class \'DMA\' to its virtual base \'DA &\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:273:9: warning: \'reinterpret_cast\' to class \'F *\' from its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:278:9: warning: \'reinterpret_cast\' to class \'G *\' from its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:284:9: warning: \'reinterpret_cast\' to class \'I *\' from its virtual base \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:291:9: warning: \'reinterpret_cast\' to class \'I *\' from its virtual base \'F *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:299:9: warning: \'reinterpret_cast\' to class \'H *\' from its base at non-zero offset \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:303:9: warning: \'reinterpret_cast\' to class \'K\' (aka \'const F *\') from its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:310:9: warning: \'reinterpret_cast\' from class \'F *\' to its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:316:9: warning: \'reinterpret_cast\' from class \'G *\' to its base at non-zero offset \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:326:9: warning: \'reinterpret_cast\' from class \'H *\' to its base at non-zero offset \'A *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:330:9: warning: \'reinterpret_cast\' from class \'I *\' to its virtual base \'F *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]","clang/test/SemaCXX/warn-reinterpret-base-class.cpp:335:9: warning: \'reinterpret_cast\' from class \'I *\' to its virtual base \'E *\' behaves differently from \'static_cast\' [-Wreinterpret-base-class]"}
		}
	},
	["warn_related_result_type_compatibility_class"]={
		[b]="warn_related_result_type_compatibility_class",
		[c]="method is expected to return an instance of its class type %diff{$, but is declared to return $|, but is declared to return different type}0,1",
		[d]={{nil,nil,{"method is expected to return an instance of its class type ",{"A, but is declared to return B",", but is declared to return different type"}}}},
		[e]=j,
		[f]="method is expected to return an instance of its class type (?:(.*?), but is declared to return (.*?)|, but is declared to return different type)",
		[g]=Q,
		[a]="Related Result Type Issue",
		[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics.","Implement Objective-C Related Result Type semantics.\n\nRelated result types apply Cocoa conventions to the type of message\nsends and property accesses to Objective-C methods that are known to\nalways return objects whose type is the same as the type of the\nreceiving class (or a subclass thereof), such as +alloc and\n-init. This tightens up static type safety for Objective-C, so that we\nnow diagnose mistakes like this:\n\nt.m:4:10: warning: incompatible pointer types initializing \'NSSet *\'\nwith an\n      expression of type \'NSArray *\' [-Wincompatible-pointer-types]\n  NSSet *array = [[NSArray alloc] init];\n         ^       ~~~~~~~~~~~~~~~~~~~~~~\n/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:72:1:\nnote: \n      instance method \'init\' is assumed to return an instance of its\n      receiver\n      type (\'NSArray *\')\n- (id)init;\n^\n\nIt also means that we get decent type inference when writing code in\nObjective-C++0x:\n\n  auto array = [[NSMutableArray alloc] initWithObjects:@\"one\",  @\"two\",nil];\n  //    ^ now infers NSMutableArray* rather than id\n\nllvm-svn: 132868"},
		[h]={{N,164,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    // ...\n    if (CurrentClass) {\n      Diag(NewMethod->getLocation(), diag::warn_related_result_type_compatibility_class) << Context.getObjCInterfaceType(CurrentClass) << ResultType << ResultTypeRange;"}},
		[m]={
			["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:89:1: warning: method is expected to return an instance of its class type \'B\', but is declared to return \'Unrelated *\'","clang/test/SemaObjC/related-result-type-inference.m:96:1: warning: method is expected to return an instance of its class type \'C\', but is declared to return \'Unrelated *\'","clang/test/SemaObjC/related-result-type-inference.m:110:1: warning: method is expected to return an instance of its class type \'D\', but is declared to return \'Unrelated *\'","clang/test/SemaObjC/related-result-type-inference.m:114:1: warning: method is expected to return an instance of its class type \'D\', but is declared to return \'Unrelated *\'"}
		}
	},
	["warn_related_result_type_compatibility_protocol"]={
		[b]="warn_related_result_type_compatibility_protocol",
		[c]="protocol method is expected to return an instance of the implementing class, but is declared to return %0",
		[d]="protocol method is expected to return an instance of the implementing class, but is declared to return A",
		[e]=j,
		[f]="protocol method is expected to return an instance of the implementing class, but is declared to return (.*?)",
		[g]=Q,
		[a]="Related Result Type Issue",
		[i]={"33823727c80a",1307754570,"Implement Objective-C Related Result Type semantics.","Implement Objective-C Related Result Type semantics.\n\nRelated result types apply Cocoa conventions to the type of message\nsends and property accesses to Objective-C methods that are known to\nalways return objects whose type is the same as the type of the\nreceiving class (or a subclass thereof), such as +alloc and\n-init. This tightens up static type safety for Objective-C, so that we\nnow diagnose mistakes like this:\n\nt.m:4:10: warning: incompatible pointer types initializing \'NSSet *\'\nwith an\n      expression of type \'NSArray *\' [-Wincompatible-pointer-types]\n  NSSet *array = [[NSArray alloc] init];\n         ^       ~~~~~~~~~~~~~~~~~~~~~~\n/System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:72:1:\nnote: \n      instance method \'init\' is assumed to return an instance of its\n      receiver\n      type (\'NSArray *\')\n- (id)init;\n^\n\nIt also means that we get decent type inference when writing code in\nObjective-C++0x:\n\n  auto array = [[NSMutableArray alloc] initWithObjects:@\"one\",  @\"two\",nil];\n  //    ^ now infers NSMutableArray* rather than id\n\nllvm-svn: 132868"},
		[h]={{N,170,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  if (Overridden->hasRelatedResultType() && !NewMethod->hasRelatedResultType()) {\n    // ...\n    if (CurrentClass) {\n    // ...\n    } else {\n      Diag(NewMethod->getLocation(), diag::warn_related_result_type_compatibility_protocol) << ResultType << ResultTypeRange;"}},
		[m]={
			["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:125:1: warning: protocol method is expected to return an instance of the implementing class, but is declared to return \'int\'"}
		}
	},
	["warn_remainder_division_by_zero"]={
		[l]={"div-by-zero","division-by-zero"},
		[k]="division-by-zero",
		[b]="warn_remainder_division_by_zero",
		[c]="%select{remainder|division}0 by zero is undefined",
		[d]={{nil,nil,{{"remainder","division"}," by zero is undefined"}}},
		[e]=j,
		[f]="(?:remainder|division) by zero is undefined",
		[g]=" \\[(?:\\-Werror,)?\\-Wdivision\\-by\\-zero[^\\]]*\\]",
		[a]=n,
		[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC","[Sema] Combine similar diagnostics using %select. NFC\n\nllvm-svn: 253315"},
		[h]={{A,11430,"static void DiagnoseBadDivideOrRemainderValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsDiv) {\n  // ...\n  if (!RHS.get()->isValueDependent() && RHS.get()->EvaluateAsInt(RHSValue, S.Context) && RHSValue.Val.getInt() == 0)\n    S.DiagRuntimeBehavior(Loc, RHS.get(), S.PDiag(diag::warn_remainder_division_by_zero) << IsDiv << RHS.get()->getSourceRange());"}},
		[m]={
			["clang/test/Analysis/test-include.c"]={"clang/test/Analysis/test-include.c:12:13: warning: division by zero is undefined [-Wdivision-by-zero]","clang/test/Analysis/test-include.c:18:13: warning: division by zero is undefined [-Wdivision-by-zero]"}
		}
	},
	["warn_require_const_init_added_too_late"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,s,"warn_require_const_init_added_too_late"}},
		[c]={{nil,s,"\'require_constant_initialization\' attribute added after initialization of variable"}},
		[d]={{nil,s,"\'require_constant_initialization\' attribute added after initialization of variable"}},
		[e]=j,
		[f]="\'require_constant_initialization\' attribute added after initialization of variable",
		[g]=V,
		[a]={{nil,s,n}},
		[i]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
		[h]={{G,3173,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  // ...\n  if (AttrBeforeInit) {\n  // ...\n  } else {\n    // ...\n    S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}},
		[m]={
			["clang/test/SemaCXX/attr-require-constant-initialization.cpp"]={"clang/test/SemaCXX/attr-require-constant-initialization.cpp:309:3: warning: \'require_constant_initialization\' attribute added after initialization of variable [-Wignored-attributes]","clang/test/SemaCXX/attr-require-constant-initialization.cpp:312:10: warning: \'require_constant_initialization\' attribute added after initialization of variable [-Wignored-attributes]"}
		}
	},
	["warn_reserved_extern_symbol"]={
		[l]={"reserved-identifier"},
		[k]="reserved-identifier",
		[b]={{nil,C,"warn_reserved_extern_symbol"}},
		[c]={{nil,u,"identifier %0 is reserved because %select{<ERROR>|it starts with \'_\' at global scope|it starts with \'_\' and has C language linkage|it starts with \'__\'|it starts with \'_\' followed by a capital letter|it contains \'__\'}1"},{C,C,"identifier %0 is reserved because %select{<ERROR>|it starts with \'_\' at global scope|it starts with \'__\'|it starts with \'_\' followed by a capital letter|it contains \'__\'}1"}},
		[d]={{nil,u,{"identifier A is reserved because ",{"it starts with \'_\' at global scope","it starts with \'_\' and has C language linkage","it starts with \'__\'","it starts with \'_\' followed by a capital letter","it contains \'__\'"}}},{C,C,{"identifier A is reserved because ",{"it starts with \'_\' at global scope","it starts with \'__\'","it starts with \'_\' followed by a capital letter","it contains \'__\'"}}}},
		[e]=j,
		[f]="identifier (.*?) is reserved because (?:it starts with \'_\' at global scope|it starts with \'_\' and has C language linkage|it starts with \'__\'|it starts with \'_\' followed by a capital letter|it contains \'__\')",
		[g]=" \\[(?:\\-Werror,)?\\-Wreserved\\-identifier[^\\]]*\\]",
		[a]={{nil,C,n}},
		[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
		[h]={{G,6091,"void Sema::warnOnReservedIdentifier(const NamedDecl *D) {\n  // ...\n  if (Status != ReservedIdentifierStatus::NotReserved && !isFromSystemHeader(Context.getSourceManager(), D)) {\n    Diag(D->getLocation(), diag::warn_reserved_extern_symbol) << D << static_cast<int>(Status);"},{yb,512,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  // ...\n  if (!IsUDSuffix) {\n    // ...\n    if (!PP.getSourceManager().isInSystemHeader(Loc)) {\n      if (auto Hint = FixItHint::CreateReplacement(Name.getSourceRange(), (StringRef(\"operator\\\"\\\"\") + II->getName()).str()); isReservedInAllContexts(Status)) {\n        Diag(Loc, diag::warn_reserved_extern_symbol) << II << static_cast<int>(Status) << Hint;"},{P,567,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // ...\n  if (isReservedInAllContexts(Status) && !Context.getSourceManager().isInSystemHeader(IdentLoc))\n    Diag(IdentLoc, diag::warn_reserved_extern_symbol) << TheDecl << static_cast<int>(Status);"}},
		[m]={
			["clang/test/SemaCXX/reserved-identifier.cpp"]={"clang/test/SemaCXX/reserved-identifier.cpp:3:5: warning: identifier \'foo__bar\' is reserved because it contains \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:4:12: warning: identifier \'_bar\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:5:12: warning: identifier \'_Bar\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:6:5: warning: identifier \'_barbouille\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:8:23: warning: identifier \'_Reserved\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:9:16: warning: identifier \'__1\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:16:35: warning: identifier \'__toucan\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:19:9: warning: identifier \'_Barbotine\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:21:17: warning: identifier \'__\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:27:17: warning: identifier \'__\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:30:11: warning: identifier \'_Barbidur\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:32:8: warning: identifier \'__barbidou\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:35:5: warning: identifier \'__barbouille\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:38:5: warning: identifier \'__babar\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:43:7: warning: identifier \'__barbapapa\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:45:7: warning: identifier \'_Barbalala\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:48:12: warning: identifier \'__menu\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:49:3: warning: identifier \'__some\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:50:3: warning: identifier \'_Other\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:54:6: warning: identifier \'_Menu\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:55:3: warning: identifier \'_OtheR_\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:56:3: warning: identifier \'_other_\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:60:3: warning: identifier \'__some\' is reserved because it starts with \'__\' [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:61:3: warning: identifier \'_Other\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:62:3: warning: identifier \'_other\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:69:7: warning: identifier \'_Barbamama\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:79:24: warning: identifier \'_BarbeBleue\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:89:36: warning: identifier \'_SacreBleu\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:95:8: warning: identifier \'_BarbeRouge\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:97:8: warning: identifier \'_BarbeNoire\' is reserved because it starts with \'_\' followed by a capital letter [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:101:15: warning: identifier \'_barbegrise\' is reserved because it starts with \'_\' at global scope [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:111:18: warning: identifier \'_namespace_b\' is reserved because it starts with \'_\' and has C language linkage [-Wreserved-identifier]","clang/test/SemaCXX/reserved-identifier.cpp:113:19: warning: identifier \'_namespace_d\' is reserved because it starts with \'_\' and has C language linkage [-Wreserved-identifier]"}
		}
	},
	["warn_reserved_module_name"]={
		[l]={"reserved-identifier","reserved-module-identifier"},
		[k]="reserved-module-identifier",
		[b]="warn_reserved_module_name",
		[c]="%0 is a reserved name for a module",
		[d]="A is a reserved name for a module",
		[e]=j,
		[f]="(.*?) is a reserved name for a module",
		[g]=" \\[(?:\\-Werror,)?\\-Wreserved\\-module\\-identifier[^\\]]*\\]",
		[a]=n,
		[i]={eb,1625925174,fb,ob},
		[h]={{"clang/lib/Sema/SemaModule.cpp",167,"/// Tests whether the given identifier is reserved as a module name and\n/// diagnoses if it is. Returns true if a diagnostic is emitted and false\n/// otherwise.\nstatic bool DiagReservedModuleName(Sema &S, const IdentifierInfo *II, SourceLocation Loc) {\n  // ...\n  case Reserved:\n    S.Diag(Loc, diag::warn_reserved_module_name) << II;"},{"clang/lib/Sema/SemaModule.cpp",274,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  if (!getSourceManager().isInSystemHeader(Path[0].second) && (FirstComponentName == \"std\" || (FirstComponentName.startswith(\"std\") && llvm::all_of(FirstComponentName.drop_front(3), &llvm::isDigit))))\n    Diag(Path[0].second, diag::warn_reserved_module_name) << Path[0].first;"}}
	},
	["warn_ret_addr_label"]={
		[l]={Vb,"return-local-addr",Fb},
		[k]=Fb,
		[b]="warn_ret_addr_label",
		[c]="returning address of label, which is local",
		[d]="returning address of label, which is local",
		[e]=j,
		[f]="returning address of label, which is local",
		[g]=" \\[(?:\\-Werror,)?\\-Wreturn\\-stack\\-address[^\\]]*\\]",
		[a]=n,
		[i]={"252d36e74caa",1256875318,"warn about returning the address of a label.","warn about returning the address of a label.\n\nllvm-svn: 85576"},
		[h]={{sb,8268,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      // ...\n      } else if (isa<BlockExpr>(L)) {\n      // ...\n      } else if (isa<AddrLabelExpr>(L)) {\n        // ...\n        Diag(DiagLoc, diag::warn_ret_addr_label) << DiagRange;"}},
		[m]={
			["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:34:10: warning: returning address of label, which is local [-Wreturn-stack-address]"}
		}
	},
	["warn_ret_local_temp_addr_ref"]={
		[l]={Vb,"return-local-addr",Fb},
		[k]=Fb,
		[b]="warn_ret_local_temp_addr_ref",
		[c]="returning %select{address of|reference to}0 local temporary object",
		[d]={{nil,nil,{"returning ",{"address of","reference to"}," local temporary object"}}},
		[e]=j,
		[f]="returning (?:address of|reference to) local temporary object",
		[g]=" \\[(?:\\-Werror,)?\\-Wreturn\\-stack\\-address[^\\]]*\\]",
		[a]=n,
		[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC","[Sema] Combine similar diagnostics using %select. NFC\n\nllvm-svn: 253315"},
		[h]={{sb,8270,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      // ...\n      } else if (isa<BlockExpr>(L)) {\n      // ...\n      } else if (isa<AddrLabelExpr>(L)) {\n      // ...\n      } else {\n        Diag(DiagLoc, diag::warn_ret_local_temp_addr_ref) << Entity.getType()->isReferenceType() << DiagRange;"}},
		[m]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p15-star-this-capture.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p15-star-this-capture.cpp:11:14: warning: returning reference to local temporary object [-Wreturn-stack-address]","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p15-star-this-capture.cpp:17:14: warning: returning reference to local temporary object [-Wreturn-stack-address]"}
		}
	},
	["warn_ret_stack_addr_ref"]={
		[l]={Vb,"return-local-addr",Fb},
		[k]=Fb,
		[b]="warn_ret_stack_addr_ref",
		[c]={{nil,t,"%select{address of|reference to}0 stack memory associated with %select{local variable|parameter}2 %1 returned"},{p,nil,"%select{address of|reference to}0 stack memory associated with local variable %1 returned"}},
		[d]={{nil,t,{{"address of","reference to"}," stack memory associated with ",{"local variable","parameter"}," B returned"}},{p,nil,{{"address of","reference to"}," stack memory associated with local variable B returned"}}},
		[e]=j,
		[f]="(?:address of|reference to) stack memory associated with (?:local variable|parameter) (.*?) returned",
		[g]=" \\[(?:\\-Werror,)?\\-Wreturn\\-stack\\-address[^\\]]*\\]",
		[a]=n,
		[i]={"da7b27ff0b98",1447738809,"[Sema] Combine similar diagnostics using %select. NFC","[Sema] Combine similar diagnostics using %select. NFC\n\nllvm-svn: 253315"},
		[h]={{sb,8258,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n        // ...\n        Diag(DiagLoc, diag::warn_ret_stack_addr_ref) << Entity.getType()->isReferenceType() << DRE->getDecl() << isa<ParmVarDecl>(DRE->getDecl()) << DiagRange;"}},
		[m]={
			["clang/test/CodeGen/pointer-to-int.c"]={"clang/test/CodeGen/pointer-to-int.c:11:10: warning: address of stack memory associated with local variable \'x\' returned [-Wreturn-stack-address]"}
		}
	},
	["warn_return_missing_expr"]={
		[l]={o,q,r,"return-type"},
		[k]="return-type",
		[b]="warn_return_missing_expr",
		[c]="non-void %select{function|method}1 %0 should return a value",
		[d]={{nil,nil,{"non-void ",{nb,"method"}," A should return a value"}}},
		[e]=Jb,
		[f]="non\\-void (?:function|method) (.*?) should return a value",
		[g]=" \\[[^\\]]*\\-Wreturn\\-type[^\\]]*\\]",
		[a]=n,
		[i]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files.","Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"},
		[h]={{P,4141,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n  // ...\n  } else if (!RetValExp && !HasDependentReturnType) {\n    // ...\n    if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n    // ...\n    } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n    // ...\n    } else {\n      // ...\n      unsigned DiagID = getLangOpts().C99 ? diag::ext_return_missing_expr : diag::warn_return_missing_expr;"}},
		[m]={
			["clang/test/SemaObjC/method-return-void.m"]={"clang/test/SemaObjC/method-return-void.m:8:14: error: non-void method \'foo\' should return a value [-Wreturn-type]"}
		}
	},
	["warn_return_typestate_for_unconsumable_type"]={
		[l]={qb},
		[k]=qb,
		[b]="warn_return_typestate_for_unconsumable_type",
		[c]="return state set for an unconsumable type \'%0\'",
		[d]="return state set for an unconsumable type \'A\'",
		[e]=j,
		[f]="return state set for an unconsumable type \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
		[a]=n,
		[i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute.","Consumed analysis: add return_typestate attribute.\nPatch by chris.wailes@gmail.com\n\nFunctions can now declare what state the consumable type the are returning will\nbe in. This is then used on the caller side and checked on the callee side.\nConstructors now use this attribute instead of the \'consumes\' attribute.\n\nllvm-svn: 189843"},
		[h]={{v,2122,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  // ...\n  void warnReturnTypestateForUnconsumableType(SourceLocation Loc, StringRef TypeName) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_return_typestate_for_unconsumable_type) << TypeName);"}},
		[m]={
			["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:14:38: warning: return state set for an unconsumable type \'int\' [-Wconsumed]"}
		}
	},
	["warn_return_typestate_mismatch"]={
		[l]={qb},
		[k]=qb,
		[b]="warn_return_typestate_mismatch",
		[c]="return value not in expected state; expected \'%0\', observed \'%1\'",
		[d]="return value not in expected state; expected \'A\', observed \'B\'",
		[e]=j,
		[f]="return value not in expected state; expected \'(.*?)\', observed \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
		[a]=n,
		[i]={"fc368259af1a",1378239098,"Consumed analysis: add return_typestate attribute.","Consumed analysis: add return_typestate attribute.\nPatch by chris.wailes@gmail.com\n\nFunctions can now declare what state the consumable type the are returning will\nbe in. This is then used on the caller side and checked on the callee side.\nConstructors now use this attribute instead of the \'consumes\' attribute.\n\nllvm-svn: 189843"},
		[h]={{v,2131,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  // ...\n  void warnReturnTypestateMismatch(SourceLocation Loc, StringRef ExpectedState, StringRef ObservedState) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_return_typestate_mismatch) << ExpectedState << ObservedState);"}},
		[m]={
			["clang/test/SemaCXX/warn-consumed-analysis.cpp"]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:78:3: warning: return value not in expected state; expected \'unconsumed\', observed \'consumed\' [-Wconsumed]"}
		}
	},
	["warn_return_value_size"]={
		[l]={"large-by-value-copy"},
		[k]="large-by-value-copy",
		[b]="warn_return_value_size",
		[c]="return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?",
		[d]="return value of A is a large (B bytes) pass-by-value object; pass it by reference instead ?",
		[e]=j,
		[f]="return value of (.*?) is a large \\((.*?) bytes\\) pass\\-by\\-value object; pass it by reference instead \\?",
		[g]=" \\[(?:\\-Werror,)?\\-Wlarge\\-by\\-value\\-copy[^\\]]*\\]",
		[a]=n,
		[i]={"af84ec0a9612",1290035514,"Introduce option -Wargument-larger-than[=N] which warns about function definitions if they take by-v...","Introduce option -Wargument-larger-than[=N] which warns about function definitions if they take by-value\nor return by-value any POD that is larger than some threshold (default is 64 bytes).\n\nImplements rdar://8548050.\n\nllvm-svn: 119583"},
		[h]={{G,14870,"void Sema::DiagnoseSizeOfParametersAndReturnValue(ArrayRef<ParmVarDecl *> Parameters, QualType ReturnTy, NamedDecl *D) {\n  // ...\n  // Warn if the return value is pass-by-value and larger than the specified\n  // threshold.\n  if (!ReturnTy->isDependentType() && ReturnTy.isPODType(Context)) {\n    // ...\n    if (Size > LangOpts.NumLargeByValueCopy)\n      Diag(D->getLocation(), diag::warn_return_value_size) << D << Size;"}},
		[m]={
			["clang/test/SemaCXX/warn-large-by-value-copy.cpp"]={"clang/test/SemaCXX/warn-large-by-value-copy.cpp:16:6: warning: return value of \'f101\' is a large (101 bytes) pass-by-value object; pass it by reference instead ? [-Wlarge-by-value-copy]","clang/test/SemaCXX/warn-large-by-value-copy.cpp:24:18: warning: return value of \'foo_template<rdar8548050::S101>\' is a large (101 bytes) pass-by-value object; pass it by reference instead ? [-Wlarge-by-value-copy]"}
		}
	},
	["warn_return_value_udt"]={
		[l]={o,q,r,"return-type","return-type-c-linkage"},
		[k]="return-type-c-linkage",
		[b]="warn_return_value_udt",
		[c]="%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C",
		[d]="A has C-linkage specified, but returns user-defined type B which is incompatible with C",
		[e]=j,
		[f]="(.*?) has C\\-linkage specified, but returns user\\-defined type (.*?) which is incompatible with C",
		[g]=" \\[(?:\\-Werror,)?\\-Wreturn\\-type\\-c\\-linkage[^\\]]*\\]",
		[a]=n,
		[i]={"c2a9493a26f4",1328750494,"Adding support for warning when a non-C compatible user-defined type is returned from an extern \"C\" ...","Adding support for warning when a non-C compatible user-defined type is returned from an extern \"C\" function.\n\nFixes bug 6143\n\nllvm-svn: 150128"},
		[h]={{G,12022,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // If this function is declared as being extern \"C\", then check to see if\n    // the function returns a UDT (class, struct, or union type) that is not C\n    // compatible, and if it does, warn the user.\n    // But, issue any diagnostic on the first declaration only.\n    if (Previous.empty() && NewFD->isExternC()) {\n      // ...\n      if (R->isIncompleteType() && !R->isVoidType())\n      // ...\n      else if (!R.isPODType(Context) && !R->isVoidType() && !R->isObjCObjectPointerType())\n        Diag(NewFD->getLocation(), diag::warn_return_value_udt) << NewFD << R;"}},
		[m]={
			["clang/test/SemaCXX/function-extern-c.cpp"]={"clang/test/SemaCXX/function-extern-c.cpp:27:14: warning: \'f3\' has C-linkage specified, but returns user-defined type \'U\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:28:14: warning: \'f0\' has C-linkage specified, but returns user-defined type \'S\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:29:14: warning: \'f4\' has C-linkage specified, but returns user-defined type \'A\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:77:3: warning: \'bbb\' has C-linkage specified, but returns user-defined type \'A\' which is incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:78:3: warning: \'ccc\' has C-linkage specified, but returns user-defined type \'A\' which is incompatible with C [-Wreturn-type-c-linkage]"}
		}
	},
	["warn_return_value_udt_incomplete"]={
		[l]={o,q,r,"return-type","return-type-c-linkage"},
		[k]="return-type-c-linkage",
		[b]="warn_return_value_udt_incomplete",
		[c]="%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C",
		[d]="A has C-linkage specified, but returns incomplete type B which could be incompatible with C",
		[e]=j,
		[f]="(.*?) has C\\-linkage specified, but returns incomplete type (.*?) which could be incompatible with C",
		[g]=" \\[(?:\\-Werror,)?\\-Wreturn\\-type\\-c\\-linkage[^\\]]*\\]",
		[a]=n,
		[i]={"84ce606b9108",1343152781,"Tweak warning text for returning incomplete type from extern \"C\" functions.","Tweak warning text for returning incomplete type from extern \"C\" functions.\n\nA warning was added in r150128 for returning non-C compatible\nuser-defined types from functions with C linkage.\n\nThis makes the text more clear for the case when the type isn\'t\ndecidedly non-C compatible, but incomplete.\n\nllvm-svn: 160681"},
		[h]={{G,12018,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // If this function is declared as being extern \"C\", then check to see if\n    // the function returns a UDT (class, struct, or union type) that is not C\n    // compatible, and if it does, warn the user.\n    // But, issue any diagnostic on the first declaration only.\n    if (Previous.empty() && NewFD->isExternC()) {\n      // ...\n      if (R->isIncompleteType() && !R->isVoidType())\n        Diag(NewFD->getLocation(), diag::warn_return_value_udt_incomplete) << NewFD << R;"}},
		[m]={
			["clang/test/SemaCXX/function-extern-c.cpp"]={"clang/test/SemaCXX/function-extern-c.cpp:40:31: warning: \'f12\' has C-linkage specified, but returns incomplete type \'struct mypodstruct\' which could be incompatible with C [-Wreturn-type-c-linkage]","clang/test/SemaCXX/function-extern-c.cpp:48:16: warning: \'f\' has C-linkage specified, but returns incomplete type \'A\' which could be incompatible with C [-Wreturn-type-c-linkage]"}
		}
	},
	["warn_riscv_repeated_interrupt_attribute"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,t,"warn_riscv_repeated_interrupt_attribute"}},
		[c]={{nil,t,"repeated RISC-V \'interrupt\' attribute"}},
		[d]={{nil,t,"repeated RISC-V \'interrupt\' attribute"}},
		[e]=j,
		[f]="repeated RISC\\-V \'interrupt\' attribute",
		[g]=V,
		[a]={{nil,t,n}},
		[i]={"1eee1b771f43",1532626665," [RISCV] Add support for interrupt attribute"," [RISCV] Add support for interrupt attribute\n\nSummary:\nClang supports the GNU style ``__attribute__((interrupt))`` attribute  on RISCV targets.\nPermissible values for this parameter are user, supervisor, and machine.\nIf there is no parameter, then it defaults to machine.\nReference: https://gcc.gnu.org/onlinedocs/gcc/RISC-V-Function-Attributes.html\nBased on initial patch by Zhaoshi Zheng.\n\nReviewers: asb, aaron.ballman\n\nReviewed By: asb, aaron.ballman\n\nSubscribers: rkruppe, the_o, aaron.ballman, MartinMosbeck, brucehoult, rbar, johnrusso, simoncook, sabuasal, niosHD, kito-cheng, shiva0217, zzheng, edward-jones, mgrang, rogfer01, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D48412\n\nllvm-svn: 338045"},
		[h]={{x,7753,"static void handleRISCVInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Warn about repeated attributes.\n  if (const auto *A = D->getAttr<RISCVInterruptAttr>()) {\n    S.Diag(AL.getRange().getBegin(), diag::warn_riscv_repeated_interrupt_attribute);"}},
		[m]={
			["clang/test/Sema/riscv-interrupt-attr.c"]={"clang/test/Sema/riscv-interrupt-attr.c:41:38: warning: repeated RISC-V \'interrupt\' attribute [-Wignored-attributes]","clang/test/Sema/riscv-interrupt-attr.c:44:27: warning: repeated RISC-V \'interrupt\' attribute [-Wignored-attributes]"}
		}
	},
	["warn_root_inst_method_not_found"]={
		[l]={"objc-method-access"},
		[k]="objc-method-access",
		[b]="warn_root_inst_method_not_found",
		[c]="instance method %0 is being used on \'Class\' which is not in the root class",
		[d]="instance method A is being used on \'Class\' which is not in the root class",
		[e]=j,
		[f]="instance method (.*?) is being used on \'Class\' which is not in the root class",
		[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-method\\-access[^\\]]*\\]",
		[a]=n,
		[i]={"3baaffba6bc3",1241548477,"Issue a warning in odd case of instance method used","Issue a warning in odd case of instance method used\nin a \'Class\' receiver which is not a root instance\nmethod.\n\nllvm-svn: 70987"},
		[h]={{zb,3027,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n      // Handle messages to Class.\n      // We allow sending a message to a qualified Class (\"Class<foo>\"), which\n      // is ok as long as one of the protocols implements the selector (if not,\n      // warn).\n      if (!ReceiverType->isObjCClassOrClassKindOfType()) {\n      // ...\n      } else {\n        // ...\n        if (!Method) {\n          // If not messaging \'self\', look for any factory method named \'Sel\'.\n          if (!Receiver || !isSelfExpr(Receiver)) {\n            // ...\n            if (!Methods.empty()) {\n              // ...\n              // If we find an instance method, emit warning.\n              if (Method->isInstanceMethod()) {\n                if (const ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(Method->getDeclContext())) {\n                  if (ID->getSuperClass())\n                    Diag(SelLoc, diag::warn_root_inst_method_not_found) << Sel << SourceRange(LBracLoc, RBracLoc);"}},
		[m]={
			["clang/test/SemaObjC/inst-method-lookup-in-root.m"]={"clang/test/SemaObjC/inst-method-lookup-in-root.m:23:13: warning: instance method \'starboard\' is being used on \'Class\' which is not in the root class [-Wobjc-method-access]"}
		}
	},
	["warn_sampler_initializer_invalid_bits"]={
		[l]={"spir-compat","spirv-compat"},
		[k]="spir-compat",
		[b]="warn_sampler_initializer_invalid_bits",
		[c]="sampler initializer has invalid %0 bits",
		[d]="sampler initializer has invalid A bits",
		[e]=j,
		[f]="sampler initializer has invalid (.*?) bits",
		[g]=" \\[(?:\\-Werror,)?\\-Wspir\\-compat[^\\]]*\\]",
		[a]=n,
		[i]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer\n\nCurrently Clang use int32 to represent sampler_t, which have been a source of issue for some backends, because in some backends sampler_t cannot be represented by int32. They have to depend on kernel argument metadata and use IPA to find the sampler arguments and global variables and transform them to target specific sampler type.\n\nThis patch uses opaque pointer type opencl.sampler_t* for sampler_t. For each use of file-scope sampler variable, it generates a function call of __translate_sampler_initializer. For each initialization of function-scope sampler variable, it generates a function call of __translate_sampler_initializer.\n\nEach builtin library can implement its own __translate_sampler_initializer(). Since the real sampler type tends to be architecture dependent, allowing it to be initialized by a library function simplifies backend design. A typical implementation of __translate_sampler_initializer could be a table lookup of real sampler literal values. Since its argument is always a literal, the returned pointer is known at compile time and easily optimized to finally become some literal values directly put into image read instructions.\n\nThis patch is partially based on Alexey Sotkin\'s work in Khronos Clang (https://github.com/KhronosGroup/SPIR/commit/3d4eec61623502fc306e8c67c9868be2b136e42b).\n\nDifferential Revision: https://reviews.llvm.org/D21567\n\nllvm-svn: 277024"},
		[h]={{sb,9366,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n      // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n      // ...\n      } else {\n        // ...\n        if (FilterMode != 1 && FilterMode != 2 && !S.getOpenCLOptions().isAvailableOption(\"cl_intel_device_side_avc_motion_estimation\", S.getLangOpts()))\n          S.Diag(Kind.getLocation(), diag::warn_sampler_initializer_invalid_bits) << \"Filter Mode\";"},{sb,9370,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n      // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n      // ...\n      } else {\n        // ...\n        if (AddressingMode > 4)\n          S.Diag(Kind.getLocation(), diag::warn_sampler_initializer_invalid_bits) << \"Addressing Mode\";"}},
		[m]={
			["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:21:20: warning: sampler initializer has invalid Filter Mode bits [-Wspir-compat]","clang/test/SemaOpenCL/sampler_t.cl:26:20: warning: sampler initializer has invalid Addressing Mode bits [-Wspir-compat]"}
		}
	},
	["warn_scanf_nonzero_width"]={
		[l]={o,q,"format",r},
		[k]="format",
		[b]="warn_scanf_nonzero_width",
		[c]="zero field width in scanf format string is unused",
		[d]="zero field width in scanf format string is unused",
		[e]=j,
		[f]="zero field width in scanf format string is unused",
		[g]=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\]",
		[a]="Format String Issue",
		[i]={"0208793e4101",1279246282,"Add most of the boilerplate support for scanf format string checking.  This includes","Add most of the boilerplate support for scanf format string checking.  This includes\nhandling the parsing of scanf format strings and hooking the checking into Sema.\nMost of this checking logic piggybacks on what was already there for checking printf format\nstrings, but the checking logic has been refactored to support both.\n\nWhat is left to be done is to support argument type checking in format strings and of course\nfix the usual tail of bugs that will follow.\n\nllvm-svn: 108500"},
		[h]={{y,11516,"bool CheckScanfHandler::HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  // ...\n  if (Amt.getHowSpecified() == OptionalAmount::Constant) {\n    if (Amt.getConstantAmount() == 0) {\n      // ...\n      EmitFormatDiagnostic(S.PDiag(diag::warn_scanf_nonzero_width), getLocationOfByte(Amt.getStart()),"}},
		[m]={
			["clang/test/Sema/format-strings-scanf.c"]={"clang/test/Sema/format-strings-scanf.c:40:11: warning: zero field width in scanf format string is unused [-Wformat]","clang/test/Sema/format-strings-scanf.c:41:11: warning: zero field width in scanf format string is unused [-Wformat]","clang/test/Sema/format-strings-scanf.c:83:9: warning: zero field width in scanf format string is unused [-Wformat]","clang/test/Sema/format-strings-scanf.c:84:11: warning: zero field width in scanf format string is unused [-Wformat]"}
		}
	},
	["warn_scanf_scanlist_incomplete"]={
		[l]={o,q,"format",r},
		[k]="format",
		[b]="warn_scanf_scanlist_incomplete",
		[c]="no closing \']\' for \'%%[\' in scanf format string",
		[d]="no closing \']\' for \'%[\' in scanf format string",
		[e]=j,
		[f]="no closing \'\\]\' for \'%\\[\' in scanf format string",
		[g]=" \\[(?:\\-Werror,)?\\-Wformat[^\\]]*\\]",
		[a]="Format String Issue",
		[i]={"c618728e8dbc",1279304876,"Tweak zero-field width in scanf format string diagnostic.","Tweak zero-field width in scanf format string diagnostic.\n\nllvm-svn: 108541"},
		[h]={{y,11469,"void CheckScanfHandler::HandleIncompleteScanList(const char *start, const char *end) { EmitFormatDiagnostic(S.PDiag(diag::warn_scanf_scanlist_incomplete), getLocationOfByte(end), /*IsStringLocation*/ true, getSpecifierRange(start, end - start)); }"}},
		[m]={
			["clang/test/Sema/format-strings-scanf.c"]={"clang/test/Sema/format-strings-scanf.c:42:22: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:86:9: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:87:12: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:105:15: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:106:19: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]","clang/test/Sema/format-strings-scanf.c:107:21: warning: no closing \']\' for \'%[\' in scanf format string [-Wformat]"}
		}
	},
	["warn_second_arg_of_va_start_not_last_named_param"]={
		[l]={Ab},
		[k]=Ab,
		[b]="warn_second_arg_of_va_start_not_last_named_param",
		[c]="second argument to \'va_start\' is not the last named parameter",
		[d]="second argument to \'va_start\' is not the last named parameter",
		[e]=j,
		[f]="second argument to \'va_start\' is not the last named parameter",
		[g]=" \\[(?:\\-Werror,)?\\-Wvarargs[^\\]]*\\]",
		[a]=n,
		[i]={"05164816f0ea",1461003053,"Clarifying the wording of this diagnostic; it confused parameter and argument.","Clarifying the wording of this diagnostic; it confused parameter and argument.\n\nllvm-svn: 266644"},
		[h]={{y,8155,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity.  Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!SecondArgIsLastNamedArgument)\n    Diag(TheCall->getArg(1)->getBeginLoc(), diag::warn_second_arg_of_va_start_not_last_named_param);"}},
		[m]={
			["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:49:28: warning: second argument to \'va_start\' is not the last named parameter [-Wvarargs]"}
		}
	},
	["warn_second_parameter_to_va_arg_never_compatible"]={
		[l]={Ab},
		[k]=Ab,
		[b]="warn_second_parameter_to_va_arg_never_compatible",
		[c]="second argument to \'va_arg\' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1",
		[d]="second argument to \'va_arg\' is of promotable type A; this va_arg has undefined behavior because arguments will be promoted to B",
		[e]=j,
		[f]="second argument to \'va_arg\' is of promotable type (.*?); this va_arg has undefined behavior because arguments will be promoted to (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wvarargs[^\\]]*\\]",
		[a]=n,
		[i]={"6290ae476ee6",1310420759,"Add diagnostic for constructs like \"va_arg(l, float)\" which have undefined behavior. PR10201.","Add diagnostic for constructs like \"va_arg(l, float)\" which have undefined behavior. PR10201.\n\nllvm-svn: 134926"},
		[h]={{A,17337,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n  if (!TInfo->getType()->isDependentType()) {\n    // ...\n    if (!PromoteType.isNull())\n      DiagRuntimeBehavior(TInfo->getTypeLoc().getBeginLoc(), E, PDiag(diag::warn_second_parameter_to_va_arg_never_compatible) << TInfo->getType() << PromoteType << TInfo->getTypeLoc().getSourceRange());"}},
		[m]={
			["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:71:32: warning: second argument to \'va_arg\' is of promotable type \'float\'; this va_arg has undefined behavior because arguments will be promoted to \'double\' [-Wvarargs]","clang/test/Sema/varargs-x86-64.c:73:32: warning: second argument to \'va_arg\' is of promotable type \'short\'; this va_arg has undefined behavior because arguments will be promoted to \'int\' [-Wvarargs]","clang/test/Sema/varargs-x86-64.c:74:32: warning: second argument to \'va_arg\' is of promotable type \'char\'; this va_arg has undefined behavior because arguments will be promoted to \'int\' [-Wvarargs]"}
		}
	},
	["warn_second_parameter_to_va_arg_not_pod"]={
		[l]={"class-varargs","non-pod-varargs"},
		[k]="non-pod-varargs",
		[b]="warn_second_parameter_to_va_arg_not_pod",
		[c]="second argument to \'va_arg\' is of non-POD type %0",
		[d]="second argument to \'va_arg\' is of non-POD type A",
		[e]=Jb,
		[f]="second argument to \'va_arg\' is of non\\-POD type (.*?)",
		[g]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]",
		[a]=n,
		[i]={"254a5c07e7c9",1307947023,"Give a diagnostic when using non-POD types in a va_arg","Give a diagnostic when using non-POD types in a va_arg\n\nllvm-svn: 132905"},
		[h]={{A,17289,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n  if (!TInfo->getType()->isDependentType()) {\n    // ...\n    if (!TInfo->getType().isPODType(Context)) {\n      Diag(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType()->isObjCLifetimeType() ? diag::warn_second_parameter_to_va_arg_ownership_qualified : diag::warn_second_parameter_to_va_arg_not_pod) << TInfo->getType() << TInfo->getTypeLoc().getSourceRange();"}},
		[m]={
			["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:177:32: warning: second argument to \'va_arg\' is of non-POD type \'C\' [-Wnon-pod-varargs]"}
		}
	},
	["warn_second_parameter_to_va_arg_ownership_qualified"]={
		[l]={"class-varargs","non-pod-varargs"},
		[k]="non-pod-varargs",
		[b]="warn_second_parameter_to_va_arg_ownership_qualified",
		[c]="second argument to \'va_arg\' is of ARC ownership-qualified type %0",
		[d]="second argument to \'va_arg\' is of ARC ownership-qualified type A",
		[e]=Jb,
		[f]="second argument to \'va_arg\' is of ARC ownership\\-qualified type (.*?)",
		[g]=" \\[[^\\]]*\\-Wnon\\-pod\\-varargs[^\\]]*\\]",
		[a]=n,
		[i]={"7e1eb935dbc3",1312008327,"When complaining about a non-POD second argument to va_arg, use a","When complaining about a non-POD second argument to va_arg, use a\nspecial diagnostic for ARC ownership-qualified types. We wouldn\'t want\nto expose Objective-C programmers to the term \"POD\", would we? Fixes\n<rdar://problem/9772982>.\n\nllvm-svn: 136558"},
		[h]={{A,17234,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n  if (!TInfo->getType()->isDependentType()) {\n    // ...\n    if (!TInfo->getType().isPODType(Context)) {\n      Diag(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType()->isObjCLifetimeType() ? diag::warn_second_parameter_to_va_arg_ownership_qualified : diag::warn_second_parameter_to_va_arg_not_pod) << TInfo->getType() << TInfo->getTypeLoc().getSourceRange();"}},
		[m]={
			["clang/test/SemaObjC/arc-non-pod-memaccess.m"]={"clang/test/SemaObjC/arc-non-pod-memaccess.m:61:35: error: second argument to \'va_arg\' is of ARC ownership-qualified type \'__strong id\' [-Wnon-pod-varargs]"}
		}
	},
	["warn_self_assignment_builtin"]={
		[l]={o,q,r,"self-assign"},
		[k]="self-assign",
		[b]={{nil,t,"warn_self_assignment_builtin"}},
		[c]={{nil,D,"explicitly assigning value of variable of type %0 to itself%select{|; did you mean to assign to member %2?}1"},{u,t,"explicitly assigning value of variable of type %0 to itself"}},
		[d]={{nil,D,{"explicitly assigning value of variable of type A to itself",{F,"; did you mean to assign to member C?"}}},{u,t,"explicitly assigning value of variable of type A to itself"}},
		[e]=j,
		[f]="explicitly assigning value of variable of type (.*?) to itself(?:|; did you mean to assign to member (.*?)\\?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wself\\-assign[^\\]]*\\]",
		[a]={{nil,t,n}},
		[i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded","[Sema] Add -Wno-self-assign-overloaded\n\nSummary:\nIt seems there isn\'t much enthusiasm for `-wtest` D45685.\n\nThis is more conservative version, which i had in the very first\nrevision of D44883, but that \'erroneously\' got removed because of the review.\n\n**Based on some [irc] discussions, it must really be documented that\nwe want all the new diagnostics to have their own flags, to ease\nrollouts, transitions, etc.**\n\nPlease do note that i\'m only adding `-Wno-self-assign-overloaded`,\nbut not `-Wno-self-assign-field-overloaded`, because i\'m honestly\nnot aware of any false-positives from the `-field` variant,\nbut i can just as easily add it if wanted.\nhttps://reviews.llvm.org/D44883#1068561\n\nReviewers: dblaikie, aaron.ballman, thakis, rjmccall, rsmith\n\nReviewed By: dblaikie\n\nSubscribers: Quuxplusone, chandlerc, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45766\n\nllvm-svn: 330651"},
		[h]={{A,15295,"/// DiagnoseSelfAssignment - Emits a warning if a value is assigned to itself.\n/// This warning suppressed in the event of macro expansions.\nstatic void DiagnoseSelfAssignment(Sema &S, Expr *LHSExpr, Expr *RHSExpr, SourceLocation OpLoc, bool IsBuiltin) {\n  // ...\n  auto Diag = S.Diag(OpLoc, IsBuiltin ? diag::warn_self_assignment_builtin : diag::warn_self_assignment_overloaded) << LHSDeclRef->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}},
		[m]={
			["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:103:25: warning: explicitly assigning value of variable of type \'Sprite\' to itself [-Wself-assign-overloaded]"}
		}
	},
	["warn_self_assignment_overloaded"]={
		[l]={o,q,r,"self-assign","self-assign-overloaded"},
		[k]="self-assign-overloaded",
		[b]={{nil,t,"warn_self_assignment_overloaded"}},
		[c]={{nil,D,"explicitly assigning value of variable of type %0 to itself%select{|; did you mean to assign to member %2?}1"},{u,t,"explicitly assigning value of variable of type %0 to itself"}},
		[d]={{nil,D,{"explicitly assigning value of variable of type A to itself",{F,"; did you mean to assign to member C?"}}},{u,t,"explicitly assigning value of variable of type A to itself"}},
		[e]=j,
		[f]="explicitly assigning value of variable of type (.*?) to itself(?:|; did you mean to assign to member (.*?)\\?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wself\\-assign\\-overloaded[^\\]]*\\]",
		[a]={{nil,t,n}},
		[i]={"6ed0fad9996d",1524519321,"[Sema] Add -Wno-self-assign-overloaded","[Sema] Add -Wno-self-assign-overloaded\n\nSummary:\nIt seems there isn\'t much enthusiasm for `-wtest` D45685.\n\nThis is more conservative version, which i had in the very first\nrevision of D44883, but that \'erroneously\' got removed because of the review.\n\n**Based on some [irc] discussions, it must really be documented that\nwe want all the new diagnostics to have their own flags, to ease\nrollouts, transitions, etc.**\n\nPlease do note that i\'m only adding `-Wno-self-assign-overloaded`,\nbut not `-Wno-self-assign-field-overloaded`, because i\'m honestly\nnot aware of any false-positives from the `-field` variant,\nbut i can just as easily add it if wanted.\nhttps://reviews.llvm.org/D44883#1068561\n\nReviewers: dblaikie, aaron.ballman, thakis, rjmccall, rsmith\n\nReviewed By: dblaikie\n\nSubscribers: Quuxplusone, chandlerc, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45766\n\nllvm-svn: 330651"},
		[h]={{A,15331,"/// DiagnoseSelfAssignment - Emits a warning if a value is assigned to itself.\n/// This warning suppressed in the event of macro expansions.\nstatic void DiagnoseSelfAssignment(Sema &S, Expr *LHSExpr, Expr *RHSExpr, SourceLocation OpLoc, bool IsBuiltin) {\n  // ...\n  auto Diag = S.Diag(OpLoc, IsBuiltin ? diag::warn_self_assignment_builtin : diag::warn_self_assignment_overloaded) << LHSDeclRef->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}}
	},
	["warn_self_move"]={
		[l]={o,o,q,q,r,r,"move","self-move"},
		[k]="self-move",
		[b]="warn_self_move",
		[c]={{nil,D,"explicitly moving variable of type %0 to itself%select{|; did you mean to move to member %2?}1"},{u,nil,"explicitly moving variable of type %0 to itself"}},
		[d]={{nil,D,{"explicitly moving variable of type A to itself",{F,"; did you mean to move to member C?"}}},{u,nil,"explicitly moving variable of type A to itself"}},
		[e]=j,
		[f]="explicitly moving variable of type (.*?) to itself(?:|; did you mean to move to member (.*?)\\?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wself\\-move[^\\]]*\\]",
		[a]=n,
		[i]={"17ddb829aaed",1420869858,"Add a new warning, -Wself-move, to Clang.","Add a new warning, -Wself-move, to Clang.\n\n-Wself-move is similiar to -Wself-assign.  This warning is triggered when\na value is attempted to be moved to itself.  See r221008 for a bug that\nwould have been caught with this warning.\n\nllvm-svn: 225581"},
		[h]={{y,17998,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n  // ...\n  // Two DeclRefExpr\'s, check that the decls are the same.\n  if (LHSDeclRef && RHSDeclRef) {\n    // ...\n    auto D = Diag(OpLoc, diag::warn_self_move) << LHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"},{y,18041,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n  // ...\n  if (LHSDeclRef && RHSDeclRef) {\n    // ...\n    Diag(OpLoc, diag::warn_self_move) << LHSExpr->getType() << 0 << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"},{y,18048,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n  // ...\n  if (isa<CXXThisExpr>(LHSBase) && isa<CXXThisExpr>(RHSBase))\n    Diag(OpLoc, diag::warn_self_move) << LHSExpr->getType() << 0 << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}},
		[m]={
			["clang/test/SemaCXX/warn-self-move.cpp"]={"clang/test/SemaCXX/warn-self-move.cpp:16:5: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:17:7: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:20:5: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:26:10: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:27:12: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:30:10: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:37:7: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:40:13: warning: explicitly moving variable of type \'int\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:43:7: warning: explicitly moving variable of type \'int\' to itself; did you mean to move to member \'x\'? [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:52:5: warning: explicitly moving variable of type \'A\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:55:5: warning: explicitly moving variable of type \'B\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:56:7: warning: explicitly moving variable of type \'A\' to itself [-Wself-move]","clang/test/SemaCXX/warn-self-move.cpp:59:5: warning: explicitly moving variable of type \'C\' to itself [-Wself-move]"}
		}
	},
	["warn_semicolon_before_method_body"]={
		[l]={F,o,Cb,"semicolon-before-method-body"},
		[k]="semicolon-before-method-body",
		[b]="warn_semicolon_before_method_body",
		[c]="semicolon before method body is ignored",
		[d]="semicolon before method body is ignored",
		[e]=j,
		[f]="semicolon before method body is ignored",
		[g]=" \\[(?:\\-Werror,)?\\-Wsemicolon\\-before\\-method\\-body[^\\]]*\\]",
		[a]=Eb,
		[i]={"f9a28abe8d1e",1257891389,"Make -Wsemicolon-before-method-body opt-in (and part of -Wextra).  Addresses <rdar://problem/7381735...","Make -Wsemicolon-before-method-body opt-in (and part of -Wextra).  Addresses <rdar://problem/7381735>.\n\nllvm-svn: 86731"},
		[h]={{"clang/lib/Parse/ParseObjc.cpp",2759,"///   objc-method-def: objc-method-proto \';\'[opt] \'{\' body \'}\'\n///\nDecl *Parser::ParseObjCMethodDefinition() {\n  // ...\n  // parse optional \';\'\n  if (Tok.is(tok::semi)) {\n    if (CurParsedObjCImpl) {\n      Diag(Tok, diag::warn_semicolon_before_method_body) << FixItHint::CreateRemoval(Tok.getLocation());"}},
		[m]={
			["clang/test/SemaObjC/objc-string-constant.m"]={"clang/test/SemaObjC/objc-string-constant.m:32:20: warning: semicolon before method body is ignored [-Wsemicolon-before-method-body]"}
		}
	},
	["warn_setter_getter_impl_required"]={
		[l]={"objc-property-implementation"},
		[k]="objc-property-implementation",
		[b]="warn_setter_getter_impl_required",
		[c]="property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation",
		[d]="property A requires method B to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation",
		[e]=j,
		[f]="property (.*?) requires method (.*?) to be defined \\- use @synthesize, @dynamic or provide a method implementation in this class implementation",
		[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]",
		[a]=n,
		[i]={"6c6aea914ab0",1239750921,"Diagnose properties which have no implementations;","Diagnose properties which have no implementations;\neither unimplemented setter/getter or no\nimplementation directive.\n\nllvm-svn: 69098"},
		[h]={{"clang/lib/Sema/SemaObjCProperty.cpp",2019,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // ...\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}},
		[m]={
			["clang/test/SemaObjC/property-category-1.m"]={"clang/test/SemaObjC/property-category-1.m:49:17: warning: property \'p0\' requires method \'p0\' to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation [-Wobjc-property-implementation]"}
		}
	},
	["warn_setter_getter_impl_required_in_category"]={
		[l]={"objc-property-implementation"},
		[k]="objc-property-implementation",
		[b]="warn_setter_getter_impl_required_in_category",
		[c]="property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category",
		[d]="property A requires method B to be defined - use @dynamic or provide a method implementation in this category",
		[e]=j,
		[f]="property (.*?) requires method (.*?) to be defined \\- use @dynamic or provide a method implementation in this category",
		[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-property\\-implementation[^\\]]*\\]",
		[a]=n,
		[i]={"4f8a57112f13",1264016181,"Settled rule on warning on unimplemented property in","Settled rule on warning on unimplemented property in\ncategory implementation when some implementations\nare missing in the primary class implementation.\n(fixes radar 6505200).\n\nllvm-svn: 94014"},
		[h]={{"clang/lib/Sema/SemaObjCProperty.cpp",2016,"static void DiagnoseUnimplementedAccessor(Sema &S, ObjCInterfaceDecl *PrimaryClass, Selector Method, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, ObjCCategoryDecl *C, ObjCPropertyDecl *Prop, llvm::SmallPtrSet<const ObjCMethodDecl *, 8> &SMap) {\n  // ...\n  // When reporting on missing property setter/getter implementation in\n  // categories, do not report when they are declared in primary class,\n  // class\'s protocol, or one of it super classes. This is because,\n  // the class is going to implement them.\n  if (I == SMap.end() && (PrimaryClass == nullptr || !PrimaryClass->lookupPropertyAccessor(Method, C, Prop->isClassProperty()))) {\n    unsigned diag = isa<ObjCCategoryDecl>(CDecl) ? (Prop->isClassProperty() ? diag::warn_impl_required_in_category_for_class_property : diag::warn_setter_getter_impl_required_in_category) : (Prop->isClassProperty() ? diag::warn_impl_required_for_class_property : diag::warn_setter_getter_impl_required);"}},
		[m]={
			["clang/test/SemaObjC/default-synthesize.m"]={"clang/test/SemaObjC/default-synthesize.m:110:17: warning: property \'p\' requires method \'p\' to be defined - use @dynamic or provide a method implementation in this category [-Wobjc-property-implementation]","clang/test/SemaObjC/default-synthesize.m:110:17: warning: property \'p\' requires method \'setP:\' to be defined - use @dynamic or provide a method implementation in this category [-Wobjc-property-implementation]"}
		}
	},
	["warn_shadow_field"]={
		[l]={"shadow-all","shadow-field"},
		[k]="shadow-field",
		[b]={{nil,w,"warn_shadow_field"}},
		[c]={{nil,I,"%select{parameter|non-static data member}3 %0 %select{|of %1 }3shadows member inherited from type %2"},{jb,t,"non-static data member %0 of %1 shadows member inherited from type %2"},{p,w,"non-static data member \'%0\' of \'%1\' shadows member inherited from type \'%2\'"}},
		[d]={{nil,I,{{"parameter","non-static data member"}," A ",{F,"of B "},"shadows member inherited from type C"}},{jb,t,"non-static data member A of B shadows member inherited from type C"},{p,w,"non-static data member \'A\' of \'B\' shadows member inherited from type \'C\'"}},
		[e]=j,
		[f]="(?:parameter|non\\-static data member) (.*?) (?:|of (.*?) )shadows member inherited from type (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wshadow\\-field[^\\]]*\\]",
		[a]={{nil,w,E}},
		[i]={"a6ae060db4fd",1486524613,"Sema: add warning for c++ member variable shadowing","Sema: add warning for c++ member variable shadowing\n\nAdd a warning for shadowed variables across records.  Referencing a\nshadow\'ed variable may not give the desired variable.  Add an optional\nwarning for the shadowing.\n\nPatch by James Sun!\n\nllvm-svn: 294401"},
		[h]={{T,3353,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n  if (Diags.isIgnored(diag::warn_shadow_field, Loc))"},{T,3391,"// Check if there is a field shadowing.\nvoid Sema::CheckShadowInheritedFields(const SourceLocation &Loc, DeclarationName FieldName, const CXXRecordDecl *RD, bool DeclIsField) {\n  // ...\n  for (const auto &P : Paths) {\n    // ...\n    if (AS_none != CXXRecordDecl::MergeAccess(P.Access, BaseField->getAccess())) {\n      Diag(Loc, diag::warn_shadow_field) << FieldName << RD << Base << DeclIsField;"}},
		[m]={
			["clang/test/CXX/class.derived/class.member.lookup/p10.cpp"]={"clang/test/CXX/class.derived/class.member.lookup/p10.cpp:39:12: warning: non-static data member \'x\' of \'E\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:40:8: warning: non-static data member \'y\' of \'E\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:42:8: warning: non-static data member \'w\' of \'E\' shadows member inherited from type \'D\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:42:8: warning: non-static data member \'w\' of \'E\' shadows member inherited from type \'W\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:53:7: warning: non-static data member \'x\' of \'H\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:54:7: warning: non-static data member \'y\' of \'H\' shadows member inherited from type \'A\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:67:7: warning: non-static data member \'x\' of \'J\' shadows member inherited from type \'I\' [-Wshadow-field]","clang/test/CXX/class.derived/class.member.lookup/p10.cpp:110:7: warning: non-static data member \'x\' of \'E1\' shadows member inherited from type \'A1\' [-Wshadow-field]"}
		}
	},
	["warn_shift_gt_typewidth"]={
		[l]={"shift-count-overflow"},
		[k]="shift-count-overflow",
		[b]="warn_shift_gt_typewidth",
		[c]="shift count >= width of type",
		[d]="shift count >= width of type",
		[e]=j,
		[f]="shift count \\>\\= width of type",
		[g]=" \\[(?:\\-Werror,)?\\-Wshift\\-count\\-overflow[^\\]]*\\]",
		[a]=n,
		[i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount","PR3333: warn when shifting by invalid amount\n\nllvm-svn: 78385"},
		[h]={{A,12034,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n  // ...\n  if (Right.uge(LeftBits)) {\n    S.DiagRuntimeBehavior(Loc, RHS.get(), S.PDiag(diag::warn_shift_gt_typewidth) << RHS.get()->getSourceRange());"}},
		[m]={
			["clang/test/SemaCXX/runtimediag-ppe.cpp"]={"clang/test/SemaCXX/runtimediag-ppe.cpp:16:33: warning: shift count >= width of type [-Wshift-count-overflow]"}
		}
	},
	["warn_shift_lhs_negative"]={
		[l]={"shift-negative-value"},
		[k]="shift-negative-value",
		[b]="warn_shift_lhs_negative",
		[c]="shifting a negative signed value is undefined",
		[d]="shifting a negative signed value is undefined",
		[e]=j,
		[f]="shifting a negative signed value is undefined",
		[g]=" \\[(?:\\-Werror,)?\\-Wshift\\-negative\\-value[^\\]]*\\]",
		[a]=n,
		[i]={"bf0f7757e242",1436205729,"[Sema] Warn when shifting a negative value.","[Sema] Warn when shifting a negative value.\n\nExample:\n % ./clang -Wshift-negative-value emit.c\nemit.c:3:14: warning: shifting a negative signed value is undefined [-Wshift-negative-value]\n  int a = -1 << 3;\n          ~~ ^\n1 warning generated.\n\nPR:		24026\nDifferential Revision:	 http://reviews.llvm.org/D10938\nReviewed by:	rsmith\n\nllvm-svn: 241478"},
		[h]={{A,12056,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n  // ...\n  // If LHS does not have a non-negative value then, the\n  // behavior is undefined before C++2a. Warn about it.\n  if (Left.isNegative()) {\n    S.DiagRuntimeBehavior(Loc, LHS.get(), S.PDiag(diag::warn_shift_lhs_negative) << LHS.get()->getSourceRange());"}},
		[m]={
			["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:45:10: warning: shifting a negative signed value is undefined [-Wshift-negative-value]","clang/test/Sema/shift.c:46:10: warning: shifting a negative signed value is undefined [-Wshift-negative-value]","clang/test/Sema/shift.c:55:17: warning: shifting a negative signed value is undefined [-Wshift-negative-value]"}
		}
	},
	["warn_shift_negative"]={
		[l]={"shift-count-negative"},
		[k]="shift-count-negative",
		[b]="warn_shift_negative",
		[c]="shift count is negative",
		[d]="shift count is negative",
		[e]=j,
		[f]="shift count is negative",
		[g]=" \\[(?:\\-Werror,)?\\-Wshift\\-count\\-negative[^\\]]*\\]",
		[a]=n,
		[i]={"f53fab87d80b",1249662020,"PR3333: warn when shifting by invalid amount","PR3333: warn when shifting by invalid amount\n\nllvm-svn: 78385"},
		[h]={{A,12001,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n  // ...\n  if (Right.isNegative()) {\n    S.DiagRuntimeBehavior(Loc, RHS.get(), S.PDiag(diag::warn_shift_negative) << RHS.get()->getSourceRange());"}},
		[m]={
			["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:21:9: warning: shift count is negative [-Wshift-count-negative]","clang/test/Sema/shift.c:22:9: warning: shift count is negative [-Wshift-count-negative]","clang/test/Sema/shift.c:31:5: warning: shift count is negative [-Wshift-count-negative]","clang/test/Sema/shift.c:32:5: warning: shift count is negative [-Wshift-count-negative]"}
		}
	},
	["warn_shift_result_gt_typewidth"]={
		[l]={"shift-overflow"},
		[k]="shift-overflow",
		[b]="warn_shift_result_gt_typewidth",
		[c]="signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits",
		[d]="signed shift result (A) requires B bits to represent, but C only has D bits",
		[e]=j,
		[f]="signed shift result \\((.*?)\\) requires (.*?) bits to represent, but (.*?) only has (.*?) bits",
		[g]=" \\[(?:\\-Werror,)?\\-Wshift\\-overflow[^\\]]*\\]",
		[a]=n,
		[i]={"4c6fdca03573",1298504051,"Implement a warning for known shift overflows on constant shift","Implement a warning for known shift overflows on constant shift\nexpressions. Consider the code:\n\n  int64_t i = 10 << 30;\n\nThis compiles fine, but most developers expect it to produce the value\nfor 10 gigs, not -2 gigs. This is actually undefined behavior because\nthe LHS is a signed integer type.\n\nThe warning is currently gated behind -Wshift-overflow.\n\nThere is a special case where only the sign bit is overridden that gets\na custom error message and is by default ignored. This case is much less\nlikely to cause observed buggy behavior, it\'s just undefined behavior\naccording to the spec. This warning can be enabled with\n-Wshift-sign-overflow.\n\nOriginal patch by Oleg Slezberg, with style tweaks and some correctness\nfixes by me.\n\nllvm-svn: 126342"},
		[h]={{A,12075,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n  // ...\n  S.Diag(Loc, diag::warn_shift_result_gt_typewidth) << HexResult.str() << Result.getSignificantBits() << LHSType << Left.getBitWidth() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[m]={
			["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:43:9: warning: signed shift result (0x100000000) requires 34 bits to represent, but \'int\' only has 32 bits [-Wshift-overflow]"}
		}
	},
	["warn_shift_result_sets_sign_bit"]={
		[l]={"shift-sign-overflow"},
		[k]="shift-sign-overflow",
		[b]="warn_shift_result_sets_sign_bit",
		[c]="signed shift result (%0) sets the sign bit of the shift expression\'s type (%1) and becomes negative",
		[d]="signed shift result (A) sets the sign bit of the shift expression\'s type (B) and becomes negative",
		[e]=j,
		[f]="signed shift result \\((.*?)\\) sets the sign bit of the shift expression\'s type \\((.*?)\\) and becomes negative",
		[g]=" \\[(?:\\-Werror,)?\\-Wshift\\-sign\\-overflow[^\\]]*\\]",
		[a]=n,
		[i]={"70f05fdfeebd",1308099292,"Sema: show shift result in hexadecimal","Sema: show shift result in hexadecimal\n\nChange the output for -Wshift-overflow and\n-Wshift-sign-overflow to an unsigned hexadecimal. It makes\nmore sense for looking at bits than a signed decimal does.\nAlso, change the diagnostic\'s wording from \"overrides\"\nto \"sets\".\n\nThis uses a new optional argument in APInt::toString()\nthat adds the \'0x\' prefix to hexademical numbers.\n\nThis fixes PR 9651.\n\nPatch by nobled@dreamwidth.org!\n\nllvm-svn: 133033"},
		[h]={{A,12062,"static void DiagnoseBadShiftValues(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc, QualType LHSType) {\n  // ...\n  // If we are only missing a sign bit, this is less likely to result in actual\n  // bugs -- if the result is cast back to an unsigned type, it will have the\n  // expected value. Thus we place this behind a different warning that can be\n  // turned off separately if needed.\n  if (LeftBits == ResultBits - 1) {\n    S.Diag(Loc, diag::warn_shift_result_sets_sign_bit) << HexResult << LHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[m]={
			["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:44:9: warning: signed shift result (0x80000000) sets the sign bit of the shift expression\'s type (\'int\') and becomes negative [-Wshift-sign-overflow]"}
		}
	},
	["warn_side_effects_typeid"]={
		[l]={o,q,r,"potentially-evaluated-expression","unevaluated-expression",K,O},
		[k]="potentially-evaluated-expression",
		[b]="warn_side_effects_typeid",
		[c]="expression with side effects will be evaluated despite being used as an operand to \'typeid\'",
		[d]="expression with side effects will be evaluated despite being used as an operand to \'typeid\'",
		[e]=j,
		[f]="expression with side effects will be evaluated despite being used as an operand to \'typeid\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wpotentially\\-evaluated\\-expression[^\\]]*\\]",
		[a]=L,
		[i]={"6c93b3e29c56",1418853437,"Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression ...","Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression context, such as sizeof(), or decltype(). Also adds a similar warning when the expression passed to typeid() *is* evaluated, since it is equally likely that the user would expect the expression operand to be unevaluated in that case.\n\nllvm-svn: 224465"},
		[h]={{yb,641,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n  // ...\n  if (E->getType()->isVariablyModifiedType())\n  // ...\n  else if (!inTemplateInstantiation() && E->HasSideEffects(Context, WasEvaluated)) {\n    // ...\n    Diag(E->getExprLoc(), WasEvaluated ? diag::warn_side_effects_typeid : diag::warn_side_effects_unevaluated_context);"}},
		[m]={
			["clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp"]={"clang/test/CodeGenCXX/microsoft-no-rtti-data.cpp:20:35: warning: expression with side effects will be evaluated despite being used as an operand to \'typeid\' [-Wpotentially-evaluated-expression]"}
		}
	},
	["warn_side_effects_unevaluated_context"]={
		[l]={o,q,r,"unevaluated-expression",K,O},
		[k]="unevaluated-expression",
		[b]="warn_side_effects_unevaluated_context",
		[c]="expression with side effects has no effect in an unevaluated context",
		[d]="expression with side effects has no effect in an unevaluated context",
		[e]=j,
		[f]="expression with side effects has no effect in an unevaluated context",
		[g]=" \\[(?:\\-Werror,)?\\-Wunevaluated\\-expression[^\\]]*\\]",
		[a]=L,
		[i]={"6c93b3e29c56",1418853437,"Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression ...","Adding a -Wunused-value warning for expressions with side effects used in an unevaluated expression context, such as sizeof(), or decltype(). Also adds a similar warning when the expression passed to typeid() *is* evaluated, since it is equally likely that the user would expect the expression operand to be unevaluated in that case.\n\nllvm-svn: 224465"},
		[h]={{A,1701,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  // The controlling expression is an unevaluated operand, so side effects are\n  // likely unintended.\n  if (!inTemplateInstantiation() && !IsResultDependent && ControllingExpr && ControllingExpr->HasSideEffects(Context, false))\n    Diag(ControllingExpr->getExprLoc(), diag::warn_side_effects_unevaluated_context);"},{A,4399,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  // The operand for sizeof and alignof is in an unevaluated expression context,\n  // so side effects could result in unintended consequences.\n  // Exclude instantiation-dependent expressions, because \'sizeof\' is sometimes\n  // used to build SFINAE gadgets.\n  // FIXME: Should we consider instantiation-dependent operands to \'alignof\'?\n  if (IsUnevaluatedOperand && !inTemplateInstantiation() && !E->isInstantiationDependent() && !E->getType()->isVariableArrayType() && E->HasSideEffects(Context, false))\n    Diag(E->getExprLoc(), diag::warn_side_effects_unevaluated_context);"},{yb,642,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n  // ...\n  if (E->getType()->isVariablyModifiedType())\n  // ...\n  else if (!inTemplateInstantiation() && E->HasSideEffects(Context, WasEvaluated)) {\n    // ...\n    Diag(E->getExprLoc(), WasEvaluated ? diag::warn_side_effects_typeid : diag::warn_side_effects_unevaluated_context);"},{yb,8124,"ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, SourceLocation RParen) {\n  // ...\n  if (!inTemplateInstantiation() && !Operand->isInstantiationDependent() && Operand->HasSideEffects(Context, false)) {\n    // ...\n    Diag(Operand->getExprLoc(), diag::warn_side_effects_unevaluated_context);"},{U,9500,"QualType Sema::BuildDecltypeType(Expr *E, bool AsUnevaluated) {\n  // ...\n  if (AsUnevaluated && CodeSynthesisContexts.empty() && !E->isInstantiationDependent() && E->HasSideEffects(Context, false)) {\n    // ...\n    Diag(E->getExprLoc(), diag::warn_side_effects_unevaluated_context);"}},
		[m]={
			["clang/test/SemaOpenCL/vec_step.cl"]={"clang/test/SemaOpenCL/vec_step.cl:33:37: warning: expression with side effects has no effect in an unevaluated context [-Wunevaluated-expression]"}
		}
	},
	["warn_signed_bitfield_enum_conversion"]={
		[l]={"bitfield-enum-conversion",rb,Nb},
		[k]="bitfield-enum-conversion",
		[b]={{nil,w,"warn_signed_bitfield_enum_conversion"}},
		[c]={{nil,w,"signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1"}},
		[d]={{nil,w,"signed bit-field A needs an extra bit to represent the largest positive enumerators of B"}},
		[e]=j,
		[f]="signed bit\\-field (.*?) needs an extra bit to represent the largest positive enumerators of (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]",
		[a]={{nil,w,Rb}},
		[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values","Warn on enum assignment to bitfields that can\'t fit all values\n\nThis adds -Wbitfield-enum-conversion, which warns on implicit\nconversions that happen on bitfield assignment that change the value of\nsome enumerators.\n\nValues of enum type typically take on a very small range of values, so\nthey are frequently stored in bitfields. Unfortunately, there is no\nconvenient way to calculate the minimum number of bits necessary to\nstore all possible values at compile time, so users usually hard code a\nbitwidth that works today and widen it as necessary to pass basic\ntesting and validation. This is very error-prone, and leads to stale\nwidths as enums grow. This warning aims to catch such bugs.\n\nThis would have found two real bugs in clang and two instances of\nquestionable code. See r297680 and r297654 for the full description of\nthe issues.\n\nThis warning is currently disabled by default while we investigate its\nusefulness outside of LLVM.\n\nThe major cause of false positives with this warning is this kind of\nenum:\n  enum E { W, X, Y, Z, SENTINEL_LAST };\nThe last enumerator is an invalid value used to validate inputs or size\nan array. Depending on the prevalance of this style of enum across a\ncodebase, this warning may be more or less feasible to deploy. It also\nhas trouble on sentinel values such as ~0U.\n\nReviewers: rsmith, rtrieu, thakis\n\nReviewed By: thakis\n\nSubscribers: hfinkel, voskresensky.vladimir, sashab, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D30923\n\nllvm-svn: 297761"},
		[h]={{y,14087,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  // ...\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // ...\n      if (SignedEnum && !SignedBitfield) {\n      // ...\n      } else if (SignedBitfield && !SignedEnum && ED->getNumPositiveBits() == FieldWidth) {\n        DiagID = diag::warn_signed_bitfield_enum_conversion;"}},
		[m]={
			["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:32:21: warning: signed bit-field \'two_bits_signed\' needs an extra bit to represent the largest positive enumerators of \'TwoBits\' [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:44:23: warning: signed bit-field \'three_bits_signed\' needs an extra bit to represent the largest positive enumerators of \'ThreeBits\' [-Wbitfield-enum-conversion]"}
		}
	},
	["warn_sizeof_array_decay"]={
		[l]={o,q,r,"sizeof-array-decay"},
		[k]="sizeof-array-decay",
		[b]="warn_sizeof_array_decay",
		[c]="sizeof on pointer operation will return size of %0 instead of %1",
		[d]="sizeof on pointer operation will return size of A instead of B",
		[e]=j,
		[f]="sizeof on pointer operation will return size of (.*?) instead of (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-decay[^\\]]*\\]",
		[a]=n,
		[i]={"054faa5a4883",1364593401,"Sema: Warn on sizeof on binary ops on decayed arrays.","Sema: Warn on sizeof on binary ops on decayed arrays.\n\nThe array will decay into a pointer, creating an unexpected result.\nsizeof(array + int) is an easy to make typo for sizeof(array) + int.\n\nThis was motivated by a NetBSD security bug, used sizeof(key - r) instead of\nsizeof(key) - r, reducing entropy in a random number generator.\nhttp://cvsweb.netbsd.org/bsdweb.cgi/src/sys/kern/subr_cprng.c.diff?r1=1.14&r2=1.15&only_with_tag=MAIN&f=h\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D571\n\nllvm-svn: 178371"},
		[h]={{A,4384,"/// Check whether E is a pointer from a decayed array type (the decayed\n/// pointer type is equal to T) and emit a warning if it is.\nstatic void warnOnSizeofOnArrayDecay(Sema &S, SourceLocation Loc, QualType T, const Expr *E) {\n  // ...\n  S.Diag(Loc, diag::warn_sizeof_array_decay) << ICE->getSourceRange() << ICE->getType() << ICE->getSubExpr()->getType();"}},
		[m]={
			["clang/test/Sema/warn-sizeof-array-decay.c"]={"clang/test/Sema/warn-sizeof-array-decay.c:8:20: warning: sizeof on pointer operation will return size of \'int *\' instead of \'int[20]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:9:20: warning: sizeof on pointer operation will return size of \'char *\' instead of \'char[10]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:10:20: warning: sizeof on pointer operation will return size of \'int *\' instead of \'int[20]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:11:20: warning: sizeof on pointer operation will return size of \'char *\' instead of \'char[10]\' [-Wsizeof-array-decay]","clang/test/Sema/warn-sizeof-array-decay.c:17:17: warning: sizeof on pointer operation will return size of \'char *\' instead of \'char[10]\' [-Wsizeof-array-decay]"}
		}
	},
	["warn_sizeof_array_param"]={
		[l]={o,q,r,"sizeof-array-argument"},
		[k]="sizeof-array-argument",
		[b]="warn_sizeof_array_param",
		[c]="sizeof on array function parameter will return size of %0 instead of %1",
		[d]="sizeof on array function parameter will return size of A instead of B",
		[e]=j,
		[f]="sizeof on array function parameter will return size of (.*?) instead of (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-array\\-argument[^\\]]*\\]",
		[a]=n,
		[i]={"0870debb8b31",1308106023,"Warn on \"void f(int a[10]) { sizeof(a); }\"","Warn on \"void f(int a[10]) { sizeof(a); }\"\n\nllvm-svn: 133036"},
		[h]={{A,4443,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  if (ExprKind == UETT_SizeOf) {\n    if (const auto *DeclRef = dyn_cast<DeclRefExpr>(E->IgnoreParens())) {\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DeclRef->getFoundDecl())) {\n        // ...\n        if (Type->isPointerType() && OType->isArrayType()) {\n          Diag(E->getExprLoc(), diag::warn_sizeof_array_param) << Type << OType;"}},
		[m]={
			["clang/test/Sema/warn-sizeof-arrayarg.c"]={"clang/test/Sema/warn-sizeof-arrayarg.c:10:15: warning: sizeof on array function parameter will return size of \'int *\' instead of \'int[10]\' [-Wsizeof-array-argument]","clang/test/Sema/warn-sizeof-arrayarg.c:12:15: warning: sizeof on array function parameter will return size of \'int *\' instead of \'int[10]\' [-Wsizeof-array-argument]","clang/test/Sema/warn-sizeof-arrayarg.c:14:16: warning: sizeof on array function parameter will return size of \'int *\' instead of \'int[10]\' [-Wsizeof-array-argument]","clang/test/Sema/warn-sizeof-arrayarg.c:16:16: warning: sizeof on array function parameter will return size of \'int *\' instead of \'Arr\' (aka \'int[10]\') [-Wsizeof-array-argument]"}
		}
	},
	["warn_sizeof_pointer_expr_memaccess"]={
		[l]={"sizeof-pointer-memaccess","suspicious-memaccess"},
		[k]="sizeof-pointer-memaccess",
		[b]="warn_sizeof_pointer_expr_memaccess",
		[c]="\'%0\' call operates on objects of type %1 while the size is based on a different type %2",
		[d]="\'A\' call operates on objects of type B while the size is based on a different type C",
		[e]=j,
		[f]="\'(.*?)\' call operates on objects of type (.*?) while the size is based on a different type (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-memaccess[^\\]]*\\]",
		[a]=n,
		[i]={"8b9e5a72cb12",1308215380,"Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer","Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer\nand the programmer intended to write \'sizeof(*p)\'. There are several\nelements to the new version:\n\n1) The actual expressions are compared in order to more accurately flag\n   the case where the pattern that works for an array has been used, or\n   a \'*\' has been omitted.\n2) Only do a loose type-based check for record types. This prevents us\n   from warning when we happen to be copying around chunks of data the\n   size of a pointer and the pointer types for the sizeof and\n   source/dest match.\n3) Move all the diagnostics behind the runtime diagnostic filter. Not\n   sure this is really important for this particular diagnostic, but\n   almost everything else in SemaChecking.cpp does so.\n4) Make the wording of the diagnostic more precise and informative. At\n   least to my eyes.\n5) Provide highlighting for the two expressions which had the unexpected\n   similarity.\n6) Place this diagnostic under a flag: -Wsizeof-pointer-memaccess\n\nThis uses the Stmt::Profile system for computing #1. Because of the\npotential cost, this is guarded by the warning flag. I\'d be interested\nin feedback on how bad this is in practice; I would expect it to be\nquite cheap in practice. Ideas for a cheaper / better way to do this are\nalso welcome.\n\nThe diagnostic wording could likely use some further wordsmithing.\nSuggestions welcome here. The goals I had were to: clarify that its the\ninteraction of \'memset\' and \'sizeof\' and give more reasonable\nsuggestions for a resolution.\n\nAn open question is whether these diagnostics should have the note\nattached for silencing by casting the dest/source pointer to void*.\n\nllvm-svn: 133155"},
		[h]={{y,12478,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n      // ...\n      if (SizeOfArg && !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, SizeOfArg->getExprLoc())) {"},{y,12517,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n      // ...\n      // Catch \"memset(p, 0, sizeof(p))\" -- needs to be sizeof(*p). Do this by\n      // actually comparing the expressions for equality. Because computing the\n      // expression IDs can be expensive, we only do this if the diagnostic is\n      // enabled.\n      if (SizeOfArg && !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, SizeOfArg->getExprLoc())) {\n        // ...\n        if (DestID == SizeOfArgID) {\n          // ...\n          DiagRuntimeBehavior(SL, SizeOfArg, PDiag(diag::warn_sizeof_pointer_expr_memaccess) << ReadableName << PointeeTy << DestTy << DSR << SSR);"},{y,17965,"/// DiagnoseSelfMove - Emits a warning if a value is moved to itself.\nvoid Sema::DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr, SourceLocation OpLoc) {\n  if (Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, OpLoc))"}},
		[m]={
			["clang/test/Sema/memset-invalid-1.c"]={"clang/test/Sema/memset-invalid-1.c:12:26: warning: \'memset\' call operates on objects of type \'struct __incomplete\' while the size is based on a different type \'incomplete\' (aka \'struct __incomplete *\') [-Wsizeof-pointer-memaccess]"}
		}
	},
	["warn_sizeof_pointer_expr_memaccess_note"]={
		[b]="warn_sizeof_pointer_expr_memaccess_note",
		[c]="did you mean to %select{dereference the argument to \'sizeof\' (and multiply it by the number of elements)|remove the addressof in the argument to \'sizeof\' (and multiply it by the number of elements)|provide an explicit length}0?",
		[d]={{nil,nil,{"did you mean to ",{"dereference the argument to \'sizeof\' (and multiply it by the number of elements)","remove the addressof in the argument to \'sizeof\' (and multiply it by the number of elements)","provide an explicit length"},"?"}}},
		[e]="note\\: ",
		[f]="did you mean to (?:dereference the argument to \'sizeof\' \\(and multiply it by the number of elements\\)|remove the addressof in the argument to \'sizeof\' \\(and multiply it by the number of elements\\)|provide an explicit length)\\?",
		[g]=F,
		[a]=n,
		[i]={"d08d9159c289",1338419692,"Change wording of \'memcpy\' type mismatch warning and remove fixit.","Change wording of \'memcpy\' type mismatch warning and remove fixit.\n\nAs per comments following r157659.\n\nllvm-svn: 157722"},
		[h]={{y,12524,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n      // ...\n      // Catch \"memset(p, 0, sizeof(p))\" -- needs to be sizeof(*p). Do this by\n      // actually comparing the expressions for equality. Because computing the\n      // expression IDs can be expensive, we only do this if the diagnostic is\n      // enabled.\n      if (SizeOfArg && !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess, SizeOfArg->getExprLoc())) {\n        // ...\n        if (DestID == SizeOfArgID) {\n          // ...\n          DiagRuntimeBehavior(SL, SizeOfArg, PDiag(diag::warn_sizeof_pointer_expr_memaccess_note) << ActionIdx << SSR);"}},
		[m]={
			["clang/test/Sema/memset-invalid-1.c"]={"clang/test/Sema/memset-invalid-1.c:12:26: note: did you mean to dereference the argument to \'sizeof\' (and multiply it by the number of elements)?"}
		}
	},
	["warn_sizeof_pointer_type_memaccess"]={
		[l]={"sizeof-pointer-memaccess","suspicious-memaccess"},
		[k]="sizeof-pointer-memaccess",
		[b]="warn_sizeof_pointer_type_memaccess",
		[c]="argument to \'sizeof\' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length",
		[d]={{nil,nil,{"argument to \'sizeof\' in A call is the same pointer type B as the ",{"destination",h},"; expected D or an explicit length"}}},
		[e]=j,
		[f]="argument to \'sizeof\' in (.*?) call is the same pointer type (.*?) as the (?:destination|source); expected (.*?) or an explicit length",
		[g]=" \\[(?:\\-Werror,)?\\-Wsizeof\\-pointer\\-memaccess[^\\]]*\\]",
		[a]=n,
		[i]={"8b9e5a72cb12",1308215380,"Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer","Rework the warning for \'memset(p, 0, sizeof(p))\' where \'p\' is a pointer\nand the programmer intended to write \'sizeof(*p)\'. There are several\nelements to the new version:\n\n1) The actual expressions are compared in order to more accurately flag\n   the case where the pattern that works for an array has been used, or\n   a \'*\' has been omitted.\n2) Only do a loose type-based check for record types. This prevents us\n   from warning when we happen to be copying around chunks of data the\n   size of a pointer and the pointer types for the sizeof and\n   source/dest match.\n3) Move all the diagnostics behind the runtime diagnostic filter. Not\n   sure this is really important for this particular diagnostic, but\n   almost everything else in SemaChecking.cpp does so.\n4) Make the wording of the diagnostic more precise and informative. At\n   least to my eyes.\n5) Provide highlighting for the two expressions which had the unexpected\n   similarity.\n6) Place this diagnostic under a flag: -Wsizeof-pointer-memaccess\n\nThis uses the Stmt::Profile system for computing #1. Because of the\npotential cost, this is guarded by the warning flag. I\'d be interested\nin feedback on how bad this is in practice; I would expect it to be\nquite cheap in practice. Ideas for a cheaper / better way to do this are\nalso welcome.\n\nThe diagnostic wording could likely use some further wordsmithing.\nSuggestions welcome here. The goals I had were to: clarify that its the\ninteraction of \'memset\' and \'sizeof\' and give more reasonable\nsuggestions for a resolution.\n\nAn open question is whether these diagnostics should have the note\nattached for silencing by casting the dest/source pointer to void*.\n\nllvm-svn: 133155"},
		[h]={{y,12539,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  // ...\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    // ...\n    if (const PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {\n      // ...\n      // Also check for cases where the sizeof argument is the exact same\n      // type as the memory argument, and where it points to a user-defined\n      // record type.\n      if (SizeOfArgTy != QualType()) {\n        if (PointeeTy->isRecordType() && Context.typesAreCompatible(SizeOfArgTy, DestTy)) {\n          DiagRuntimeBehavior(LenExpr->getExprLoc(), Dest, PDiag(diag::warn_sizeof_pointer_type_memaccess) << FnName << SizeOfArgTy << ArgIdx << PointeeTy << Dest->getSourceRange() << LenExpr->getSourceRange());"}},
		[m]={
			["clang/test/SemaCXX/warn-memset-bad-sizeof.cpp"]={"clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:44:18: warning: argument to \'sizeof\' in \'memset\' call is the same pointer type \'typeof (ps2)\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]","clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:46:18: warning: argument to \'sizeof\' in \'memset\' call is the same pointer type \'PS\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]","clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:57:14: warning: argument to \'sizeof\' in \'bzero\' call is the same pointer type \'typeof (ps2)\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]","clang/test/SemaCXX/warn-memset-bad-sizeof.cpp:59:14: warning: argument to \'sizeof\' in \'bzero\' call is the same pointer type \'PS\' (aka \'S *\') as the destination; expected \'S\' or an explicit length [-Wsizeof-pointer-memaccess]"}
		}
	},
	["warn_slash_u_filename"]={
		[l]={"slash-u-filename"},
		[k]="slash-u-filename",
		[b]={{nil,w,"warn_slash_u_filename"}},
		[c]={{nil,w,"\'/U%0\' treated as the \'/U\' option"}},
		[d]={{nil,w,"\'/UA\' treated as the \'/U\' option"}},
		[e]=j,
		[f]="\'\\/U(.*?)\' treated as the \'\\/U\' option",
		[g]=" \\[(?:\\-Werror,)?\\-Wslash\\-u\\-filename[^\\]]*\\]",
		[a]={{nil,w,E}},
		[i]={"091f1b6ef314",1485536981,"clang-cl: Warn about /U flags that look like filenames (PR31662)","clang-cl: Warn about /U flags that look like filenames (PR31662)\n\nBoth on Mac and Windows, it\'s common to have a \'Users\' directory in the\nroot of the filesystem, so one might specify a filename as\n\'/Users/me/myfile.c\'. clang-cl (as well as MSVC\'s cl.exe) will interpret\nthat as invoking the \'/U\' option, which is probably not what the user\nwanted. Add a warning about this.\n\nDifferential Revision: https://reviews.llvm.org/D29198\n\nllvm-svn: 293305"},
		[h]={{"clang/lib/Driver/Driver.cpp",2793,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // ...\n  for (Arg *A : Args) {\n    if (A->getOption().getKind() == Option::InputClass) {\n    // ...\n    } else if (A->getOption().matches(options::OPT__SLASH_Tc)) {\n    // ...\n    } else if (A->getOption().matches(options::OPT__SLASH_Tp)) {\n    // ...\n    } else if (A->getOption().hasFlag(options::LinkerInput)) {\n    // ...\n    } else if (A->getOption().matches(options::OPT_x)) {\n    // ...\n    } else if (A->getOption().getID() == options::OPT_U) {\n      // ...\n      if (Val.find_first_of(\"/\\\\\") != StringRef::npos) {\n        // ...\n        Diag(diag::warn_slash_u_filename) << Val;"}}
	},
	["warn_slh_does_not_support_asm_goto"]={
		[l]={"slh-asm-goto"},
		[k]="slh-asm-goto",
		[b]={{nil,z,"warn_slh_does_not_support_asm_goto"}},
		[c]={{nil,B,"speculative load hardening does not protect functions with asm goto"},{D,z,"Speculative load hardening does not protect functions with asm goto"}},
		[d]={{nil,B,"speculative load hardening does not protect functions with asm goto"},{D,z,"Speculative load hardening does not protect functions with asm goto"}},
		[e]=j,
		[f]="speculative load hardening does not protect functions with asm goto",
		[g]=" \\[(?:\\-Werror,)?\\-Wslh\\-asm\\-goto[^\\]]*\\]",
		[a]={{nil,z,"Inline Assembly Issue"}},
		[i]={"60ee88599098",1589228634,"[clang][asm goto][slh] Warn if asm goto + SLH","[clang][asm goto][slh] Warn if asm goto + SLH\n\nSummary:\nAsm goto is not supported by SLH. Warn if an instance of asm goto is detected\nwhile SLH is enabled.\n\nTest included.\n\nReviewed By: jyu2\n\nDifferential Revision: https://reviews.llvm.org/D79743"},
		[h]={{"clang/lib/Parse/ParseStmtAsm.cpp",737,"/// ParseAsmStatement - Parse a GNU extended asm statement.\n///       asm-statement:\n///         gnu-asm-statement\n///         ms-asm-statement\n///\n/// [GNU] gnu-asm-statement:\n///         \'asm\' asm-qualifier-list[opt] \'(\' asm-argument \')\' \';\'\n///\n/// [GNU] asm-argument:\n///         asm-string-literal\n///         asm-string-literal \':\' asm-operands[opt]\n///         asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n///         asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n///                 \':\' asm-clobbers\n///\n/// [GNU] asm-clobbers:\n///         asm-string-literal\n///         asm-clobbers \',\' asm-string-literal\n///\nStmtResult Parser::ParseAsmStatement(bool &msAsm) {\n  // ...\n  if (GAQ.isGoto() && getLangOpts().SpeculativeLoadHardening)\n    Diag(Loc, diag::warn_slh_does_not_support_asm_goto);"}},
		[m]={
			["clang/test/Parser/slh-asm-goto.cpp"]={"clang/test/Parser/slh-asm-goto.cpp:4:9: warning: speculative load hardening does not protect functions with asm goto [-Wslh-asm-goto]"}
		}
	},
	["warn_some_initializers_out_of_order"]={
		[l]={o,q,r,"reorder","reorder-ctor"},
		[k]="reorder-ctor",
		[b]={{nil,C,"warn_some_initializers_out_of_order"}},
		[c]={{nil,C,"initializer order does not match the declaration order"}},
		[d]={{nil,C,"initializer order does not match the declaration order"}},
		[e]=j,
		[f]="initializer order does not match the declaration order",
		[g]=" \\[(?:\\-Werror,)?\\-Wreorder\\-ctor[^\\]]*\\]",
		[a]={{nil,C,n}},
		[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
		[h]={{T,5587,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // ...\n  // Introduce a new scope as SemaDiagnosticBuilder needs to be destroyed to\n  // emit the diagnostic before we can try adding notes.\n  {\n    Sema::SemaDiagnosticBuilder D = SemaRef.Diag(Inits[WarnIndexes.front() - 1]->getSourceLocation(), WarnIndexes.size() == 1 ? diag::warn_initializer_out_of_order : diag::warn_some_initializers_out_of_order);"}},
		[m]={
			["clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp"]={"clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp:10:9: warning: initializer order does not match the declaration order [-Wreorder-ctor]"}
		}
	},
	["warn_sometimes_uninit_var"]={
		[l]={o,q,r,"sometimes-uninitialized",W},
		[k]="sometimes-uninitialized",
		[b]="warn_sometimes_uninit_var",
		[c]="variable %0 is %select{used|captured}1 uninitialized whenever %select{\'%3\' condition is %select{true|false}4|\'%3\' loop %select{is entered|exits because its condition is false}4|\'%3\' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2",
		[d]={{nil,nil,{"variable A is ",{"used","captured"}," uninitialized whenever ",{{"\'D\' condition is ",{"true","false"}},{"\'D\' loop ",{"is entered","exits because its condition is false"}},{"\'D\' loop ",{"condition is true","exits because its condition is false"}},"switch D is taken","its declaration is reached","D is called"}}}},
		[e]=j,
		[f]="variable (.*?) is (?:used|captured) uninitialized whenever (?:\'(.*?)\' condition is (?:true|false)|\'(.*?)\' loop (?:is entered|exits because its condition is false)|\'(.*?)\' loop (?:condition is true|exits because its condition is false)|switch (.*?) is taken|its declaration is reached|(.*?) is called)",
		[g]=" \\[(?:\\-Werror,)?\\-Wsometimes\\-uninitialized[^\\]]*\\]",
		[a]=n,
		[i]={"4323bf8e2e51",1337912229,"Split a chunk of -Wconditional-uninitialized warnings out into a separate flag,","Split a chunk of -Wconditional-uninitialized warnings out into a separate flag,\n-Wsometimes-uninitialized. This detects cases where an explicitly-written branch\ninevitably leads to an uninitialized variable use (so either the branch is dead\ncode or there is an uninitialized use bug).\n\nThis chunk of warnings tentatively lives within -Wuninitialized, in order to\ngive it more visibility to existing Clang users.\n\nllvm-svn: 157458"},
		[h]={{v,841,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // ...\n  case UninitUse::AfterDecl:\n  case UninitUse::AfterCall:\n    S.Diag(VD->getLocation(), diag::warn_sometimes_uninit_var) << VD->getDeclName() << IsCapturedByBlock << (Use.getKind() == UninitUse::AfterDecl ? 4 : 5) << const_cast<DeclContext *>(VD->getLexicalDeclContext()) << VD->getSourceRange();"},{v,977,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // ...\n  // Diagnose each branch which leads to a sometimes-uninitialized use.\n  for (UninitUse::branch_iterator I = Use.branch_begin(), E = Use.branch_end(); I != E; ++I) {\n    // ...\n    S.Diag(Range.getBegin(), diag::warn_sometimes_uninit_var) << VD->getDeclName() << IsCapturedByBlock << DiagKind << Str << I->Output << Range;"},{v,2630,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}},
		[m]={
			["clang/test/Sema/uninit-variables.c"]={"clang/test/Sema/uninit-variables.c:43:7: warning: variable \'x\' is used uninitialized whenever \'if\' condition is false [-Wsometimes-uninitialized]","clang/test/Sema/uninit-variables.c:156:7: warning: variable \'z\' is used uninitialized whenever \'||\' condition is true [-Wsometimes-uninitialized]","clang/test/Sema/uninit-variables.c:163:7: warning: variable \'z\' is used uninitialized whenever \'||\' condition is true [-Wsometimes-uninitialized]","clang/test/Sema/uninit-variables.c:299:7: warning: variable \'y\' is used uninitialized whenever \'if\' condition is false [-Wsometimes-uninitialized]"}
		}
	},
	["warn_splice_in_doxygen_comment"]={
		[l]={"documentation"},
		[k]="documentation",
		[b]="warn_splice_in_doxygen_comment",
		[c]="line splicing in Doxygen comments are not supported",
		[d]="line splicing in Doxygen comments are not supported",
		[e]=j,
		[f]="line splicing in Doxygen comments are not supported",
		[g]=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]",
		[a]="Documentation Issue",
		[i]={eb,1625925174,fb,ob},
		[h]={{M,2415,"void Sema::ActOnComment(SourceRange Comment) {\n  // ...\n  if (RC.isAlmostTrailingComment() || RC.hasUnsupportedSplice(SourceMgr)) {\n    // ...\n    case RawComment::RCK_Invalid:\n      // ...\n      Diag(Comment.getBegin(), diag::warn_splice_in_doxygen_comment);"}},
		[m]={
			["clang/test/Lexer/comment-escape.c"]={"clang/test/Lexer/comment-escape.c:9:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:14:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:21:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:26:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:32:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]","clang/test/Lexer/comment-escape.c:36:1: warning: line splicing in Doxygen comments are not supported [-Wdocumentation]"}
		}
	},
	["warn_stack_clash_protection_inline_asm"]={
		[l]={"stack-protector"},
		[k]="stack-protector",
		[b]={{nil,z,"warn_stack_clash_protection_inline_asm"}},
		[c]={{nil,B,"unable to protect inline asm that clobbers stack pointer against stack clash"},{D,z,"Unable to protect inline asm that clobbers stack pointer against stack clash"}},
		[d]={{nil,B,"unable to protect inline asm that clobbers stack pointer against stack clash"},{D,z,"Unable to protect inline asm that clobbers stack pointer against stack clash"}},
		[e]=j,
		[f]="unable to protect inline asm that clobbers stack pointer against stack clash",
		[g]=" \\[(?:\\-Werror,)?\\-Wstack\\-protector[^\\]]*\\]",
		[a]={{nil,z,"Inline Assembly Issue"}},
		[i]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86","Support -fstack-clash-protection for x86\n\nImplement protection against the stack clash attack [0] through inline stack\nprobing.\n\nProbe stack allocation every PAGE_SIZE during frame lowering or dynamic\nallocation to make sure the page guard, if any, is touched when touching the\nstack, in a similar manner to GCC[1].\n\nThis extends the existing `probe-stack\' mechanism with a special value `inline-asm\'.\nTechnically the former uses function call before stack allocation while this\npatch provides inlined stack probes and chunk allocation.\n\nOnly implemented for x86.\n\n[0] https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt\n[1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00556.html\n\nDifferential Revision: https://reviews.llvm.org/D68720"},
		[h]={{"clang/lib/CodeGen/CGStmt.cpp",2751,"void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {\n  // ...\n  // Clobbers\n  for (unsigned i = 0, e = S.getNumClobbers(); i != e; i++) {\n    // ...\n    if (Clobber == \"memory\")\n    // ...\n    else if (Clobber == \"unwind\") {\n    // ...\n    } else if (Clobber != \"cc\") {\n      // ...\n      if (CGM.getCodeGenOpts().StackClashProtector && getTarget().isSPRegName(Clobber)) {\n        CGM.getDiags().Report(S.getAsmLoc(), diag::warn_stack_clash_protection_inline_asm);"}},
		[m]={
			["clang/test/Driver/stack-clash-protection-02.c"]={"clang/test/Driver/stack-clash-protection-02.c:8:3: warning: unable to protect inline asm that clobbers stack pointer against stack clash [-Wstack-protector]"}
		}
	},
	["warn_stack_exhausted"]={
		[l]={"stack-exhausted"},
		[k]="stack-exhausted",
		[b]={{nil,s,"warn_stack_exhausted"}},
		[c]={{nil,s,"stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely"}},
		[d]={{nil,s,"stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely"}},
		[e]=j,
		[f]="stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely",
		[g]=" \\[(?:\\-Werror,)?\\-Wstack\\-exhausted[^\\]]*\\]",
		[a]={{nil,s,E}},
		[i]={"26a92d5852b2",1566843487,"Improve behavior in the case of stack exhaustion.","Improve behavior in the case of stack exhaustion.\n\nSummary:\nClang performs various recursive operations (such as template instantiation),\nand may use non-trivial amounts of stack space in each recursive step (for\ninstance, due to recursive AST walks). While we try to keep the stack space\nused by such steps to a minimum and we have explicit limits on the number of\nsuch steps we perform, it\'s impractical to guarantee that we won\'t blow out the\nstack on deeply recursive template instantiations on complex ASTs, even with\nonly a moderately high instantiation depth limit.\n\nThe user experience in these cases is generally terrible: we crash with\nno hint of what went wrong. Under this patch, we attempt to do better:\n\n * Detect when the stack is nearly exhausted, and produce a warning with a\n   nice template instantiation backtrace, telling the user that we might\n   run slowly or crash.\n\n * For cases where we\'re forced to trigger recursive template\n   instantiation in arbitrarily-deeply-nested contexts, check whether\n   we\'re nearly out of stack space and allocate a new stack (by spawning\n   a new thread) after producing the warning.\n\nReviewers: rnk, aaron.ballman\n\nSubscribers: mgorny, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D66361\n\nllvm-svn: 369940"},
		[h]={{M,506,"void Sema::warnStackExhausted(SourceLocation Loc) {\n  // Only warn about this once.\n  if (!WarnedStackExhausted) {\n    Diag(Loc, diag::warn_stack_exhausted);"}},
		[m]={
			["clang/test/SemaTemplate/stack-exhaustion.cpp"]={"clang/test/SemaTemplate/stack-exhaustion.cpp:19:24: warning: stack nearly exhausted; compilation time may suffer, and crashes due to stack overflow are likely [-Wstack-exhausted]"}
		}
	},
	["warn_standalone_specifier"]={
		[l]={"missing-declarations"},
		[k]="missing-declarations",
		[b]="warn_standalone_specifier",
		[c]="\'%0\' ignored on this declaration",
		[d]="\'A\' ignored on this declaration",
		[e]=j,
		[f]="\'(.*?)\' ignored on this declaration",
		[g]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]",
		[a]=n,
		[i]={"aa017377827f",1300834804,"Warn about unused declaration-specifiers on tag declarations.","Warn about unused declaration-specifiers on tag declarations.\n\nllvm-svn: 128118"},
		[h]={{G,5279,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  unsigned DiagID = diag::warn_standalone_specifier;"}},
		[m]={
			["clang/test/Sema/struct-decl.c"]={"clang/test/Sema/struct-decl.c:51:1: warning: \'static\' ignored on this declaration [-Wmissing-declarations]","clang/test/Sema/struct-decl.c:54:1: warning: \'const\' ignored on this declaration [-Wmissing-declarations]"}
		}
	},
	["warn_static_array_too_small"]={
		[l]={"array-bounds"},
		[k]="array-bounds",
		[b]="warn_static_array_too_small",
		[c]={{nil,S,"array argument is too small; %select{contains %0 elements|is of size %0}2, callee requires at least %1"},{I,nil,"array argument is too small; contains %0 elements, callee requires at least %1"}},
		[d]={{nil,S,{"array argument is too small; ",{"contains A elements","is of size A"},", callee requires at least B"}},{I,nil,"array argument is too small; contains A elements, callee requires at least B"}},
		[e]=j,
		[f]="array argument is too small; (?:contains (.*?) elements|is of size (.*?)), callee requires at least (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Warray\\-bounds[^\\]]*\\]",
		[a]=n,
		[i]={"5aa6ecb619bc",1318799852,"Add sema checks for calls to functions taking static array parameters","Add sema checks for calls to functions taking static array parameters\n\nllvm-svn: 142157"},
		[h]={{A,6714,"/// CheckStaticArrayArgument - If the given argument corresponds to a static\n/// array parameter, check that it is non-null, and that if it is formed by\n/// array-to-pointer decay, the underlying array is sufficiently large.\n///\n/// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of the\n/// array type derivation, then for each call to the function, the value of the\n/// corresponding actual argument shall provide access to the first element of\n/// an array with at least as many elements as specified by the size expression.\nvoid Sema::CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param, const Expr *ArgExpr) {\n  // ...\n  if (getASTContext().hasSameUnqualifiedType(CAT->getElementType(), ArgCAT->getElementType())) {\n    if (ArgCAT->getSize().ult(CAT->getSize())) {\n      Diag(CallLoc, diag::warn_static_array_too_small) << ArgExpr->getSourceRange() << (unsigned)ArgCAT->getSize().getZExtValue() << (unsigned)CAT->getSize().getZExtValue() << 0;"},{A,6906,"/// CheckStaticArrayArgument - If the given argument corresponds to a static\n/// array parameter, check that it is non-null, and that if it is formed by\n/// array-to-pointer decay, the underlying array is sufficiently large.\n///\n/// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of the\n/// array type derivation, then for each call to the function, the value of the\n/// corresponding actual argument shall provide access to the first element of\n/// an array with at least as many elements as specified by the size expression.\nvoid Sema::CheckStaticArrayArgument(SourceLocation CallLoc, ParmVarDecl *Param, const Expr *ArgExpr) {\n  // ...\n  if (ArgSize && ParmSize && *ArgSize < *ParmSize) {\n    Diag(CallLoc, diag::warn_static_array_too_small) << ArgExpr->getSourceRange() << (unsigned)ArgSize->getQuantity() << (unsigned)ParmSize->getQuantity() << 1;"}},
		[m]={
			["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:16:3: warning: array argument is too small; contains 2 elements, callee requires at least 3 [-Warray-bounds]","clang/test/Sema/static-array.c:25:3: warning: array argument is too small; is of size 4, callee requires at least 12 [-Warray-bounds]","clang/test/Sema/static-array.c:26:3: warning: array argument is too small; is of size 4, callee requires at least 12 [-Warray-bounds]"}
		}
	},
	["warn_static_assert_message_constexpr"]={
		[l]={"invalid-static-assert-message"},
		[k]="invalid-static-assert-message",
		[b]="warn_static_assert_message_constexpr",
		[c]="the message in this static assertion is not a constant expression",
		[d]="the message in this static assertion is not a constant expression",
		[e]=Jb,
		[f]="the message in this static assertion is not a constant expression",
		[g]=" \\[[^\\]]*\\-Winvalid\\-static\\-assert\\-message[^\\]]*\\]",
		[a]=n,
		[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
		[h]={{T,17049,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (!ErrorOnInvalidMessage && Diags.isIgnored(diag::warn_static_assert_message_constexpr, Loc))"},{T,17060,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n    Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}},
		[m]={
			["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:34:21: error: the message in this static assertion is not a constant expression [-Winvalid-static-assert-message]","clang/test/SemaCXX/static-assert-cxx26.cpp:48:21: error: the message in this static assertion is not a constant expression [-Winvalid-static-assert-message]"}
		}
	},
	["warn_static_inline_explicit_inst_ignored"]={
		[l]={"static-inline-explicit-instantiation"},
		[k]="static-inline-explicit-instantiation",
		[b]="warn_static_inline_explicit_inst_ignored",
		[c]="ignoring \'%select{static|inline}0\' keyword on explicit template instantiation",
		[d]={{nil,nil,{"ignoring \'",{"static","inline"},"\' keyword on explicit template instantiation"}}},
		[e]=j,
		[f]="ignoring \'(?:static|inline)\' keyword on explicit template instantiation",
		[g]=" \\[(?:\\-Werror,)?\\-Wstatic\\-inline\\-explicit\\-instantiation[^\\]]*\\]",
		[a]=Eb,
		[i]={"aa49ecc4586a",1291235540,"Not content to implement just \"extern\" explicit template","Not content to implement just \"extern\" explicit template\ninstantiations, GCC also supports \"inline\" and \"static\" explicit\ntemplate instantiations. Parse and warn about such constructs, but\ndon\'t implement the semantics of either \"inline\" or \"static\". They\ndon\'t seem to be widely used.\n\nllvm-svn: 120599"},
		[h]={{"clang/lib/Parse/Parser.cpp",974,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///       external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///         function-definition\n///         declaration\n/// [GNU]   asm-definition\n/// [GNU]   __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]   linkage-specification\n/// [GNU] asm-definition:\n///         simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///           \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  // ...\n  case tok::kw_static:\n    // Parse (then ignore) \'static\' prior to a template instantiation. This is\n    // a GCC extension that we intentionally do not support.\n    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n      Diag(ConsumeToken(), diag::warn_static_inline_explicit_inst_ignored) << 0;"},{"clang/lib/Parse/Parser.cpp",996,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///       external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///         function-definition\n///         declaration\n/// [GNU]   asm-definition\n/// [GNU]   __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]   linkage-specification\n/// [GNU] asm-definition:\n///         simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///           \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  // ...\n  case tok::kw_inline:\n    if (getLangOpts().CPlusPlus) {\n      // ...\n      // Parse (then ignore) \'inline\' prior to a template instantiation. This is\n      // a GCC extension that we intentionally do not support.\n      if (NextKind == tok::kw_template) {\n        Diag(ConsumeToken(), diag::warn_static_inline_explicit_inst_ignored) << 1;"}},
		[m]={
			["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:89:1: warning: ignoring \'inline\' keyword on explicit template instantiation [-Wstatic-inline-explicit-instantiation]","clang/test/SemaTemplate/explicit-instantiation.cpp:90:1: warning: ignoring \'static\' keyword on explicit template instantiation [-Wstatic-inline-explicit-instantiation]"}
		}
	},
	["warn_static_local_in_extern_inline"]={
		[l]={"static-local-in-inline"},
		[k]="static-local-in-inline",
		[b]="warn_static_local_in_extern_inline",
		[c]="non-constant static local variable in inline function may be different in different files",
		[d]="non-constant static local variable in inline function may be different in different files",
		[e]=j,
		[f]="non\\-constant static local variable in inline function may be different in different files",
		[g]=" \\[(?:\\-Werror,)?\\-Wstatic\\-local\\-in\\-inline[^\\]]*\\]",
		[a]=n,
		[i]={"c87d97231d12",1364870938,"Add -Wstatic-local-in-inline, which warns about using a static local","Add -Wstatic-local-in-inline, which warns about using a static local\nvariable in a C99 inline (but not static-inline or extern-inline)\nfunction definition.\n\nThe standard doesn\'t actually say that this doesn\'t apply to\n\"extern inline\" definitions, but that seems like a useful extension,\nand it at least doesn\'t have the obvious flaw that a static\nmutable variable in an externally-available definition does.\n\nrdar://13535367\n\nllvm-svn: 178520"},
		[h]={{G,7830,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // C99 6.7.4p3\n  //   An inline definition of a function with external linkage shall\n  //   not contain a definition of a modifiable object with static or\n  //   thread storage duration...\n  // We only apply this when the function is required to be defined\n  // elsewhere, i.e. when the function is not \'extern inline\'.  Note\n  // that a local variable with thread storage duration still has to\n  // be marked \'static\'.  Also note that it\'s possible to get these\n  // semantics in C++ using __attribute__((gnu_inline)).\n  if (SC == SC_Static && S->getFnParent() != nullptr && !NewVD->getType().isConstQualified()) {\n    // ...\n    if (CurFD && isFunctionDefinitionDiscarded(*this, CurFD)) {\n      Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::warn_static_local_in_extern_inline);"}},
		[m]={
			["clang/test/Sema/inline.c"]={"clang/test/Sema/inline.c:78:3: warning: non-constant static local variable in inline function may be different in different files [-Wstatic-local-in-inline]"}
		}
	},
	["warn_static_main"]={
		[l]={"main"},
		[k]="main",
		[b]="warn_static_main",
		[c]="\'main\' should not be declared static",
		[d]="\'main\' should not be declared static",
		[e]=j,
		[f]="\'main\' should not be declared static",
		[g]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]",
		[a]=n,
		[i]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics.\n\nllvm-svn: 139282"},
		[h]={{G,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //   A program that [...] declares main to be inline, static or\n  //   constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //   appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
		[m]={
			["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:12:1: warning: \'main\' should not be declared static [-Wmain]"}
		}
	},
	["warn_static_self_reference_in_init"]={
		[l]={o,q,r,"static-self-init",W},
		[k]="static-self-init",
		[b]="warn_static_self_reference_in_init",
		[c]="static variable %0 is suspiciously used within its own initialization",
		[d]="static variable A is suspiciously used within its own initialization",
		[e]=j,
		[f]="static variable (.*?) is suspiciously used within its own initialization",
		[g]=" \\[(?:\\-Werror,)?\\-Wstatic\\-self\\-init[^\\]]*\\]",
		[a]=n,
		[i]={"e07d167a5016",1358556540,"Reword warning about using a *static* variable within its own initialization.","Reword warning about using a *static* variable within its own initialization.\n\nThe warning is still under -Wuninitialized (although technically this\nis defined behavior), but under a subgroup -Wstatic-self-init.\n\nThis addresses PR 10265.\n\nllvm-svn: 172878"},
		[h]={{G,12619,"// Visits an initialization expression to see if OrigDecl is evaluated in\n// its own initialization and throws a warning if it does.\nclass SelfReferenceChecker : public EvaluatedExprVisitor<SelfReferenceChecker> {\n  // ...\n  void HandleDeclRefExpr(DeclRefExpr *DRE) {\n    // ...\n    if (isReferenceType) {\n    // ...\n    } else if (cast<VarDecl>(OrigDecl)->isStaticLocal()) {\n      diag = diag::warn_static_self_reference_in_init;"}},
		[m]={
			["clang/test/SemaCXX/uninitialized.cpp"]={
				[1]="clang/test/SemaCXX/uninitialized.cpp:737:20: warning: static variable \'b\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[2]="clang/test/SemaCXX/uninitialized.cpp:738:21: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[3]="clang/test/SemaCXX/uninitialized.cpp:738:25: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[4]="clang/test/SemaCXX/uninitialized.cpp:739:23: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[5]="clang/test/SemaCXX/uninitialized.cpp:739:27: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[6]="clang/test/SemaCXX/uninitialized.cpp:740:38: warning: static variable \'e\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[7]="clang/test/SemaCXX/uninitialized.cpp:741:24: warning: static variable \'f\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[8]="clang/test/SemaCXX/uninitialized.cpp:751:24: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[9]="clang/test/SemaCXX/uninitialized.cpp:751:28: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[10]="clang/test/SemaCXX/uninitialized.cpp:752:29: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[11]="clang/test/SemaCXX/uninitialized.cpp:752:33: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[12]="clang/test/SemaCXX/uninitialized.cpp:753:21: warning: static variable \'n\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[13]="clang/test/SemaCXX/uninitialized.cpp:754:30: warning: static variable \'o\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[14]="clang/test/SemaCXX/uninitialized.cpp:755:36: warning: static variable \'p\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[15]="clang/test/SemaCXX/uninitialized.cpp:756:36: warning: static variable \'q\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[16]="clang/test/SemaCXX/uninitialized.cpp:757:44: warning: static variable \'r\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[17]="clang/test/SemaCXX/uninitialized.cpp:758:25: warning: static variable \'s\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[18]="clang/test/SemaCXX/uninitialized.cpp:759:20: warning: static variable \'t\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[19]="clang/test/SemaCXX/uninitialized.cpp:760:25: warning: static variable \'u\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[20]="clang/test/SemaCXX/uninitialized.cpp:761:26: warning: static variable \'v\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[21]="clang/test/SemaCXX/uninitialized.cpp:762:21: warning: static variable \'w\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[22]="clang/test/SemaCXX/uninitialized.cpp:763:20: warning: static variable \'x\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[23]="clang/test/SemaCXX/uninitialized.cpp:764:40: warning: static variable \'y\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[24]="clang/test/SemaCXX/uninitialized.cpp:765:26: warning: static variable \'z\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[25]="clang/test/SemaCXX/uninitialized.cpp:766:26: warning: static variable \'aa\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[26]="clang/test/SemaCXX/uninitialized.cpp:767:21: warning: static variable \'bb\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[27]="clang/test/SemaCXX/uninitialized.cpp:771:22: warning: static variable \'b\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[28]="clang/test/SemaCXX/uninitialized.cpp:772:23: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[29]="clang/test/SemaCXX/uninitialized.cpp:772:27: warning: static variable \'c\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[30]="clang/test/SemaCXX/uninitialized.cpp:773:25: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[31]="clang/test/SemaCXX/uninitialized.cpp:773:29: warning: static variable \'d\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[32]="clang/test/SemaCXX/uninitialized.cpp:774:40: warning: static variable \'e\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[33]="clang/test/SemaCXX/uninitialized.cpp:775:26: warning: static variable \'f\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[34]="clang/test/SemaCXX/uninitialized.cpp:785:26: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[35]="clang/test/SemaCXX/uninitialized.cpp:785:30: warning: static variable \'l\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[36]="clang/test/SemaCXX/uninitialized.cpp:786:31: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[37]="clang/test/SemaCXX/uninitialized.cpp:786:35: warning: static variable \'m\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[38]="clang/test/SemaCXX/uninitialized.cpp:787:23: warning: static variable \'n\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[39]="clang/test/SemaCXX/uninitialized.cpp:788:32: warning: static variable \'o\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[40]="clang/test/SemaCXX/uninitialized.cpp:789:38: warning: static variable \'p\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[41]="clang/test/SemaCXX/uninitialized.cpp:790:38: warning: static variable \'q\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[42]="clang/test/SemaCXX/uninitialized.cpp:791:46: warning: static variable \'r\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[43]="clang/test/SemaCXX/uninitialized.cpp:792:27: warning: static variable \'s\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[44]="clang/test/SemaCXX/uninitialized.cpp:793:22: warning: static variable \'t\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[45]="clang/test/SemaCXX/uninitialized.cpp:794:27: warning: static variable \'u\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[46]="clang/test/SemaCXX/uninitialized.cpp:795:28: warning: static variable \'v\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[47]="clang/test/SemaCXX/uninitialized.cpp:796:23: warning: static variable \'w\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[48]="clang/test/SemaCXX/uninitialized.cpp:797:22: warning: static variable \'x\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[49]="clang/test/SemaCXX/uninitialized.cpp:798:42: warning: static variable \'y\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[50]="clang/test/SemaCXX/uninitialized.cpp:799:28: warning: static variable \'z\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[51]="clang/test/SemaCXX/uninitialized.cpp:800:28: warning: static variable \'aa\' is suspiciously used within its own initialization [-Wstatic-self-init]",
				[52]="clang/test/SemaCXX/uninitialized.cpp:801:23: warning: static variable \'bb\' is suspiciously used within its own initialization [-Wstatic-self-init]"
			}
		}
	},
	["warn_stdc_fenv_round_not_supported"]={
		[l]={o,q,r,"pragmas","unknown-pragmas"},
		[k]="unknown-pragmas",
		[b]={{nil,J,"warn_stdc_fenv_round_not_supported"}},
		[c]={{nil,J,"pragma STDC FENV_ROUND is not supported"}},
		[d]={{nil,J,"pragma STDC FENV_ROUND is not supported"}},
		[e]=j,
		[f]="pragma STDC FENV_ROUND is not supported",
		[g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]",
		[a]={{nil,J,Eb}},
		[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[OpenMP] Support nested OpenMP context selectors (declare variant)\n\nDue to `omp begin/end declare variant`, OpenMP context selectors can be\nnested. This patch adds initial support for this so we can use it for\ntarget math variants. We should improve the detection of \"equivalent\"\nscores and user conditions, we should also revisit the data structures\nof the OMPTraitInfo object, however, both are not pressing issues right\nnow.\n\nReviewed By: JonChesterfield\n\nDifferential Revision: https://reviews.llvm.org/D85877"},
		[h]={{"clang/lib/Parse/ParsePragma.cpp",3379,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  PP.Diag(Tok.getLocation(), diag::warn_stdc_fenv_round_not_supported);"}},
		[m]={
			["clang/test/AST/ast-dump-pragma-json.c"]={"clang/test/AST/ast-dump-pragma-json.c:4:40: warning: pragma STDC FENV_ROUND is not supported [-Wunknown-pragmas]","clang/test/AST/ast-dump-pragma-json.c:6:38: warning: pragma STDC FENV_ROUND is not supported [-Wunknown-pragmas]"}
		}
	},
	["warn_stdc_unknown_rounding_mode"]={
		[l]={"ignored-pragmas","pragmas"},
		[k]="ignored-pragmas",
		[b]={{nil,J,"warn_stdc_unknown_rounding_mode"}},
		[c]={{nil,J,"invalid or unsupported rounding mode in \'#pragma STDC FENV_ROUND\' - ignored"}},
		[d]={{nil,J,"invalid or unsupported rounding mode in \'#pragma STDC FENV_ROUND\' - ignored"}},
		[e]=j,
		[f]="invalid or unsupported rounding mode in \'\\#pragma STDC FENV_ROUND\' \\- ignored",
		[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-pragmas[^\\]]*\\]",
		[a]={{nil,J,Eb}},
		[i]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[OpenMP] Support nested OpenMP context selectors (declare variant)\n\nDue to `omp begin/end declare variant`, OpenMP context selectors can be\nnested. This patch adds initial support for this so we can use it for\ntarget math variants. We should improve the detection of \"equivalent\"\nscores and user conditions, we should also revisit the data structures\nof the OMPTraitInfo object, however, both are not pressing issues right\nnow.\n\nReviewed By: JonChesterfield\n\nDifferential Revision: https://reviews.llvm.org/D85877"},
		[h]={{"clang/lib/Parse/ParsePragma.cpp",3367,"void PragmaSTDC_FENV_ROUNDHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (RM == llvm::RoundingMode::Invalid) {\n    PP.Diag(Tok.getLocation(), diag::warn_stdc_unknown_rounding_mode);"}},
		[m]={
			["clang/test/Parser/pragma-fenv_round.c"]={"clang/test/Parser/pragma-fenv_round.c:3:25: warning: invalid or unsupported rounding mode in \'#pragma STDC FENV_ROUND\' - ignored [-Wignored-pragmas]"}
		}
	},
	["warn_strict_multiple_method_decl"]={
		[l]={"strict-selector-match"},
		[k]="strict-selector-match",
		[b]="warn_strict_multiple_method_decl",
		[c]="multiple methods named %0 found",
		[d]="multiple methods named A found",
		[e]=j,
		[f]="multiple methods named (.*?) found",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrict\\-selector\\-match[^\\]]*\\]",
		[a]=n,
		[i]={"3337b2e8dd0e",1281396478,"Implements gcc\'s -Wstrict-selector-match.","Implements gcc\'s -Wstrict-selector-match.\n(radar 8127244).\n\nllvm-svn: 110622"},
		[h]={{N,3607,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  // ...\n  bool strictSelectorMatch = receiverIdOrClass && !Diags.isIgnored(diag::warn_strict_multiple_method_decl, R.getBegin());"},{N,3637,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  // ...\n  if (issueDiagnostic) {\n    if (issueError)\n    // ...\n    else if (strictSelectorMatch)\n      Diag(R.getBegin(), diag::warn_strict_multiple_method_decl) << Sel << R;"}},
		[m]={
			["clang/test/SemaObjC/warn-strict-selector-match.m"]={"clang/test/SemaObjC/warn-strict-selector-match.m:11:18: warning: multiple methods named \'method\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:26:3: warning: multiple methods named \'setWindow:\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:28:3: warning: multiple methods named \'setWindow:\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:57:32: warning: multiple methods named \'initWithData:\' found [-Wstrict-selector-match]","clang/test/SemaObjC/warn-strict-selector-match.m:93:12: warning: multiple methods named \'initWithType:\' found [-Wstrict-selector-match]"}
		}
	},
	["warn_strict_potentially_direct_selector_expression"]={
		[l]={"strict-potentially-direct-selector"},
		[k]="strict-potentially-direct-selector",
		[b]={{nil,z,"warn_strict_potentially_direct_selector_expression"}},
		[c]={{nil,z,"@selector expression formed with potentially direct selector %0"}},
		[d]={{nil,z,"@selector expression formed with potentially direct selector A"}},
		[e]=j,
		[f]="@selector expression formed with potentially direct selector (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrict\\-potentially\\-direct\\-selector[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={cc,1582847864,Tb,dc},
		[h]={{zb,1341,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // ...\n  if (!Method) {\n  // ...\n  } else {\n    // ...\n    if (onlyDirect) {\n    // ...\n    } else if (anyDirect) {\n      // ...\n      if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n      // ...\n      } else if (!LikelyTargetMethod) {\n        // ...\n        Diag(AtLoc, diag::warn_strict_potentially_direct_selector_expression) << Sel;"}},
		[m]={
			["clang/test/SemaObjC/potentially-direct-selector.m"]={"clang/test/SemaObjC/potentially-direct-selector.m:83:9: warning: @selector expression formed with potentially direct selector \'inBase\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:84:9: warning: @selector expression formed with potentially direct selector \'inBaseImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:85:9: warning: @selector expression formed with potentially direct selector \'inBaseCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:86:9: warning: @selector expression formed with potentially direct selector \'inBaseCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:87:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:88:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:89:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:90:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:91:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:92:9: warning: @selector expression formed with potentially direct selector \'inBaseClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:93:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:103:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:104:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:105:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:106:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:107:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:109:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:117:9: warning: @selector expression formed with potentially direct selector \'inBase\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:118:9: warning: @selector expression formed with potentially direct selector \'inBaseImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:119:9: warning: @selector expression formed with potentially direct selector \'inBaseCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:120:9: warning: @selector expression formed with potentially direct selector \'inBaseCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:121:9: warning: @selector expression formed with potentially direct selector \'inDerived\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:122:9: warning: @selector expression formed with potentially direct selector \'inDerivedImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:123:9: warning: @selector expression formed with potentially direct selector \'inDerivedCat\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:124:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatImpl\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:125:9: warning: @selector expression formed with potentially direct selector \'inDerivedClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:126:9: warning: @selector expression formed with potentially direct selector \'inBaseClass\' [-Wstrict-potentially-direct-selector]","clang/test/SemaObjC/potentially-direct-selector.m:127:9: warning: @selector expression formed with potentially direct selector \'inDerivedCatClass\' [-Wstrict-potentially-direct-selector]"}
		}
	},
	["warn_strict_prototypes"]={
		[l]={"pedantic","strict-prototypes"},
		[k]="strict-prototypes",
		[b]="warn_strict_prototypes",
		[c]="this %select{function declaration is not|old-style function definition is not preceded by}0 a prototype",
		[d]={{nil,D,{"a ",{nb,"block"}," declaration without a prototype is deprecated ",{"in all versions of C",F}}},{u,w,{"this ",{"function declaration is not","block declaration is not","old-style function definition is not preceded by"}," a prototype"}},{nil,nil,{"this ",{"function declaration is not","old-style function definition is not preceded by"}," a prototype"}}},
		[e]=j,
		[f]="a (?:function|block) declaration without a prototype is deprecated (?:in all versions of C|)",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrict\\-prototypes[^\\]]*\\]",
		[a]=n,
		[i]={"840f8df67759",1481107938,"Implement the -Wstrict-prototypes warning","Implement the -Wstrict-prototypes warning\n\nThis commit fixes PR20796. It implements the C only -Wstrict-prototypes warning.\nClang now emits a warning for function declarations which have no parameters\nspecified and for K&R function definitions with more than 0 parameters that are\nnot preceded by a previous prototype declaration.\n\nThe patch was originally submitted by Paul Titei!\n\nrdar://15060615\n\nDifferential Revision: https://reviews.llvm.org/D16533\n\nllvm-svn: 288896"},
		[h]={{U,5767,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // GNU warning -Wstrict-prototypes\n  //   Warn if a function declaration or definition is without a prototype.\n  //   This warning is issued for all kinds of unprototyped function\n  //   declarations (i.e. function type typedef, function pointer etc.)\n  //   C99 6.7.5.3p14:\n  //   The empty list in a function declarator that is not part of a definition\n  //   of that function specifies that no information about the number or types\n  //   of the parameters is supplied.\n  // See ActOnFinishFunctionBody() and MergeFunctionDecl() for handling of\n  // function declarations whose behavior changes in C2x.\n  if (!LangOpts.requiresStrictPrototypes()) {\n    // ...\n    for (const DeclaratorChunk &DeclType : D.type_objects()) {\n      // ...\n      case DeclaratorChunk::Function: {\n        // ...\n        // We suppress the warning when there\'s no LParen location, as this\n        // indicates the declaration was an implicit declaration, which gets\n        // warned about separately via -Wimplicit-function-declaration. We also\n        // suppress the warning when we know the function has a prototype.\n        if (!FTI.hasPrototype && FTI.NumParams == 0 && !FTI.isVariadic && FTI.getLParenLoc().isValid())\n          S.Diag(DeclType.Loc, diag::warn_strict_prototypes) << IsBlock << FixItHint::CreateInsertion(FTI.getRParenLoc(), \"void\");"}},
		[m]={
			["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:5:8: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]","clang/test/Parser/declarators.c:47:10: warning: a function declaration without a prototype is deprecated in all versions of C [-Wstrict-prototypes]"}
		}
	},
	["warn_strict_uses_without_prototype"]={
		[l]={"deprecated-non-prototype","strict-prototypes"},
		[k]="deprecated-non-prototype",
		[b]={{nil,D,"warn_strict_uses_without_prototype"}},
		[c]={{nil,D,"passing arguments to %select{a function|%1}0 without a prototype is deprecated in all versions of C and is not supported in C2x"}},
		[d]={{nil,D,{"passing arguments to ",{"a function","B"}," without a prototype is deprecated in all versions of C and is not supported in C2x"}}},
		[e]=j,
		[f]="passing arguments to (?:a function|(.*?)) without a prototype is deprecated in all versions of C and is not supported in C2x",
		[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-non\\-prototype[^\\]]*\\]",
		[a]={{nil,D,n}},
		[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
		[h]={{A,7557,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // ...\n  if (Proto) {\n  // ...\n  } else {\n    // ...\n    if (!Proto && !Args.empty() && (!FDecl || (!FDecl->isImplicit() && !Diags.isIgnored(diag::warn_strict_uses_without_prototype, FDecl->getLocation()))))"},{A,7584,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // ...\n  if (Proto) {\n  // ...\n  } else {\n    // ...\n    // If we still haven\'t found a prototype to use but there are arguments to\n    // the call, diagnose this as calling a function without a prototype.\n    // However, if we found a function declaration, check to see if\n    // -Wdeprecated-non-prototype was disabled where the function was declared.\n    // If so, we will silence the diagnostic here on the assumption that this\n    // interface is intentional and the user knows what they\'re doing. We will\n    // also silence the diagnostic if there is a function declaration but it\n    // was implicitly defined (the user already gets diagnostics about the\n    // creation of the implicit function declaration, so the additional warning\n    // is not helpful).\n    if (!Proto && !Args.empty() && (!FDecl || (!FDecl->isImplicit() && !Diags.isIgnored(diag::warn_strict_uses_without_prototype, FDecl->getLocation()))))\n      Diag(LParenLoc, diag::warn_strict_uses_without_prototype) << (FDecl != nullptr) << FDecl;"}},
		[m]={
			["clang/test/CodeGen/avr/address-space-avr.c"]={"<stdin>:27:6: warning: passing arguments to \'foo\' without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]","<stdin>:28:6: warning: passing arguments to \'foo\' without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype]"}
		}
	},
	["warn_string_plus_char"]={
		[l]={"string-plus-char"},
		[k]="string-plus-char",
		[b]="warn_string_plus_char",
		[c]="adding %0 to a string pointer does not append to the string",
		[d]="adding A to a string pointer does not append to the string",
		[e]=j,
		[f]="adding (.*?) to a string pointer does not append to the string",
		[g]=" \\[(?:\\-Werror,)?\\-Wstring\\-plus\\-char[^\\]]*\\]",
		[a]=n,
		[i]={"5565941effbe",1382719920,"Add -Wstring-plus-char, which warns when adding char literals to C strings.","Add -Wstring-plus-char, which warns when adding char literals to C strings.\n\nSpecifically, this warns when a character literal is added (using \'+\') to a\nvariable with type \'char *\' (or any other pointer to character type). Like\n-Wstring-plus-int, there is a fix-it to change \"foo + \'a\'\" to \"&foo[\'a\']\"\niff the character literal is on the right side of the string.\n\nPatch by Anders Rönnholm!\n\nllvm-svn: 193418"},
		[h]={{A,11680,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  if (!CharType->isAnyCharacterType() && CharType->isIntegerType() && llvm::isUIntN(Ctx.getCharWidth(), CharExpr->getValue())) {\n    Self.Diag(OpLoc, diag::warn_string_plus_char) << DiagRange << Ctx.CharTy;"},{A,11687,"/// Emit a warning when adding a char literal to a string.\nstatic void diagnoseStringPlusChar(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  if (!CharType->isAnyCharacterType() && CharType->isIntegerType() && llvm::isUIntN(Ctx.getCharWidth(), CharExpr->getValue())) {\n  // ...\n  } else {\n    Self.Diag(OpLoc, diag::warn_string_plus_char) << DiagRange << CharExpr->getType();"}},
		[m]={
			["clang/test/Sema/string-plus-char.c"]={"clang/test/Sema/string-plus-char.c:6:16: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:11:20: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:13:28: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:15:13: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:18:16: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:20:20: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]","clang/test/Sema/string-plus-char.c:24:23: warning: adding \'char\' to a string pointer does not append to the string [-Wstring-plus-char]"}
		}
	},
	["warn_string_plus_int"]={
		[l]={o,q,r,"string-plus-int"},
		[k]="string-plus-int",
		[b]="warn_string_plus_int",
		[c]="adding %0 to a string does not append to the string",
		[d]="adding A to a string does not append to the string",
		[e]=j,
		[f]="adding (.*?) to a string does not append to the string",
		[g]=" \\[(?:\\-Werror,)?\\-Wstring\\-plus\\-int[^\\]]*\\]",
		[a]=n,
		[i]={"ccec40d9b756",1330725682,"Add -Wstring-plus-int, which warns on \"str\" + int and int + \"str\".","Add -Wstring-plus-int, which warns on \"str\" + int and int + \"str\".\n\nIt doesn\'t warn if the integer is known at compile time and within\nthe bounds of the string.\n\nDiscussion: http://comments.gmane.org/gmane.comp.compilers.clang.scm/47203\nllvm-svn: 151943"},
		[h]={{A,11637,"/// diagnoseStringPlusInt - Emit a warning when adding an integer to a string\n/// literal.\nstatic void diagnoseStringPlusInt(Sema &Self, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  Self.Diag(OpLoc, diag::warn_string_plus_int) << DiagRange << IndexExpr->IgnoreImpCasts()->getType();"}},
		[m]={
			["clang/test/SemaCXX/string-plus-int.cpp"]={"clang/test/SemaCXX/string-plus-int.cpp:31:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:32:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:33:17: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:34:17: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:36:13: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:37:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:38:19: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:39:24: warning: adding \'MyEnum\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:42:23: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:43:19: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:45:18: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:46:18: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:48:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:49:17: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:50:19: warning: adding \'int\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:54:15: warning: adding \'unsigned long\' to a string does not append to the string [-Wstring-plus-int]","clang/test/SemaCXX/string-plus-int.cpp:68:20: warning: adding \'unsigned long\' to a string does not append to the string [-Wstring-plus-int]"}
		}
	},
	["warn_stringcompare"]={
		[l]={"address","string-compare"},
		[k]="string-compare",
		[b]="warn_stringcompare",
		[c]={{nil,s,"result of comparison against %select{a string literal|@encode}0 is unspecified (use an explicit string comparison function instead)"},{S,nil,"result of comparison against %select{a string literal|@encode}0 is unspecified (use strncmp instead)"}},
		[d]={{nil,s,{"result of comparison against ",{"a string literal","@encode"}," is unspecified (use an explicit string comparison function instead)"}},{S,nil,{"result of comparison against ",{"a string literal","@encode"}," is unspecified (use strncmp instead)"}}},
		[e]=j,
		[f]="result of comparison against (?:a string literal|@encode) is unspecified \\(use an explicit string comparison function instead\\)",
		[g]=" \\[(?:\\-Werror,)?\\-Wstring\\-compare[^\\]]*\\]",
		[a]=n,
		[i]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files.","Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"},
		[h]={{A,12771,"/// Diagnose some forms of syntactically-obvious tautological comparison.\nstatic void diagnoseTautologicalComparison(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS, BinaryOperatorKind Opc) {\n  // ...\n  if (LiteralString) {\n    S.DiagRuntimeBehavior(Loc, nullptr, S.PDiag(diag::warn_stringcompare) << isa<ObjCEncodeExpr>(LiteralStringStripped) << LiteralString->getSourceRange());"}},
		[m]={
			["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:20:20: warning: result of comparison against @encode is unspecified (use an explicit string comparison function instead) [-Wstring-compare]"}
		}
	},
	["warn_strlcpycat_wrong_size"]={
		[l]={"strlcpy-strlcat-size"},
		[k]="strlcpy-strlcat-size",
		[b]="warn_strlcpycat_wrong_size",
		[c]="size argument in %0 call appears to be size of the source; expected the size of the destination",
		[d]="size argument in A call appears to be size of the source; expected the size of the destination",
		[e]=j,
		[f]="size argument in (.*?) call appears to be size of the source; expected the size of the destination",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrlcpy\\-strlcat\\-size[^\\]]*\\]",
		[a]=n,
		[i]={"d5fe9e4d9741",1313624436,"Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat i...","Add experimental -Wstrlcpy-size warning that looks to see if the size argument for strlcpy/strlcat is the size of the *source*, and not the size of the *destination*.  This warning is off by default (for now).\n\nWarning logic provided by Geoff Keating.\n\nllvm-svn: 137903"},
		[h]={{y,12695,"// Warn if the user has made the \'size\' argument to strlcpy or strlcat\n// be the size of the source, instead of the destination.\nvoid Sema::CheckStrlcpycatArguments(const CallExpr *Call, IdentifierInfo *FnName) {\n  // ...\n  Diag(CompareWithSrcDRE->getBeginLoc(), diag::warn_strlcpycat_wrong_size) << OriginalSizeArg->getSourceRange() << FnName;"}},
		[m]={
			["clang/test/Sema/warn-strlcpycat-size.c"]={"clang/test/Sema/warn-strlcpycat-size.c:22:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:23:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:24:26: warning: size argument in \'strlcat\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:25:29: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:26:36: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:27:28: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:38:29: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:46:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]","clang/test/Sema/warn-strlcpycat-size.c:54:26: warning: size argument in \'strlcpy\' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size]"}
		}
	},
	["warn_strncat_large_size"]={
		[l]={Gb},
		[k]=Gb,
		[b]="warn_strncat_large_size",
		[c]="the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow",
		[d]="the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow",
		[e]=j,
		[f]="the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrncat\\-size[^\\]]*\\]",
		[a]=n,
		[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size","Add a new compiler warning, which flags anti-patterns used as the size\nargument in strncat.\n\nThe warning is ignored by default since it needs more qualification. \n\nTODO: The warning message and the note are messy when\nstrncat is a builtin due to the macro expansion.\n\nllvm-svn: 149524"},
		[h]={{y,12803,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  // ...\n  if (PatternType == 1)\n    Diag(SL, diag::warn_strncat_large_size) << SR;"}},
		[m]={
			["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:37:48: warning: the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:39:52: warning: the value of the size argument in \'strncat\' is too large, might lead to a buffer overflow [-Wstrncat-size]"}
		}
	},
	["warn_strncat_src_size"]={
		[l]={Gb},
		[k]=Gb,
		[b]="warn_strncat_src_size",
		[c]="size argument in \'strncat\' call appears to be size of the source",
		[d]="size argument in \'strncat\' call appears to be size of the source",
		[e]=j,
		[f]="size argument in \'strncat\' call appears to be size of the source",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrncat\\-size[^\\]]*\\]",
		[a]=n,
		[i]={"314cd09b5c79",1328123337,"Add a new compiler warning, which flags anti-patterns used as the size","Add a new compiler warning, which flags anti-patterns used as the size\nargument in strncat.\n\nThe warning is ignored by default since it needs more qualification. \n\nTODO: The warning message and the note are messy when\nstrncat is a builtin due to the macro expansion.\n\nllvm-svn: 149524"},
		[h]={{y,12798,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  // ...\n  if (!isKnownSizeArray) {\n    if (PatternType == 1)\n    // ...\n    else\n      Diag(SL, diag::warn_strncat_src_size) << SR;"},{y,12805,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  // ...\n  if (PatternType == 1)\n  // ...\n  else\n    Diag(SL, diag::warn_strncat_src_size) << SR;"}},
		[m]={
			["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:33:22: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:35:22: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:41:29: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:42:21: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:43:22: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:54:23: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:70:19: warning: size argument in \'strncat\' call appears to be size of the source [-Wstrncat-size]"}
		}
	},
	["warn_strncat_wrong_size"]={
		[l]={Gb},
		[k]=Gb,
		[b]="warn_strncat_wrong_size",
		[c]="the value of the size argument to \'strncat\' is wrong",
		[d]="the value of the size argument to \'strncat\' is wrong",
		[e]=j,
		[f]="the value of the size argument to \'strncat\' is wrong",
		[g]=" \\[(?:\\-Werror,)?\\-Wstrncat\\-size[^\\]]*\\]",
		[a]=n,
		[i]={"13b0857ad084",1344462143,"Address code review comments for Wstrncat-size warning (r161440).","Address code review comments for Wstrncat-size warning (r161440).\n\nllvm-svn: 161527"},
		[h]={{y,12796,"// Warn on anti-patterns as the \'size\' argument to strncat.\n// The correct size argument should look like following:\n//   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);\nvoid Sema::CheckStrncatArguments(const CallExpr *CE, IdentifierInfo *FnName) {\n  // ...\n  if (!isKnownSizeArray) {\n    if (PatternType == 1)\n      Diag(SL, diag::warn_strncat_wrong_size) << SR;"}},
		[m]={
			["clang/test/Sema/warn-strncat-size.c"]={"clang/test/Sema/warn-strncat-size.c:62:19: warning: the value of the size argument to \'strncat\' is wrong [-Wstrncat-size]","clang/test/Sema/warn-strncat-size.c:75:17: warning: the value of the size argument to \'strncat\' is wrong [-Wstrncat-size]"}
		}
	},
	["warn_struct_class_previous_tag_mismatch"]={
		[l]={o,q,"mismatched-tags",r},
		[k]="mismatched-tags",
		[b]="warn_struct_class_previous_tag_mismatch",
		[c]={{nil,I,"%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI"},{jb,nil,"%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1"}},
		[d]={{nil,I,{"C defined as ",{"a struct","an interface","a class"},{F,mb}," here but previously declared as ",{"a struct","an interface","a class"},{F,mb},"; this is valid, but may result in linker errors under the Microsoft C++ ABI"}},{jb,nil,{"C defined as ",{"a struct","an interface","a class"},{F,mb}," here but previously declared as ",{"a struct","an interface","a class"},{F,mb}}}},
		[e]=j,
		[f]="(.*?) defined as (?:a struct|an interface|a class)(?:| template) here but previously declared as (?:a struct|an interface|a class)(?:| template); this is valid, but may result in linker errors under the Microsoft C\\+\\+ ABI",
		[g]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-tags[^\\]]*\\]",
		[a]=n,
		[i]={"caa33d36fb3f",1307675486,"Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags.","Made changes to how \'struct\'/\'class\' mismatches are handled in -Wmismatched-tags.\n- Removed fix-it hints from template instaniations since changes to the\ntemplates are rarely helpful.\n- Changed the caret in template instaniations from the class/struct name to the\nclass/struct keyword, matching the other warnings.\n- Do not offer fix-it hints when multiple declarations disagree.  Warnings are\nstill given.\n- Once a definition is found, offer a fix-it hint to all previous declarations\nwith wrong tag.\n- Declarations that disagree with a previous definition will get a fix-it hint\nto change the declaration.\n\nllvm-svn: 132831"},
		[h]={{G,16652,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  // ...\n  if (isDefinition) {\n    // ...\n    for (const TagDecl *I : Previous->redecls()) {\n      if (I->getTagKind() != NewTag) {\n        // ...\n        if (!previousMismatch) {\n          // ...\n          Diag(NewTagLoc, diag::warn_struct_class_previous_tag_mismatch) << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name << getRedeclDiagFromTagKind(I->getTagKind());"}},
		[m]={
			["clang/test/SemaCXX/struct-class-redecl.cpp"]={"clang/test/SemaCXX/struct-class-redecl.cpp:8:19: warning: \'Y\' defined as a class template here but previously declared as a struct template; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:24:1: warning: \'B\' defined as a struct here but previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:34:1: warning: \'C\' defined as a class here but previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:57:19: warning: \'G\' defined as a struct template here but previously declared as a class template; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]"}
		}
	},
	["warn_struct_class_tag_mismatch"]={
		[l]={o,q,"mismatched-tags",r},
		[k]="mismatched-tags",
		[b]="warn_struct_class_tag_mismatch",
		[c]={{nil,I,"%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1; this is valid, but may result in linker errors under the Microsoft C++ ABI"},{jb,nil,"%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1"}},
		[d]={{nil,I,{{xb,"interface","class"},{F,mb}," C was previously declared as a ",{xb,"interface","class"},{F,mb},"; this is valid, but may result in linker errors under the Microsoft C++ ABI"}},{jb,nil,{{xb,"interface","class"},{F,mb}," C was previously declared as a ",{xb,"interface","class"},{F,mb}}}},
		[e]=j,
		[f]="(?:struct|interface|class)(?:| template) (.*?) was previously declared as a (?:struct|interface|class)(?:| template); this is valid, but may result in linker errors under the Microsoft C\\+\\+ ABI",
		[g]=" \\[(?:\\-Werror,)?\\-Wmismatched\\-tags[^\\]]*\\]",
		[a]=n,
		[i]={"d9034f0b8970",1242319291,"In C++, warn when something previously declared as a \"struct\" is later","In C++, warn when something previously declared as a \"struct\" is later\ndeclared as a \"class\", or vice-versa. This warning is under the\ncontrol of -Wmismatched-tags, which is off by default.\n\nllvm-svn: 71773"},
		[h]={{G,16603,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  // ...\n  auto IsIgnoredLoc = [&](SourceLocation Loc) { return getDiagnostics().isIgnored(diag::warn_struct_class_tag_mismatch, Loc); };"},{G,16627,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  // ...\n  if (inTemplateInstantiation()) {\n    if (OldTag != NewTag) {\n      // ...\n      Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch) << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name << getRedeclDiagFromTagKind(OldTag);"},{G,16673,"/// Determine whether a tag with a given kind is acceptable\n/// as a redeclaration of the given tag declaration.\n///\n/// \\returns true if the new tag kind is acceptable, false otherwise.\nbool Sema::isAcceptableTagRedeclaration(const TagDecl *Previous, TagTypeKind NewTag, bool isDefinition, SourceLocation NewTagLoc, const IdentifierInfo *Name) {\n  // ...\n  if (Redecl->getTagKind() != NewTag) {\n    Diag(NewTagLoc, diag::warn_struct_class_tag_mismatch) << getRedeclDiagFromTagKind(NewTag) << isTemplate << Name << getRedeclDiagFromTagKind(OldTag);"}},
		[m]={
			["clang/test/SemaCXX/struct-class-redecl.cpp"]={"clang/test/SemaCXX/struct-class-redecl.cpp:4:9: warning: struct \'X\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:18:1: warning: struct \'A\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:23:1: warning: struct \'B\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:27:1: warning: struct \'C\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:30:1: warning: class \'C\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:32:1: warning: struct \'C\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:40:1: warning: class \'D\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:52:1: warning: class \'F\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:56:19: warning: struct template \'G\' was previously declared as a class template; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:77:1: warning: struct \'H\' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:80:1: warning: class \'I\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:83:1: warning: class \'K\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]","clang/test/SemaCXX/struct-class-redecl.cpp:85:1: warning: class \'M\' was previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI [-Wmismatched-tags]"}
		}
	},
	["warn_sub_ptr_zero_size_types"]={
		[l]={"pointer-arith"},
		[k]="pointer-arith",
		[b]="warn_sub_ptr_zero_size_types",
		[c]="subtraction of pointers to type %0 of zero size has undefined behavior",
		[d]="subtraction of pointers to type A of zero size has undefined behavior",
		[e]=j,
		[f]="subtraction of pointers to type (.*?) of zero size has undefined behavior",
		[g]=" \\[(?:\\-Werror,)?\\-Wpointer\\-arith[^\\]]*\\]",
		[a]=n,
		[i]={"84c6b3d293d9",1378848854,"PR5683: Issue a warning when subtracting pointers to types of zero size, and","PR5683: Issue a warning when subtracting pointers to types of zero size, and\ntreat such subtractions as being non-constant. Patch by Serge Pavlov! With a\nfew tweaks by me.\n\nllvm-svn: 190439"},
		[h]={{A,11985,"// C99 6.5.6\nQualType Sema::CheckSubtractionOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, QualType *CompLHSTy) {\n  // ...\n  // Either ptr - int   or   ptr - ptr.\n  if (LHS.get()->getType()->isAnyPointerType()) {\n    // ...\n    // Handle pointer-pointer subtractions.\n    if (const PointerType *RHSPTy = RHS.get()->getType()->getAs<PointerType>()) {\n      // ...\n      // The pointee type may have zero size.  As an extension, a structure or\n      // union may have zero size or an array may have zero length.  In this\n      // case subtraction does not make sense.\n      if (!rpointee->isVoidType() && !rpointee->isFunctionType()) {\n        // ...\n        if (ElementSize.isZero()) {\n          Diag(Loc, diag::warn_sub_ptr_zero_size_types) << rpointee.getUnqualifiedType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[m]={
			["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:47:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:51:16: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:55:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:59:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:63:12: warning: subtraction of pointers to type \'struct emp_1\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:68:12: warning: subtraction of pointers to type \'union emp_2\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:78:12: warning: subtraction of pointers to type \'struct emp_1[10]\' of zero size has undefined behavior [-Wpointer-arith]","clang/test/Sema/empty1.c:86:12: warning: subtraction of pointers to type \'int[0]\' of zero size has undefined behavior [-Wpointer-arith]"}
		}
	},
	["warn_subscript_is_char"]={
		[l]={o,q,"char-subscripts",r},
		[k]="char-subscripts",
		[b]="warn_subscript_is_char",
		[c]="array subscript is of type \'char\'",
		[d]="array subscript is of type \'char\'",
		[e]=j,
		[f]="array subscript is of type \'char\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wchar\\-subscripts[^\\]]*\\]",
		[a]=n,
		[i]={"914244e7b0c6",1252893538,"Add support for -Wchar-subscripts. Fixes PR4801.","Add support for -Wchar-subscripts. Fixes PR4801.\n\nllvm-svn: 81747"},
		[h]={{A,5963,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  if ((IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_U)) && !IndexExpr->isTypeDependent())\n    Diag(LLoc, diag::warn_subscript_is_char) << IndexExpr->getSourceRange();"}},
		[m]={
			["clang/test/Sema/warn-char-subscripts.c"]={"clang/test/Sema/warn-char-subscripts.c:6:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:12:22: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:18:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:24:22: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:30:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]","clang/test/Sema/warn-char-subscripts.c:49:18: warning: array subscript is of type \'char\' [-Wchar-subscripts]"}
		}
	},
	["warn_suggest_destructor_marked_not_override_overriding"]={
		[l]={"suggest-destructor-override"},
		[k]="suggest-destructor-override",
		[b]={{nil,z,"warn_suggest_destructor_marked_not_override_overriding"}},
		[c]={{nil,z,"%0 overrides a destructor but is not marked \'override\'"}},
		[d]={{nil,z,"A overrides a destructor but is not marked \'override\'"}},
		[e]=j,
		[f]="(.*?) overrides a destructor but is not marked \'override\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wsuggest\\-destructor\\-override[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={cc,1582847864,Tb,dc},
		[h]={{T,3315,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  // ...\n  if (MD->size_overridden_methods() > 0) {\n    // ...\n    if (isa<CXXDestructorDecl>(MD))\n      EmitDiag(diag::warn_inconsistent_destructor_marked_not_override_overriding, diag::warn_suggest_destructor_marked_not_override_overriding);"}}
	},
	["warn_suggest_function_marked_not_override_overriding"]={
		[l]={"suggest-override"},
		[k]="suggest-override",
		[b]={{nil,z,"warn_suggest_function_marked_not_override_overriding"}},
		[c]={{nil,z,"%0 overrides a member function but is not marked \'override\'"}},
		[d]={{nil,z,"A overrides a member function but is not marked \'override\'"}},
		[e]=j,
		[f]="(.*?) overrides a member function but is not marked \'override\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wsuggest\\-override[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={cc,1582847864,Tb,dc},
		[h]={{T,3318,"void Sema::DiagnoseAbsenceOfOverrideControl(NamedDecl *D, bool Inconsistent) {\n  // ...\n  if (MD->size_overridden_methods() > 0) {\n    // ...\n    if (isa<CXXDestructorDecl>(MD))\n    // ...\n    else\n      EmitDiag(diag::warn_inconsistent_function_marked_not_override_overriding, diag::warn_suggest_function_marked_not_override_overriding);"}}
	},
	["warn_suggest_noreturn_block"]={
		[l]={"missing-noreturn"},
		[k]="missing-noreturn",
		[b]="warn_suggest_noreturn_block",
		[c]="block could be declared with attribute \'noreturn\'",
		[d]="block could be declared with attribute \'noreturn\'",
		[e]=j,
		[f]="block could be declared with attribute \'noreturn\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wmissing\\-noreturn[^\\]]*\\]",
		[a]=n,
		[i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn.","Add support for -Wmissing-noreturn.\n\nllvm-svn: 77391"},
		[h]={{v,634,"struct CheckFallThroughDiagnostics {\n  // ...\n  bool checkDiagnostics(DiagnosticsEngine &D, bool ReturnsVoid, bool HasNoReturn) const {\n    if (funMode == Function) {\n      return (ReturnsVoid || D.isIgnored(diag::warn_maybe_falloff_nonvoid_function, FuncLoc)) && (!HasNoReturn || D.isIgnored(diag::warn_noreturn_function_has_return_expr, FuncLoc)) && (!ReturnsVoid || D.isIgnored(diag::warn_suggest_noreturn_block, FuncLoc));"}}
	},
	["warn_suggest_noreturn_function"]={
		[l]={"missing-noreturn"},
		[k]="missing-noreturn",
		[b]="warn_suggest_noreturn_function",
		[c]="%select{function|method}0 %1 could be declared with attribute \'noreturn\'",
		[d]={{nil,nil,{{nb,"method"}," B could be declared with attribute \'noreturn\'"}}},
		[e]=j,
		[f]="(?:function|method) (.*?) could be declared with attribute \'noreturn\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wmissing\\-noreturn[^\\]]*\\]",
		[a]=n,
		[i]={"bce7a27d222a",1248822672,"Add support for -Wmissing-noreturn.","Add support for -Wmissing-noreturn.\n\nllvm-svn: 77391"},
		[h]={{v,572,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForFunction(const Decl *Func) {\n    // ...\n    if (!isVirtualMethod && !isTemplateInstantiation)\n      D.diag_NeverFallThroughOrReturn = diag::warn_suggest_noreturn_function;"}},
		[m]={
			["clang/test/SemaObjC/return.m"]={"clang/test/SemaObjC/return.m:17:19: warning: function \'test3\' could be declared with attribute \'noreturn\' [-Wmissing-noreturn]","clang/test/SemaObjC/return.m:47:16: warning: method \'method\' could be declared with attribute \'noreturn\' [-Wmissing-noreturn]"}
		}
	},
	["warn_superclass_variable_sized_type_not_at_end"]={
		[l]={o,q,r,"objc-flexible-array"},
		[k]="objc-flexible-array",
		[b]={{nil,p,"warn_superclass_variable_sized_type_not_at_end"}},
		[c]={{nil,p,"field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3"}},
		[d]={{nil,p,"field A can overwrite instance variable B with variable sized type C in superclass D"}},
		[e]=j,
		[f]="field (.*?) can overwrite instance variable (.*?) with variable sized type (.*?) in superclass (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-flexible\\-array[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C.\n\nAllow Obj-C ivars with incomplete array type but only as the last ivar.\nAlso add a requirement for ivars that contain a flexible array member to\nbe at the end of class too. It is possible to add in a subclass another\nivar at the end but we\'ll emit a warning in this case. Also we\'ll emit a\nwarning if a variable sized ivar is declared in class extension or in\nimplementation because subclasses won\'t know they should avoid adding\nnew ivars.\n\nIn ARC incomplete array objects are treated as __unsafe_unretained so\nrequire them to be marked as such.\n\nProhibit synthesizing ivars with flexible array members because order of\nsynthesized ivars is not obvious and tricky to control. Spelling out\nivar explicitly gives control to developers and helps to avoid surprises\nwith unexpected ivar ordering.\n\nFor C and C++ changed diagnostic to tell explicitly a field is not the\nlast one and point to the next field. It is not as useful as in Obj-C\nbut it is an improvement and it is consistent with Obj-C. For C for\nunions emit more specific err_flexible_array_union instead of generic\nerr_field_incomplete.\n\nrdar://problem/21054495\n\nReviewers: rjmccall, theraven\n\nReviewed By: rjmccall\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D38773\n\nllvm-svn: 316381"},
		[h]={{N,3922,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n  // ...\n  if (FirstIvar && (FirstIvar == IntfDecl->all_declared_ivar_begin())) {\n    // ...\n    if (SuperClass) {\n      // ...\n      if (IsVariableSizedType(LastIvar->getType())) {\n        S.Diag(FirstIvar->getLocation(), diag::warn_superclass_variable_sized_type_not_at_end) << FirstIvar->getDeclName() << LastIvar->getDeclName() << LastIvar->getType() << SuperClass->getDeclName();"}},
		[m]={
			["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:247:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:254:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:261:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:269:13: warning: field \'count\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:273:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:286:7: warning: field \'last\' can overwrite instance variable \'flexible\' with variable sized type \'char[]\' in superclass \'FlexibleArrayMemberBase\' [-Wobjc-flexible-array]"}
		}
	},
	["warn_suspicious_bzero_size"]={
		[l]={"suspicious-bzero","suspicious-memaccess"},
		[k]="suspicious-bzero",
		[b]={{nil,t,"warn_suspicious_bzero_size"}},
		[c]={{nil,t,"\'size\' argument to bzero is \'0\'"}},
		[d]={{nil,t,"\'size\' argument to bzero is \'0\'"}},
		[e]=j,
		[f]="\'size\' argument to bzero is \'0\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wsuspicious\\-bzero[^\\]]*\\]",
		[a]={{nil,t,n}},
		[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args","[Sema] Add a new warning, -Wmemset-transposed-args\n\nThis diagnoses calls to memset that have the second and third arguments\ntransposed, for example:\n\n  memset(buf, sizeof(buf), 0);\n\nThis is done by checking if the third argument is a literal 0, or if the second\nis a sizeof expression (and the third isn\'t). The first check is also done for\ncalls to bzero.\n\nDifferential revision: https://reviews.llvm.org/D49112\n\nllvm-svn: 337470"},
		[h]={{y,12393,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // ...\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // ...\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n      S.Diag(DiagLoc, diag::warn_suspicious_bzero_size);"}},
		[m]={
			["clang/test/Sema/transpose-memset.c"]={"clang/test/Sema/transpose-memset.c:29:14: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]","clang/test/Sema/transpose-memset.c:30:19: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]","clang/test/Sema/transpose-memset.c:51:3: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]","clang/test/Sema/transpose-memset.c:62:26: warning: \'size\' argument to bzero is \'0\' [-Wsuspicious-bzero]"}
		}
	},
	["warn_suspicious_sizeof_memset"]={
		[l]={"memset-transposed-args","suspicious-memaccess"},
		[k]="memset-transposed-args",
		[b]={{nil,t,"warn_suspicious_sizeof_memset"}},
		[c]={{nil,t,"%select{\'size\' argument to memset is \'0\'|setting buffer to a \'sizeof\' expression}0; did you mean to transpose the last two arguments?"}},
		[d]={{nil,t,{{"\'size\' argument to memset is \'0\'","setting buffer to a \'sizeof\' expression"},"; did you mean to transpose the last two arguments?"}}},
		[e]=j,
		[f]="(?:\'size\' argument to memset is \'0\'|setting buffer to a \'sizeof\' expression); did you mean to transpose the last two arguments\\?",
		[g]=" \\[(?:\\-Werror,)?\\-Wmemset\\-transposed\\-args[^\\]]*\\]",
		[a]={{nil,t,n}},
		[i]={"d1cf276621a7",1532018775,"[Sema] Add a new warning, -Wmemset-transposed-args","[Sema] Add a new warning, -Wmemset-transposed-args\n\nThis diagnoses calls to memset that have the second and third arguments\ntransposed, for example:\n\n  memset(buf, sizeof(buf), 0);\n\nThis is done by checking if the third argument is a literal 0, or if the second\nis a sizeof expression (and the third isn\'t). The first check is also done for\ncalls to bzero.\n\nDifferential revision: https://reviews.llvm.org/D49112\n\nllvm-svn: 337470"},
		[h]={{y,12396,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // ...\n  if (isLiteralZero(SizeArg) && !isArgumentExpandedFromMacro(SM, CallLoc, SizeArg->getExprLoc())) {\n    // ...\n    // Some platforms #define bzero to __builtin_memset. See if this is the\n    // case, and if so, emit a better diagnostic.\n    if (BId == Builtin::BIbzero || (CallLoc.isMacroID() && Lexer::getImmediateMacroName(CallLoc, SM, S.getLangOpts()) == \"bzero\")) {\n    // ...\n    } else if (!isLiteralZero(Call->getArg(1)->IgnoreImpCasts())) {\n      S.Diag(DiagLoc, diag::warn_suspicious_sizeof_memset) << 0;"},{y,12409,"/// Diagnose cases like \'memset(buf, sizeof(buf), 0)\', which should have the\n/// last two arguments transposed.\nstatic void CheckMemaccessSize(Sema &S, unsigned BId, const CallExpr *Call) {\n  // ...\n  // If the second argument to a memset is a sizeof expression and the third\n  // isn\'t, this is also likely an error. This should catch\n  // \'memset(buf, sizeof(buf), 0xff)\'.\n  if (BId == Builtin::BImemset && doesExprLikelyComputeSize(Call->getArg(1)) && !doesExprLikelyComputeSize(Call->getArg(2))) {\n    // ...\n    S.Diag(DiagLoc, diag::warn_suspicious_sizeof_memset) << 1;"}},
		[m]={
			["clang/test/Sema/transpose-memset.c"]={"clang/test/Sema/transpose-memset.c:12:32: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:13:17: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:14:32: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:15:28: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:16:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:17:28: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:18:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:19:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:20:15: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:38:17: warning: setting buffer to a \'sizeof\' expression; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:51:3: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]","clang/test/Sema/transpose-memset.c:61:30: warning: \'size\' argument to memset is \'0\'; did you mean to transpose the last two arguments? [-Wmemset-transposed-args]"}
		}
	},
	["warn_sycl_kernel_invalid_template_param_type"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,s,"warn_sycl_kernel_invalid_template_param_type"}},
		[c]={{nil,s,"template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter"}},
		[d]={{nil,s,"template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter"}},
		[e]=j,
		[f]="template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non\\-type template parameter",
		[g]=V,
		[a]={{nil,s,E}},
		[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
		[h]={{x,8407,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Template parameters must be typenames.\n  for (unsigned I = 0; I < 2; ++I) {\n    // ...\n    if (isa<NonTypeTemplateParmDecl>(TParam)) {\n      S.Diag(FT->getLocation(), diag::warn_sycl_kernel_invalid_template_param_type);"}},
		[m]={
			["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:24:35: warning: template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:26:29: warning: template parameter of a function template with the \'sycl_kernel\' attribute cannot be a non-type template parameter [-Wignored-attributes]"}
		}
	},
	["warn_sycl_kernel_num_of_function_params"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,s,"warn_sycl_kernel_num_of_function_params"}},
		[c]={{nil,s,"function template with \'sycl_kernel\' attribute must have a single parameter"}},
		[d]={{nil,s,"function template with \'sycl_kernel\' attribute must have a single parameter"}},
		[e]=j,
		[f]="function template with \'sycl_kernel\' attribute must have a single parameter",
		[g]=V,
		[a]={{nil,s,E}},
		[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
		[h]={{x,8414,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Function must have at least one argument.\n  if (getFunctionOrMethodNumParams(D) != 1) {\n    S.Diag(FT->getLocation(), diag::warn_sycl_kernel_num_of_function_params);"}},
		[m]={
			["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:36:35: warning: function template with \'sycl_kernel\' attribute must have a single parameter [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:38:29: warning: function template with \'sycl_kernel\' attribute must have a single parameter [-Wignored-attributes]"}
		}
	},
	["warn_sycl_kernel_num_of_template_params"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,s,"warn_sycl_kernel_num_of_template_params"}},
		[c]={{nil,s,"\'sycl_kernel\' attribute only applies to a function template with at least two template parameters"}},
		[d]={{nil,s,"\'sycl_kernel\' attribute only applies to a function template with at least two template parameters"}},
		[e]=j,
		[f]="\'sycl_kernel\' attribute only applies to a function template with at least two template parameters",
		[g]=V,
		[a]={{nil,s,E}},
		[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
		[h]={{x,8398,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (TL->size() < 2) {\n    S.Diag(FT->getLocation(), diag::warn_sycl_kernel_num_of_template_params);"}},
		[m]={
			["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:18:35: warning: \'sycl_kernel\' attribute only applies to a function template with at least two template parameters [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:20:29: warning: \'sycl_kernel\' attribute only applies to a function template with at least two template parameters [-Wignored-attributes]"}
		}
	},
	["warn_sycl_kernel_return_type"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,s,"warn_sycl_kernel_return_type"}},
		[c]={{nil,s,"function template with \'sycl_kernel\' attribute must have a \'void\' return type"}},
		[d]={{nil,s,"function template with \'sycl_kernel\' attribute must have a \'void\' return type"}},
		[e]=j,
		[f]="function template with \'sycl_kernel\' attribute must have a \'void\' return type",
		[g]=V,
		[a]={{nil,s,E}},
		[i]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
		[h]={{x,8421,"static void handleSYCLKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!RetTy->isVoidType()) {\n    S.Diag(FT->getLocation(), diag::warn_sycl_kernel_return_type);"}},
		[m]={
			["clang/test/SemaSYCL/kernel-attribute.cpp"]={"clang/test/SemaSYCL/kernel-attribute.cpp:30:34: warning: function template with \'sycl_kernel\' attribute must have a \'void\' return type [-Wignored-attributes]","clang/test/SemaSYCL/kernel-attribute.cpp:32:28: warning: function template with \'sycl_kernel\' attribute must have a \'void\' return type [-Wignored-attributes]"}
		}
	},
	["warn_sync_fetch_and_nand_semantics_change"]={
		[l]={"sync-fetch-and-nand-semantics-changed"},
		[k]="sync-fetch-and-nand-semantics-changed",
		[b]="warn_sync_fetch_and_nand_semantics_change",
		[c]="the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here",
		[d]="the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here",
		[e]=j,
		[f]="the semantics of this intrinsic changed with GCC version 4\\.4 \\- the newer semantics are provided here",
		[g]=" \\[(?:\\-Werror,)?\\-Wsync\\-fetch\\-and\\-nand\\-semantics\\-changed[^\\]]*\\]",
		[a]=n,
		[i]={"d2208b59cfaa",1412283230,"Add __sync_fetch_and_nand (again)","Add __sync_fetch_and_nand (again)\n\nPrior to GCC 4.4, __sync_fetch_and_nand was implemented as:\n\n  { tmp = *ptr; *ptr = ~tmp & value; return tmp; }\n\nbut this was changed in GCC 4.4 to be:\n\n  { tmp = *ptr; *ptr = ~(tmp & value); return tmp; }\n\nin response to this change, support for sync_fetch_and_nand (and\nsync_nand_and_fetch) was removed in r99522 in order to avoid miscompiling code\ndepending on the old semantics. However, at this point:\n\n  1. Many years have passed, and the amount of code relying on the old\n     semantics is likely smaller.\n\n  2. Through the work of many contributors, all LLVM backends have been updated\n     such that \"atomicrmw nand\" provides the newer GCC 4.4+ semantics (this process\n     was complete July of 2014 (added to the release notes in r212635).\n\n  3. The lack of this intrinsic is now a needless impediment to porting codes\n     from GCC to Clang (I\'ve now seen several examples of this).\n\nIt is true, however, that we still set GNUC_MINOR to 2 (corresponding to GCC\n4.2). To compensate for this, and to address the original concern regarding\ncode relying on the old semantics, I\'ve added a warning that specifically\ndetails the fact that the semantics have changed and that we provide the newer\nsemantics.\n\nFixes PR8842.\n\nllvm-svn: 218905"},
		[h]={{y,7821,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (WarnAboutSemanticsChange) {\n    Diag(TheCall->getEndLoc(), diag::warn_sync_fetch_and_nand_semantics_change) << Callee->getSourceRange();"}},
		[m]={
			["clang/test/CodeGen/atomic.c"]={"clang/test/CodeGen/atomic.c:60:40: warning: the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here [-Wsync-fetch-and-nand-semantics-changed]","clang/test/CodeGen/atomic.c:78:39: warning: the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here [-Wsync-fetch-and-nand-semantics-changed]"}
		}
	},
	["warn_sync_op_misaligned"]={
		[l]={"sync-alignment"},
		[k]="sync-alignment",
		[b]="warn_sync_op_misaligned",
		[c]="__sync builtin operation MUST have natural alignment (consider using __atomic).",
		[d]="__sync builtin operation MUST have natural alignment (consider using __atomic).",
		[e]=j,
		[f]="__sync builtin operation MUST have natural alignment \\(consider using __atomic\\)\\.",
		[g]=" \\[(?:\\-Werror,)?\\-Wsync\\-alignment[^\\]]*\\]",
		[a]=E,
		[i]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks","[clang] Set ShowInSystemHeader for module-build and module-import remarks\n\nWithout this change, the use of `-Rmodule-build` and `-Rmodule-import` only\nproduces diagnostics for modules built or imported by non-system code.\n\nFor example, if a project source file requires the Foundation module to be\nbuilt, then `-Rmodule-build` will show a single diagnostic for Foundation, but\nnot in turn for any of Foundation\'s (direct or indirect) dependencies. This is\nbecause the locations of those transitive module builds are initiated from\nsystem headers, which are ignored by default. When wanting to observe module\nbuilding/importing, the system modules can represent a significant amount of\nmodule diagnostics, and I think should be shown by default when\n`-Rmodule-build` and `-Rmodule-import` are specified.\n\nI noticed some other remarks use `ShowInSystemHeader`.\n\nDifferential Revision: https://reviews.llvm.org/D139653"},
		[h]={{"clang/lib/CodeGen/CGBuiltin.cpp",201,"static llvm::Value *CheckAtomicAlignment(CodeGenFunction &CGF, const CallExpr *E) {\n  // ...\n  if (Align % Bytes != 0) {\n    // ...\n    Diags.Report(E->getBeginLoc(), diag::warn_sync_op_misaligned);"}},
		[m]={
			["clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c"]={"clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:11:10: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]","clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:16:10: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]","clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:21:10: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]","clang/test/CodeGen/SystemZ/sync-builtins-i128-8Al.c:26:3: warning: __sync builtin operation MUST have natural alignment (consider using __atomic). [-Wsync-alignment]"}
		}
	},
	["warn_taking_address_of_packed_member"]={
		[l]={"address-of-packed-member"},
		[k]="address-of-packed-member",
		[b]="warn_taking_address_of_packed_member",
		[c]="taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value",
		[d]="taking address of packed member A of class or structure B may result in an unaligned pointer value",
		[e]=j,
		[f]="taking address of packed member (.*?) of class or structure (.*?) may result in an unaligned pointer value",
		[g]=" \\[(?:\\-Werror,)?\\-Waddress\\-of\\-packed\\-member[^\\]]*\\]",
		[a]=n,
		[i]={"ac6617b288ed",1465832500,"Warn when taking address of a packed member","Warn when taking address of a packed member\n\nThis patch implements PR#22821.\n\nTaking the address of a packed member is dangerous since the reduced\nalignment of the pointee is lost. This can lead to memory alignment\nfaults in some architectures if the pointer value is dereferenced.\n\nThis change adds a new warning to clang emitted when taking the address\nof a packed member. A packed member is either a field/data member\ndeclared as attribute((packed)) or belonging to a struct/class\ndeclared as such. The associated flag is -Waddress-of-packed-member\n\nDifferential Revision: http://reviews.llvm.org/D20561\n\nllvm-svn: 272552"},
		[h]={{y,18481,"void Sema::DiagnoseMisalignedMembers() {\n  for (MisalignedMember &m : MisalignedMembers) {\n    // ...\n    Diag(m.E->getBeginLoc(), diag::warn_taking_address_of_packed_member) << m.MD << ND << m.E->getSourceRange();"}},
		[m]={
			["clang/test/Sema/address-packed.c"]={"clang/test/Sema/address-packed.c:40:9: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:52:9: warning: taking address of packed member \'x\' of class or structure \'UnionArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:61:9: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:71:9: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:81:10: warning: taking address of packed member \'x\' of class or structure \'Arguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:96:11: warning: taking address of packed member \'i\' of class or structure \'S1\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:108:11: warning: taking address of packed member \'inner\' of class or structure \'S2\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:117:11: warning: taking address of packed member \'inner\' of class or structure \'S2_a\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:128:11: warning: taking address of packed member \'inner\' of class or structure \'S3\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:139:11: warning: taking address of packed member \'i\' of class or structure \'S4::struct (unnamed at clang/test/Sema/address-packed.c:133:3)\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:151:11: warning: taking address of packed member \'i\' of class or structure \'S5::struct (unnamed at clang/test/Sema/address-packed.c:144:3)\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:184:13: warning: taking address of packed member \'x\' of class or structure \'TypedefStructArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:188:13: warning: taking address of packed member \'x\' of class or structure \'TypedefStructArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:192:13: warning: taking address of packed member \'x\' of class or structure \'TypedefUnionArguable\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:203:11: warning: taking address of packed member \'x\' of class or structure \'S6::union (anonymous at clang/test/Sema/address-packed.c:196:3)\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:218:9: warning: taking address of packed member \'d\' of class or structure \'S6a\' may result in an unaligned pointer value [-Waddress-of-packed-member]","clang/test/Sema/address-packed.c:282:10: warning: taking address of packed member \'x\' of class or structure \'S9\' may result in an unaligned pointer value [-Waddress-of-packed-member]"}
		}
	},
	["warn_target_clone_duplicate_options"]={
		[l]={Zb},
		[k]=Zb,
		[b]={{nil,u,"warn_target_clone_duplicate_options"}},
		[c]={{nil,u,"version list contains duplicate entries"}},
		[d]={{nil,u,"version list contains duplicate entries"}},
		[e]=j,
		[f]="version list contains duplicate entries",
		[g]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]",
		[a]={{nil,u,E}},
		[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[h]={{x,3549,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n      // AArch64 target clones specific\n      if (Cur == \"default\") {\n        // ...\n        if (llvm::is_contained(StringsBuffer, Cur) || DefaultIsDupe)\n          Diag(CurLoc, diag::warn_target_clone_duplicate_options);"},{x,3576,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n      // AArch64 target clones specific\n      if (Cur == \"default\") {\n      // ...\n      } else {\n        // ...\n        if (llvm::is_contained(StringsBuffer, Res) || DefaultIsDupe)\n          Diag(CurLoc, diag::warn_target_clone_duplicate_options);"},{x,3601,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n    // ...\n    } else {\n      // ...\n      if (llvm::is_contained(StringsBuffer, Cur) || DefaultIsDupe)\n        Diag(CurLoc, diag::warn_target_clone_duplicate_options);"}},
		[m]={
			["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:41:50: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:43:58: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:45:55: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:48:41: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:48:62: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:51:50: warning: version list contains duplicate entries [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:72:52: warning: version list contains duplicate entries [-Wfunction-multiversion]"}
		}
	},
	["warn_target_clone_mixed_values"]={
		[l]={Zb,"target-clones-mixed-specifiers"},
		[k]="target-clones-mixed-specifiers",
		[b]={{nil,u,"warn_target_clone_mixed_values"}},
		[c]={{nil,u,"mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma-separated list of versions"}},
		[d]={{nil,u,"mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma-separated list of versions"}},
		[e]=j,
		[f]="mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma\\-separated list of versions",
		[g]=" \\[(?:\\-Werror,)?\\-Wtarget\\-clones\\-mixed\\-specifiers[^\\]]*\\]",
		[a]={{nil,u,E}},
		[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[h]={{x,3645,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (HasCommas && AL.getNumArgs() > 1)\n    S.Diag(AL.getLoc(), diag::warn_target_clone_mixed_values);"}},
		[m]={
			["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:49:20: warning: mixing \'target_clones\' specifier mechanisms is permitted for GCC compatibility; use a comma separated sequence of string literals, or a string literal containing a comma-separated list of versions [-Wtarget-clones-mixed-specifiers]"}
		}
	},
	["warn_target_clone_no_impact_options"]={
		[l]={Zb},
		[k]=Zb,
		[b]={{nil,B,"warn_target_clone_no_impact_options"}},
		[c]={{nil,B,"version list contains entries that don\'t impact code generation"}},
		[d]={{nil,B,"version list contains entries that don\'t impact code generation"}},
		[e]=j,
		[f]="version list contains entries that don\'t impact code generation",
		[g]=" \\[(?:\\-Werror,)?\\-Wfunction\\-multiversion[^\\]]*\\]",
		[a]={{nil,B,E}},
		[i]={eb,1625925174,fb,ob},
		[h]={{x,3580,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n      // AArch64 target clones specific\n      if (Cur == \"default\") {\n      // ...\n      } else {\n        // ...\n        if (llvm::is_contained(StringsBuffer, Res) || DefaultIsDupe)\n        // ...\n        else if (!HasCodeGenImpact)\n          // ...\n          Diag(CurLoc, diag::warn_target_clone_no_impact_options);"}},
		[m]={
			["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:8:36: warning: version list contains entries that don\'t impact code generation [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:27:35: warning: version list contains entries that don\'t impact code generation [-Wfunction-multiversion]","clang/test/Sema/attr-target-clones-aarch64.c:59:36: warning: version list contains entries that don\'t impact code generation [-Wfunction-multiversion]"}
		}
	},
	["warn_target_override_arm64ec"]={
		[l]={"option-ignored"},
		[k]="option-ignored",
		[b]={{nil,B,"warn_target_override_arm64ec"}},
		[c]={{nil,B,"/arm64EC has been overridden by specified target: %0; option ignored"}},
		[d]={{nil,B,"/arm64EC has been overridden by specified target: A; option ignored"}},
		[e]=j,
		[f]="\\/arm64EC has been overridden by specified target\\: (.*?); option ignored",
		[g]=" \\[(?:\\-Werror,)?\\-Woption\\-ignored[^\\]]*\\]",
		[a]={{nil,B,E}},
		[i]={"b0fff3db6ada",1664803233,"[ARM64EC][clang-cl] Add /arm64EC flag","[ARM64EC][clang-cl] Add /arm64EC flag\n\nReviewed By: DavidSpickett\n\nDifferential Revision: https://reviews.llvm.org/D134788"},
		[h]={{"clang/lib/Driver/Driver.cpp",1447,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // Report warning when arm64EC option is overridden by specified target\n  if ((TC.getTriple().getArch() != llvm::Triple::aarch64 || TC.getTriple().getSubArch() != llvm::Triple::AArch64SubArch_arm64ec) && UArgs->hasArg(options::OPT__SLASH_arm64EC)) {\n    getDiags().Report(clang::diag::warn_target_override_arm64ec) << TC.getTriple().str();"}}
	},
	["warn_target_unrecognized_env"]={
		[l]={"invalid-command-line-argument"},
		[k]="invalid-command-line-argument",
		[b]="warn_target_unrecognized_env",
		[c]="mismatch between architecture and environment in target triple \'%0\'; did you mean \'%1\'?",
		[d]="mismatch between architecture and environment in target triple \'A\'; did you mean \'B\'?",
		[e]=j,
		[f]="mismatch between architecture and environment in target triple \'(.*?)\'; did you mean \'(.*?)\'\\?",
		[g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]",
		[a]=E,
		[i]={"041ffc155fd7",1687355349,"[Clang][Driver] Warn on invalid Arm or AArch64 baremetal target triple","[Clang][Driver] Warn on invalid Arm or AArch64 baremetal target triple\n\nA common user mistake is specifying a target of aarch64-none-eabi or\narm-none-elf whereas the correct names are aarch64-none-elf &\narm-none-eabi. Currently if a target of aarch64-none-eabi is specified\nthen the Generic_ELF toolchain is used, unlike aarch64-none-elf which\nwill use the BareMetal toolchain. This is unlikely to be intended by the\nuser so issue a warning that the target is invalid.\n\nThe target parser is liberal in what input it accepts so invalid triples\nmay yield behaviour that\'s sufficiently close to what the user intended.\nTherefore invalid triples were used in many tests. This change updates\nthose tests to use valid triples.\nOne test (gnu-mcount.c) relies on the Generic_ELF toolchain behaviour so\nchange it to explicitly specify aarch64-unknown-none-gnu as the target.\n\nReviewed By: peter.smith, DavidSpickett\n\nDifferential Revision: https://reviews.llvm.org/D153430"},
		[h]={{"clang/lib/Driver/Driver.cpp",1462,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // A common user mistake is specifying a target of aarch64-none-eabi or\n  // arm-none-elf whereas the correct names are aarch64-none-elf &\n  // arm-none-eabi. Detect these cases and issue a warning.\n  if (TC.getTriple().getOS() == llvm::Triple::UnknownOS && TC.getTriple().getVendor() == llvm::Triple::UnknownVendor) {\n    // ...\n    case llvm::Triple::arm:\n    case llvm::Triple::armeb:\n    case llvm::Triple::thumb:\n    case llvm::Triple::thumbeb:\n      if (TC.getTriple().getEnvironmentName() == \"elf\") {\n        Diag(diag::warn_target_unrecognized_env) << TargetTriple << (TC.getTriple().getArchName().str() + \"-none-eabi\");"},{"clang/lib/Driver/Driver.cpp",1471,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // A common user mistake is specifying a target of aarch64-none-eabi or\n  // arm-none-elf whereas the correct names are aarch64-none-elf &\n  // arm-none-eabi. Detect these cases and issue a warning.\n  if (TC.getTriple().getOS() == llvm::Triple::UnknownOS && TC.getTriple().getVendor() == llvm::Triple::UnknownVendor) {\n    // ...\n    case llvm::Triple::aarch64:\n    case llvm::Triple::aarch64_be:\n    case llvm::Triple::aarch64_32:\n      if (TC.getTriple().getEnvironmentName().startswith(\"eabi\")) {\n        Diag(diag::warn_target_unrecognized_env) << TargetTriple << (TC.getTriple().getArchName().str() + \"-none-elf\");"}}
	},
	["warn_target_unsupported_abs2008"]={
		[l]={"unsupported-abs"},
		[k]="unsupported-abs",
		[b]={{nil,p,"warn_target_unsupported_abs2008"}},
		[c]={{nil,p,"ignoring \'-mabs=2008\' option because the \'%0\' architecture does not support it"}},
		[d]={{nil,p,"ignoring \'-mabs=2008\' option because the \'A\' architecture does not support it"}},
		[e]=j,
		[f]="ignoring \'\\-mabs\\=2008\' option because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abs[^\\]]*\\]",
		[a]={{nil,p,E}},
		[i]={"5076511ed6bd",1503590790,"[mips] Introducing option -mabs=[legacy/2008]","[mips] Introducing option -mabs=[legacy/2008]\n\nIn patch r205628 using abs.[ds] instruction is forced, as they should behave\nin accordance with flags Has2008 and ABS2008. Unfortunately for revisions\nprior mips32r6 and mips64r6, abs.[ds] is not generating correct result when\nworking with NaNs. To generate a sequence which always produce a correct\nresult but also to allow user more control on how his code is compiled,\noption -mabs is added where user can choose legacy or 2008.\nBy default legacy mode is used on revisions prior R6. Mips32r6 and mips64r6\nuse abs2008 mode by default.\n\nPatch by Aleksandar Beserminji\n\nDifferential Revision: https://reviews.llvm.org/D35982\n\nllvm-svn: 311669"},
		[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",314,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mabs_EQ)) {\n    // ...\n    if (Val == \"2008\") {\n      if (mips::getIEEE754Standard(CPUName) & mips::Std2008) {\n      // ...\n      } else {\n        // ...\n        D.Diag(diag::warn_target_unsupported_abs2008) << CPUName;"}},
		[m]={
			["clang/test/Driver/mips-mabs-warning.c"]={"clang: warning: ignoring \'-mabs=2008\' option because the \'mips32\' architecture does not support it [-Wunsupported-abs]"}
		}
	},
	["warn_target_unsupported_abslegacy"]={
		[l]={"unsupported-abs"},
		[k]="unsupported-abs",
		[b]={{nil,p,"warn_target_unsupported_abslegacy"}},
		[c]={{nil,p,"ignoring \'-mabs=legacy\' option because the \'%0\' architecture does not support it"}},
		[d]={{nil,p,"ignoring \'-mabs=legacy\' option because the \'A\' architecture does not support it"}},
		[e]=j,
		[f]="ignoring \'\\-mabs\\=legacy\' option because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-abs[^\\]]*\\]",
		[a]={{nil,p,E}},
		[i]={"5076511ed6bd",1503590790,"[mips] Introducing option -mabs=[legacy/2008]","[mips] Introducing option -mabs=[legacy/2008]\n\nIn patch r205628 using abs.[ds] instruction is forced, as they should behave\nin accordance with flags Has2008 and ABS2008. Unfortunately for revisions\nprior mips32r6 and mips64r6, abs.[ds] is not generating correct result when\nworking with NaNs. To generate a sequence which always produce a correct\nresult but also to allow user more control on how his code is compiled,\noption -mabs is added where user can choose legacy or 2008.\nBy default legacy mode is used on revisions prior R6. Mips32r6 and mips64r6\nuse abs2008 mode by default.\n\nPatch by Aleksandar Beserminji\n\nDifferential Revision: https://reviews.llvm.org/D35982\n\nllvm-svn: 311669"},
		[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",321,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mabs_EQ)) {\n    // ...\n    if (Val == \"2008\") {\n    // ...\n    } else if (Val == \"legacy\") {\n      if (mips::getIEEE754Standard(CPUName) & mips::Legacy) {\n      // ...\n      } else {\n        // ...\n        D.Diag(diag::warn_target_unsupported_abslegacy) << CPUName;"}},
		[m]={
			["clang/test/Driver/mips-mabs-warning.c"]={"clang: warning: ignoring \'-mabs=legacy\' option because the \'mips32r6\' architecture does not support it [-Wunsupported-abs]"}
		}
	},
	["warn_target_unsupported_branch_protection_attribute"]={
		[l]={Db},
		[k]=Db,
		[b]={{nil,u,"warn_target_unsupported_branch_protection_attribute"}},
		[c]={{nil,u,"ignoring the \'branch-protection\' attribute because the \'%0\' architecture does not support it"}},
		[d]={{nil,u,"ignoring the \'branch-protection\' attribute because the \'A\' architecture does not support it"}},
		[e]=j,
		[f]="ignoring the \'branch\\-protection\' attribute because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]",
		[a]={{nil,u,"Nullability Issue"}},
		[i]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for\n`pragma clang fp eval_method`."},
		[h]={{"clang/lib/CodeGen/Targets/ARM.cpp",153,"class ARMTargetCodeGenInfo : public TargetCodeGenInfo {\n  // ...\n  void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const override {\n    // ...\n    if (const auto *TA = FD->getAttr<TargetAttr>()) {\n      // ...\n      if (!Attr.BranchProtection.empty()) {\n        // ...\n        if (!CGM.getTarget().validateBranchProtection(Attr.BranchProtection, Arch, BPI, DiagMsg)) {\n          CGM.getDiags().Report(D->getLocation(), diag::warn_target_unsupported_branch_protection_attribute) << Arch;"},{"clang/lib/CodeGen/Targets/ARM.cpp",174,"class ARMTargetCodeGenInfo : public TargetCodeGenInfo {\n  // ...\n  void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV, CodeGen::CodeGenModule &CGM) const override {\n    // ...\n    if (const auto *TA = FD->getAttr<TargetAttr>()) {\n      // ...\n      if (!Attr.BranchProtection.empty()) {\n      // ...\n      } else if (CGM.getLangOpts().BranchTargetEnforcement || CGM.getLangOpts().hasSignReturnAddress()) {\n        // If the Branch Protection attribute is missing, validate the target\n        // Architecture attribute against Branch Protection command line\n        // settings.\n        if (!CGM.getTarget().isBranchProtectionSupportedArch(Attr.CPU))\n          CGM.getDiags().Report(D->getLocation(), diag::warn_target_unsupported_branch_protection_attribute) << Attr.CPU;"}},
		[m]={
			["clang/test/Frontend/arm-ignore-branch-protection-option.c"]={"clang/test/Frontend/arm-ignore-branch-protection-option.c:6:48: warning: ignoring the \'branch-protection\' attribute because the \'cortex-m0\' architecture does not support it [-Wbranch-protection]"}
		}
	},
	["warn_target_unsupported_compact_branches"]={
		[l]={"unsupported-cb"},
		[k]="unsupported-cb",
		[b]="warn_target_unsupported_compact_branches",
		[c]="ignoring \'-mcompact-branches=\' option because the \'%0\' architecture does not support it",
		[d]="ignoring \'-mcompact-branches=\' option because the \'A\' architecture does not support it",
		[e]=j,
		[f]="ignoring \'\\-mcompact\\-branches\\=\' option because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-cb[^\\]]*\\]",
		[a]=E,
		[i]={"d0e83bad13b1",1464362011,"[mips] Compact branch policy setting.","[mips] Compact branch policy setting.\n\nThis patch adds the commandline option -mcompact-branches={never,optimal,always),\nwhich controls how LLVM generates compact branches for MIPSR6 targets. By default,\nthe compact branch policy is \'optimal\' where LLVM will generate the most\nappropriate branch for any situation. The \'never\' and \'always\' policy will disable\nor always generate compact branches wherever possible respectfully.\n\nReviewers: dsanders, vkalintiris, atanasyan\n\nDifferential Revision: http://reviews.llvm.org/D20729\n\nllvm-svn: 271000"},
		[h]={{"clang/lib/Driver/ToolChains/Clang.cpp",2007,"void Clang::AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mcompact_branches_EQ)) {\n    // ...\n    if (mips::hasCompactBranches(CPUName)) {\n    // ...\n    } else\n      D.Diag(diag::warn_target_unsupported_compact_branches) << CPUName;"}}
	},
	["warn_target_unsupported_extension"]={
		[l]={"invalid-command-line-argument"},
		[k]="invalid-command-line-argument",
		[b]={{nil,s,"warn_target_unsupported_extension"}},
		[c]={{nil,s,"ignoring extension \'%0\' because the \'%1\' architecture does not support it"}},
		[d]={{nil,s,"ignoring extension \'A\' because the \'B\' architecture does not support it"}},
		[e]=j,
		[f]="ignoring extension \'(.*?)\' because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-command\\-line\\-argument[^\\]]*\\]",
		[a]={{nil,s,E}},
		[i]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity)."},
		[h]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",772,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (HasSHA2 || HasAES) {\n    // ...\n    if (!((llvm::ARM::parseArchVersion(ArchSuffix) >= 8) && (ArchProfile == llvm::ARM::ProfileKind::A || ArchProfile == llvm::ARM::ProfileKind::R))) {\n      if (HasSHA2)\n        D.Diag(clang::diag::warn_target_unsupported_extension) << \"sha2\" << llvm::ARM::getArchName(llvm::ARM::parseArch(ArchSuffix));"},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",776,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (HasSHA2 || HasAES) {\n    // ...\n    if (!((llvm::ARM::parseArchVersion(ArchSuffix) >= 8) && (ArchProfile == llvm::ARM::ProfileKind::A || ArchProfile == llvm::ARM::ProfileKind::R))) {\n      // ...\n      if (HasAES)\n        D.Diag(clang::diag::warn_target_unsupported_extension) << \"aes\" << llvm::ARM::getArchName(llvm::ARM::parseArch(ArchSuffix));"}},
		[m]={
			["clang/test/Preprocessor/arm-acle-6.5.c"]={"clang: warning: ignoring extension \'sha2\' because the \'armv7-a\' architecture does not support it [-Winvalid-command-line-argument]","clang: warning: ignoring extension \'aes\' because the \'armv7-a\' architecture does not support it [-Winvalid-command-line-argument]"}
		}
	},
	["warn_target_unsupported_nan2008"]={
		[l]={"unsupported-nan"},
		[k]="unsupported-nan",
		[b]="warn_target_unsupported_nan2008",
		[c]="ignoring \'-mnan=2008\' option because the \'%0\' architecture does not support it",
		[d]="ignoring \'-mnan=2008\' option because the \'A\' architecture does not support it",
		[e]=j,
		[f]="ignoring \'\\-mnan\\=2008\' option because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-nan[^\\]]*\\]",
		[a]=E,
		[i]={"1dbc317736ce",1429015748,"[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations","[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations\n\nThis patch generates a warning for invalid combination of \'-mnan\' and\n\'-march\' options, it properly sets NaN encoding for a given \'-march\',\nand it passes a proper NaN encoding to the assembler.\n\nPatch by Vladimir Radosavljevic.\n\nDifferential Revision: http://reviews.llvm.org/D8170\n\nllvm-svn: 234882"},
		[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",293,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mnan_EQ)) {\n    // ...\n    if (Val == \"2008\") {\n      if (mips::getIEEE754Standard(CPUName) & mips::Std2008)\n      // ...\n      else {\n        // ...\n        D.Diag(diag::warn_target_unsupported_nan2008) << CPUName;"}},
		[m]={
			["clang/test/CodeGen/mips-unsupported-nan.c"]={"clang: warning: ignoring \'-mnan=2008\' option because the \'mips64\' architecture does not support it [-Wunsupported-nan]"}
		}
	},
	["warn_target_unsupported_nanlegacy"]={
		[l]={"unsupported-nan"},
		[k]="unsupported-nan",
		[b]="warn_target_unsupported_nanlegacy",
		[c]="ignoring \'-mnan=legacy\' option because the \'%0\' architecture does not support it",
		[d]="ignoring \'-mnan=legacy\' option because the \'A\' architecture does not support it",
		[e]=j,
		[f]="ignoring \'\\-mnan\\=legacy\' option because the \'(.*?)\' architecture does not support it",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-nan[^\\]]*\\]",
		[a]=E,
		[i]={"1dbc317736ce",1429015748,"[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations","[Mips] Generate warning for invalid \'-mnan\' and \'-march\' combinations\n\nThis patch generates a warning for invalid combination of \'-mnan\' and\n\'-march\' options, it properly sets NaN encoding for a given \'-march\',\nand it passes a proper NaN encoding to the assembler.\n\nPatch by Vladimir Radosavljevic.\n\nDifferential Revision: http://reviews.llvm.org/D8170\n\nllvm-svn: 234882"},
		[h]={{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",300,"void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mnan_EQ)) {\n    // ...\n    if (Val == \"2008\") {\n    // ...\n    } else if (Val == \"legacy\") {\n      if (mips::getIEEE754Standard(CPUName) & mips::Legacy)\n      // ...\n      else {\n        // ...\n        D.Diag(diag::warn_target_unsupported_nanlegacy) << CPUName;"}},
		[m]={
			["clang/test/CodeGen/mips-unsupported-nan.c"]={"clang: warning: ignoring \'-mnan=legacy\' option because the \'mips64r6\' architecture does not support it [-Wunsupported-nan]"}
		}
	},
	["warn_tautological_bool_compare"]={
		[l]={o,q,r,"tautological-compare","tautological-constant-compare"},
		[k]="tautological-constant-compare",
		[b]={{nil,p,"warn_tautological_bool_compare"}},
		[c]={{nil,p,"result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4"}},
		[d]={{nil,p,{Qb,{"constant A","true","false"}," with ",{"expression of type C","boolean expression"}," is always E"}}},
		[e]=j,
		[f]="result of comparison of (?:constant (.*?)|true|false) with (?:expression of type (.*?)|boolean expression) is always (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-constant\\-compare[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"692f66ab626b",1512588199,"Delete special-case \"out-of-range\" handling for bools, and just use the normal","Delete special-case \"out-of-range\" handling for bools, and just use the normal\ncodepath plus the new \"minimum / maximum value of type\" diagnostic to get the\nsame effect.\n\nMove the warning for an in-range but tautological comparison of a constant (0\nor 1) against a bool out of -Wtautological-constant-out-of-range-compare into\nthe more-appropriate -Wtautological-constant-compare.\n\nllvm-svn: 319942"},
		[h]={{y,13737,"static int classifyConstantValue(Expr *Constant) {\n  // ...\n  // diag::warn_out_of_range_compare and diag::warn_tautological_bool_compare."},{y,13879,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  // FIXME: We use a somewhat different formatting for the in-range cases and\n  // cases involving boolean values for historical reasons. We should pick a\n  // consistent way of presenting these diagnostics.\n  if (!InRange || Other->isKnownToHaveBooleanValue()) {\n    S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(!InRange ? diag::warn_out_of_range_compare : diag::warn_tautological_bool_compare) << OS.str() << classifyConstantValue(Constant) << OtherT << OtherIsBooleanDespiteType << *Result << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange());"}},
		[m]={
			["clang/test/Sema/atomic-compare.c"]={"clang/test/Sema/atomic-compare.c:17:10: warning: result of comparison of constant 1 with boolean expression is always false [-Wtautological-constant-compare]"}
		}
	},
	["warn_tautological_compare_objc_bool"]={
		[l]={o,q,r,"objc-signed-char-bool","tautological-compare","tautological-objc-bool-compare"},
		[k]="tautological-objc-bool-compare",
		[b]={{nil,S,"warn_tautological_compare_objc_bool"}},
		[c]={{nil,s,"result of comparison of constant %0 with expression of type \'BOOL\' is always %1, as the only well defined values for \'BOOL\' are YES and NO"},{S,S,"result of comparison of constant %0 with expression of type BOOL is always %1, as the only well defined values for BOOL are YES and NO"}},
		[d]={{nil,s,"result of comparison of constant A with expression of type \'BOOL\' is always B, as the only well defined values for \'BOOL\' are YES and NO"},{S,S,"result of comparison of constant A with expression of type BOOL is always B, as the only well defined values for BOOL are YES and NO"}},
		[e]=j,
		[f]="result of comparison of constant (.*?) with expression of type \'BOOL\' is always (.*?), as the only well defined values for \'BOOL\' are YES and NO",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-objc\\-bool\\-compare[^\\]]*\\]",
		[a]={{nil,S,n}},
		[i]={"fa591c370d24",1562629372,"[ObjC] Add a -Wtautological-compare warning for BOOL","[ObjC] Add a -Wtautological-compare warning for BOOL\n\nOn macOS, BOOL is a typedef for signed char, but it should never hold a value\nthat isn\'t 1 or 0. Any code that expects a different value in their BOOL should\nbe fixed.\n\nrdar://51954400\n\nDifferential revision: https://reviews.llvm.org/D63856\n\nllvm-svn: 365408"},
		[h]={{y,13866,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  if (IsObjCSignedCharBool) {\n    S.DiagRuntimeBehavior(E->getOperatorLoc(), E, S.PDiag(diag::warn_tautological_compare_objc_bool) << OS.str() << *Result);"}},
		[m]={
			["clang/test/Sema/tautological-objc-bool-compare.m"]={"clang/test/Sema/tautological-objc-bool-compare.m:12:9: warning: result of comparison of constant 1 with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:14:9: warning: result of comparison of constant 0 with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:15:9: warning: result of comparison of constant 0 with expression of type \'BOOL\' is always true, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:18:9: warning: result of comparison of constant YES with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:20:9: warning: result of comparison of constant NO with expression of type \'BOOL\' is always false, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]","clang/test/Sema/tautological-objc-bool-compare.m:22:9: warning: result of comparison of constant NO with expression of type \'BOOL\' is always true, as the only well defined values for \'BOOL\' are YES and NO [-Wtautological-objc-bool-compare]"}
		}
	},
	["warn_tautological_compare_value_range"]={
		[l]={Wb,"tautological-value-range-compare"},
		[k]="tautological-value-range-compare",
		[b]={{nil,J,"warn_tautological_compare_value_range"}},
		[c]={{nil,J,"result of comparison of %select{%4|%1-bit %select{signed|unsigned}2 value}0 %3 %select{%1-bit %select{signed|unsigned}2 value|%4}0 is always %5"}},
		[d]={{nil,J,{Qb,{"E",{"B-bit ",{"signed","unsigned"}," value"}}," D ",{{"B-bit ",{"signed","unsigned"}," value"},"E"}," is always F"}}},
		[e]=j,
		[f]="result of comparison of (?:(.*?)|(.*?)\\-bit (?:signed|unsigned) value) (.*?) (?:(.*?)\\-bit (?:signed|unsigned) value|(.*?)) is always (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-value\\-range\\-compare[^\\]]*\\]",
		[a]={{nil,J,n}},
		[i]={cc,1582847864,Tb,dc},
		[h]={{y,13857,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  if (!TautologicalTypeCompare) {\n    S.Diag(E->getOperatorLoc(), diag::warn_tautological_compare_value_range) << RhsConstant << OtherValueRange.Width << OtherValueRange.NonNegative << E->getOpcodeStr() << OS.str() << *Result << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange();"}},
		[m]={
			["clang/test/Sema/tautological-constant-compare.c"]={"clang/test/Sema/tautological-constant-compare.c:560:11: warning: result of comparison of 3-bit signed value < 4 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:562:11: warning: result of comparison of 3-bit unsigned value < 8 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:564:11: warning: result of comparison of 3-bit signed value < 4 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:566:11: warning: result of comparison of 3-bit unsigned value < 8 is always true [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:574:18: warning: result of comparison of 8-bit unsigned value < 0 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:593:34: warning: result of comparison of 2-bit unsigned value > 3 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:608:32: warning: result of comparison of 15-bit unsigned value > 32767 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:614:17: warning: result of comparison of 6-bit signed value > 31 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:621:21: warning: result of comparison of 4-bit signed value < -8 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:623:21: warning: result of comparison of 4-bit signed value > 7 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:628:21: warning: result of comparison of 5-bit signed value < -16 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:629:21: warning: result of comparison of 5-bit signed value > 15 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:632:21: warning: result of comparison of 4-bit signed value > 7 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:633:21: warning: result of comparison of 4-bit signed value < -8 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:635:22: warning: result of comparison of 5-bit signed value < -16 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:648:15: warning: result of comparison of 3-bit signed value > 3 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:652:15: warning: result of comparison of 3-bit signed value < -4 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:656:15: warning: result of comparison of 2-bit unsigned value > 3 is always false [-Wtautological-value-range-compare]","clang/test/Sema/tautological-constant-compare.c:657:15: warning: result of comparison of 2-bit unsigned value < 0 is always false [-Wtautological-value-range-compare]"}
		}
	},
	["warn_tautological_constant_compare"]={
		[l]={Wb,"tautological-type-limit-compare","type-limits"},
		[k]="tautological-type-limit-compare",
		[b]={{nil,p,"warn_tautological_constant_compare"}},
		[c]={{nil,p,"result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4"}},
		[d]={{nil,p,{"result of comparison ",{kb,"B"}," C ",{"B",kb}," is always E"}}},
		[e]=j,
		[f]="result of comparison (?:(.*?)|(.*?)) (.*?) (?:(.*?)|(.*?)) is always (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-type\\-limit\\-compare[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values","[Sema] Diagnose tautological comparison with type\'s min/max values\n\nSummary:\nCurrently, clang only diagnoses completely out-of-range comparisons (e.g. `char` and constant `300`),\nand comparisons of unsigned and `0`. But gcc also does diagnose the comparisons with the\n`std::numeric_limits<>::max()` / `std::numeric_limits<>::min()` so to speak\n\nFinally Fixes https://bugs.llvm.org/show_bug.cgi?id=34147\nContinuation of https://reviews.llvm.org/D37565\n\nReviewers: rjmccall, rsmith, aaron.ballman\n\nReviewed By: rsmith\n\nSubscribers: rtrieu, jroelofs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D38101\n\nllvm-svn: 315614"},
		[h]={{y,13891,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  // FIXME: We use a somewhat different formatting for the in-range cases and\n  // cases involving boolean values for historical reasons. We should pick a\n  // consistent way of presenting these diagnostics.\n  if (!InRange || Other->isKnownToHaveBooleanValue()) {\n  // ...\n  } else {\n    // ...\n    unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}},
		[m]={
			["clang/test/SemaCXX/compare.cpp"]={"clang/test/SemaCXX/compare.cpp:249:11: warning: result of comparison \'short\' > 4294967295 is always false [-Wtautological-type-limit-compare]","clang/test/SemaCXX/compare.cpp:250:11: warning: result of comparison \'short\' <= 4294967295 is always true [-Wtautological-type-limit-compare]"}
		}
	},
	["warn_tautological_overlap_comparison"]={
		[l]={o,q,r,"tautological-compare","tautological-overlap-compare"},
		[k]="tautological-overlap-compare",
		[b]="warn_tautological_overlap_comparison",
		[c]="overlapping comparisons always evaluate to %select{false|true}0",
		[d]={{nil,nil,{"overlapping comparisons always evaluate to ",{"false","true"}}}},
		[e]=j,
		[f]="overlapping comparisons always evaluate to (?:false|true)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-overlap\\-compare[^\\]]*\\]",
		[a]=n,
		[i]={"f935b562b9a7",1396675021,"Add a new subgroup to -Wtautological-compare, -Wtautological-overlap-compare,","Add a new subgroup to -Wtautological-compare, -Wtautological-overlap-compare,\nwhich warns on compound conditionals that always evaluate to the same value.\nFor instance, (x > 5 && x < 3) will always be false since no value for x can\nsatisfy both conditions.\n\nThis patch also changes the CFG to use these tautological values for better\nbranch analysis.  The test for -Wunreachable-code shows how this change catches\nadditional dead code.\n\nPatch by Anders Rönnholm.\n\nllvm-svn: 205665"},
		[h]={{v,167,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  // ...\n  void compareAlwaysTrue(const BinaryOperator *B, bool isAlwaysTrue) override {\n    // ...\n    S.Diag(B->getExprLoc(), diag::warn_tautological_overlap_comparison) << DiagRange << isAlwaysTrue;"},{v,191,"/// Warn on logical operator errors in CFGBuilder\nclass LogicalErrorHandler : public CFGCallback {\n  // ...\n  static bool hasActiveDiagnostics(DiagnosticsEngine &Diags, SourceLocation Loc) { return !Diags.isIgnored(diag::warn_tautological_overlap_comparison, Loc) || !Diags.isIgnored(diag::warn_comparison_bitwise_or, Loc); }"}},
		[m]={
			["clang/test/Sema/warn-overlap.c"]={
				[1]="clang/test/Sema/warn-overlap.c:70:21: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[2]="clang/test/Sema/warn-overlap.c:69:21: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[3]="clang/test/Sema/warn-overlap.c:64:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[4]="clang/test/Sema/warn-overlap.c:63:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[5]="clang/test/Sema/warn-overlap.c:62:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[6]="clang/test/Sema/warn-overlap.c:61:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[7]="clang/test/Sema/warn-overlap.c:60:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[8]="clang/test/Sema/warn-overlap.c:59:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[9]="clang/test/Sema/warn-overlap.c:54:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[10]="clang/test/Sema/warn-overlap.c:52:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[11]="clang/test/Sema/warn-overlap.c:50:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[12]="clang/test/Sema/warn-overlap.c:49:14: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[13]="clang/test/Sema/warn-overlap.c:46:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[14]="clang/test/Sema/warn-overlap.c:45:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[15]="clang/test/Sema/warn-overlap.c:43:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[16]="clang/test/Sema/warn-overlap.c:42:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[17]="clang/test/Sema/warn-overlap.c:41:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[18]="clang/test/Sema/warn-overlap.c:40:13: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[19]="clang/test/Sema/warn-overlap.c:37:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[20]="clang/test/Sema/warn-overlap.c:36:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[21]="clang/test/Sema/warn-overlap.c:35:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[22]="clang/test/Sema/warn-overlap.c:34:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[23]="clang/test/Sema/warn-overlap.c:32:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[24]="clang/test/Sema/warn-overlap.c:31:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[25]="clang/test/Sema/warn-overlap.c:28:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[26]="clang/test/Sema/warn-overlap.c:27:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[27]="clang/test/Sema/warn-overlap.c:23:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[28]="clang/test/Sema/warn-overlap.c:22:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[29]="clang/test/Sema/warn-overlap.c:83:21: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[30]="clang/test/Sema/warn-overlap.c:82:21: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[31]="clang/test/Sema/warn-overlap.c:112:22: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[32]="clang/test/Sema/warn-overlap.c:110:14: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[33]="clang/test/Sema/warn-overlap.c:108:22: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[34]="clang/test/Sema/warn-overlap.c:106:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[35]="clang/test/Sema/warn-overlap.c:104:15: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[36]="clang/test/Sema/warn-overlap.c:102:13: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[37]="clang/test/Sema/warn-overlap.c:127:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[38]="clang/test/Sema/warn-overlap.c:124:18: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[39]="clang/test/Sema/warn-overlap.c:122:18: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[40]="clang/test/Sema/warn-overlap.c:119:17: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[41]="clang/test/Sema/warn-overlap.c:117:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[42]="clang/test/Sema/warn-overlap.c:142:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[43]="clang/test/Sema/warn-overlap.c:139:17: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[44]="clang/test/Sema/warn-overlap.c:137:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[45]="clang/test/Sema/warn-overlap.c:134:16: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]",
				[46]="clang/test/Sema/warn-overlap.c:132:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[47]="clang/test/Sema/warn-overlap.c:149:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[48]="clang/test/Sema/warn-overlap.c:147:16: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[49]="clang/test/Sema/warn-overlap.c:154:17: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[50]="clang/test/Sema/warn-overlap.c:173:19: warning: overlapping comparisons always evaluate to true [-Wtautological-overlap-compare]",
				[51]="clang/test/Sema/warn-overlap.c:171:18: warning: overlapping comparisons always evaluate to false [-Wtautological-overlap-compare]"
			}
		}
	},
	["warn_tcb_enforcement_violation"]={
		[l]={"tcb-enforcement"},
		[k]="tcb-enforcement",
		[b]={{nil,J,"warn_tcb_enforcement_violation"}},
		[c]={{nil,J,"calling %0 is a violation of trusted computing base \'%1\'"}},
		[d]={{nil,J,"calling A is a violation of trusted computing base \'B\'"}},
		[e]=j,
		[f]="calling (.*?) is a violation of trusted computing base \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wtcb\\-enforcement[^\\]]*\\]",
		[a]={{nil,J,E}},
		[i]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
		[h]={{y,19186,"/// \\brief Enforce the bounds of a TCB\n/// CheckTCBEnforcement - Enforces that every function in a named TCB only\n/// directly calls other functions in the same TCB as marked by the enforce_tcb\n/// and enforce_tcb_leaf attributes.\nvoid Sema::CheckTCBEnforcement(const SourceLocation CallExprLoc, const NamedDecl *Callee) {\n  // ...\n  // Go through the TCBs the caller is a part of and emit warnings if Caller\n  // is in a TCB that the Callee is not.\n  for (const auto *A : Caller->specific_attrs<EnforceTCBAttr>()) {\n    // ...\n    if (CalleeTCBs.count(CallerTCB) == 0) {\n      this->Diag(CallExprLoc, diag::warn_tcb_enforcement_violation) << Callee << CallerTCB;"}},
		[m]={
			["clang/test/Sema/attr-enforce-tcb.c"]={"clang/test/Sema/attr-enforce-tcb.c:18:5: warning: calling \'foo3\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:19:5: warning: calling \'foo4\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:22:5: warning: calling \'foo7\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:39:5: warning: calling \'foo1\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:40:5: warning: calling \'foo4\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:42:5: warning: calling \'foo7\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:42:5: warning: calling \'foo7\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:52:3: warning: calling \'foo1\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:52:3: warning: calling \'foo1\' is a violation of trusted computing base \'bar3\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:55:3: warning: calling \'foo3\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:55:3: warning: calling \'foo3\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:55:3: warning: calling \'foo3\' is a violation of trusted computing base \'bar3\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:59:3: warning: calling \'foo4\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:59:3: warning: calling \'foo4\' is a violation of trusted computing base \'bar3\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:62:3: warning: calling \'foo7\' is a violation of trusted computing base \'bar\' [-Wtcb-enforcement]","clang/test/Sema/attr-enforce-tcb.c:62:3: warning: calling \'foo7\' is a violation of trusted computing base \'bar2\' [-Wtcb-enforcement]"}
		}
	},
	["warn_template_arg_negative"]={
		[l]={rb,Nb},
		[k]=rb,
		[b]="warn_template_arg_negative",
		[c]="non-type template argument with value \'%0\' converted to \'%1\' for unsigned template parameter of type %2",
		[d]="non-type template argument with value \'A\' converted to \'B\' for unsigned template parameter of type C",
		[e]=j,
		[f]="non\\-type template argument with value \'(.*?)\' converted to \'(.*?)\' for unsigned template parameter of type (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]",
		[a]=Rb,
		[i]={"63eed63312c1",1269555664,"Warn when the conversion of an integral non-type template argument to","Warn when the conversion of an integral non-type template argument to\nthe type of its corresponding non-type template parameter changes the\nvalue. Previously, we were diagnosing this as an error, which was\nwrong. We give reasonably nice warnings like:\n\ntest/SemaTemplate/temp_arg_nontype.cpp:100:10: warning: non-type template\n      argument value \'256\' truncated to \'0\' for template parameter of type\n      \'unsigned char\'\nOverflow<256> *overflow3; // expected-warning{{non-type template ...\n         ^~~\ntest/SemaTemplate/temp_arg_nontype.cpp:96:24: note: template parameter is\n      declared here\ntemplate<unsigned char C> struct Overflow;\n                       ^\n\nllvm-svn: 99561"},
		[h]={{Sb,7566,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // C++ [temp.arg.nontype]p5:\n  //   The following conversions are performed on each expression used\n  //   as a non-type template-argument. If a non-type\n  //   template-argument cannot be converted to the type of the\n  //   corresponding template-parameter then the program is\n  //   ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // ...\n    if (ParamType->isBooleanType()) {\n    // ...\n    } else {\n      // ...\n      // Complain if an unsigned parameter received a negative value.\n      if (IntegerType->isUnsignedIntegerOrEnumerationType() && (OldValue.isSigned() && OldValue.isNegative())) {\n        Diag(Arg->getBeginLoc(), diag::warn_template_arg_negative) << toString(OldValue, 10) << toString(Value, 10) << Param->getType() << Arg->getSourceRange();"}},
		[m]={
			["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:105:12: warning: non-type template argument with value \'-10\' converted to \'4294967286\' for unsigned template parameter of type \'unsigned int\' [-Wconversion]"}
		}
	},
	["warn_template_arg_too_large"]={
		[l]={rb,Nb},
		[k]=rb,
		[b]="warn_template_arg_too_large",
		[c]="non-type template argument value \'%0\' truncated to \'%1\' for template parameter of type %2",
		[d]="non-type template argument value \'A\' truncated to \'B\' for template parameter of type C",
		[e]=j,
		[f]="non\\-type template argument value \'(.*?)\' truncated to \'(.*?)\' for template parameter of type (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wconversion[^\\]]*\\]",
		[a]=Rb,
		[i]={"63eed63312c1",1269555664,"Warn when the conversion of an integral non-type template argument to","Warn when the conversion of an integral non-type template argument to\nthe type of its corresponding non-type template parameter changes the\nvalue. Previously, we were diagnosing this as an error, which was\nwrong. We give reasonably nice warnings like:\n\ntest/SemaTemplate/temp_arg_nontype.cpp:100:10: warning: non-type template\n      argument value \'256\' truncated to \'0\' for template parameter of type\n      \'unsigned char\'\nOverflow<256> *overflow3; // expected-warning{{non-type template ...\n         ^~~\ntest/SemaTemplate/temp_arg_nontype.cpp:96:24: note: template parameter is\n      declared here\ntemplate<unsigned char C> struct Overflow;\n                       ^\n\nllvm-svn: 99561"},
		[h]={{Sb,7581,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // C++ [temp.arg.nontype]p5:\n  //   The following conversions are performed on each expression used\n  //   as a non-type template-argument. If a non-type\n  //   template-argument cannot be converted to the type of the\n  //   corresponding template-parameter then the program is\n  //   ill-formed.\n  if (ParamType->isIntegralOrEnumerationType()) {\n    // ...\n    if (ParamType->isBooleanType()) {\n    // ...\n    } else {\n      // ...\n      if (RequiredBits > AllowedBits) {\n        Diag(Arg->getBeginLoc(), diag::warn_template_arg_too_large) << toString(OldValue, 10) << toString(Value, 10) << Param->getType() << Arg->getSourceRange();"}},
		[m]={
			["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:100:10: warning: non-type template argument value \'256\' truncated to \'0\' for template parameter of type \'unsigned char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:111:16: warning: non-type template argument value \'-129\' truncated to \'127\' for template parameter of type \'signed char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:113:16: warning: non-type template argument value \'128\' truncated to \'-128\' for template parameter of type \'signed char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:114:16: warning: non-type template argument value \'128\' truncated to \'-128\' for template parameter of type \'signed char\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:207:34: warning: non-type template argument value \'9223372036854775807\' truncated to \'-1\' for template parameter of type \'int\' [-Wconversion]","clang/test/SemaTemplate/temp_arg_nontype.cpp:258:21: warning: non-type template argument value \'2147483648\' truncated to \'-2147483648\' for template parameter of type \'int\' [-Wconversion]"}
		}
	},
	["warn_template_export_unsupported"]={
		[b]="warn_template_export_unsupported",
		[c]="exported templates are unsupported",
		[d]="exported templates are unsupported",
		[e]=j,
		[f]="exported templates are unsupported",
		[g]=Q,
		[a]=n,
		[i]={"5c80a27ba264",1259175314,"Implement support for default template arguments of function templates.","Implement support for default template arguments of function templates.\n\nllvm-svn: 89874"},
		[h]={{Sb,1805,"/// ActOnTemplateParameterList - Builds a TemplateParameterList, optionally\n/// constrained by RequiresClause, that contains the template parameters in\n/// Params.\nTemplateParameterList *Sema::ActOnTemplateParameterList(unsigned Depth, SourceLocation ExportLoc, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params, SourceLocation RAngleLoc, Expr *RequiresClause) {\n  if (ExportLoc.isValid())\n    Diag(ExportLoc, diag::warn_template_export_unsupported);"}},
		[m]={
			["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:12:1: warning: exported templates are unsupported"}
		}
	},
	["warn_template_qualified_friend_ignored"]={
		[l]={"unsupported-friend"},
		[k]="unsupported-friend",
		[b]="warn_template_qualified_friend_ignored",
		[c]="dependent nested name specifier \'%0\' for friend template declaration is not supported; ignoring this friend declaration",
		[d]="dependent nested name specifier \'A\' for friend template declaration is not supported; ignoring this friend declaration",
		[e]=j,
		[f]="dependent nested name specifier \'(.*?)\' for friend template declaration is not supported; ignoring this friend declaration",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-friend[^\\]]*\\]",
		[a]=n,
		[i]={"cd556eb26580",1383937196,"Issue a diagnostic if we see a templated friend declaration that we do not","Issue a diagnostic if we see a templated friend declaration that we do not\nsupport.\n\nllvm-svn: 194273"},
		[h]={{Sb,1861,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (SS.isNotEmpty() && !SS.isInvalid()) {\n    // ...\n    if (!SemanticContext) {\n      // ...\n      Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}},
		[m]={
			["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:238:62: warning: dependent nested name specifier \'A<S>::\' for friend template declaration is not supported; ignoring this friend declaration [-Wunsupported-friend]"}
		}
	},
	["warn_template_qualified_friend_unsupported"]={
		[l]={"unsupported-friend"},
		[k]="unsupported-friend",
		[b]="warn_template_qualified_friend_unsupported",
		[c]="dependent nested name specifier \'%0\' for friend class declaration is not supported; turning off access control for %1",
		[d]="dependent nested name specifier \'A\' for friend class declaration is not supported; turning off access control for B",
		[e]=j,
		[f]="dependent nested name specifier \'(.*?)\' for friend class declaration is not supported; turning off access control for (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsupported\\-friend[^\\]]*\\]",
		[a]=n,
		[i]={"cd556eb26580",1383937196,"Issue a diagnostic if we see a templated friend declaration that we do not","Issue a diagnostic if we see a templated friend declaration that we do not\nsupport.\n\nllvm-svn: 194273"},
		[h]={{T,17351,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n  // ...\n  Diag(NameLoc, diag::warn_template_qualified_friend_unsupported) << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext);"},{T,17782,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if (ND->isInvalidDecl()) {\n  // ...\n  } else {\n    // ...\n    // Mark templated-scope function declarations as unsupported.\n    if (FD->getNumTemplateParameterLists() && SS.isValid()) {\n      Diag(FD->getLocation(), diag::warn_template_qualified_friend_unsupported) << SS.getScopeRep() << SS.getRange() << cast<CXXRecordDecl>(CurContext);"}},
		[m]={
			["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:39:44: warning: dependent nested name specifier \'B<S>::\' for friend class declaration is not supported; turning off access control for \'A\' [-Wunsupported-friend]","clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:77:43: warning: dependent nested name specifier \'A<T>::\' for friend class declaration is not supported; turning off access control for \'(unnamed struct at clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:51:1)\' [-Wunsupported-friend]"}
		}
	},
	["warn_template_spec_extra_headers"]={
		[b]="warn_template_spec_extra_headers",
		[c]="extraneous template parameter list in template specialization",
		[d]="extraneous template parameter list in template specialization",
		[e]=j,
		[f]="extraneous template parameter list in template specialization",
		[g]=Q,
		[a]=n,
		[i]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the","Tolerate extraneous \"template<>\" headers better, downgrading the\ncomplaint to a warning and providing a helpful node in the case where\nthe \"template<>\" header is redundant because the corresponding\ntemplate-id refers to an explicit specialization. C++0x might still\nchange this behavior, and existing practice is all over the place on\nthe number of \"template<>\" headers actually needed.\n\nllvm-svn: 89651"},
		[h]={{Sb,3580,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // ...\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    // ...\n    if (!SuppressDiagnostic)\n      Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}},
		[m]={
			["clang/test/SemaTemplate/temp_explicit.cpp"]={"clang/test/SemaTemplate/temp_explicit.cpp:131:1: warning: extraneous template parameter list in template specialization"}
		}
	},
	["warn_tentative_incomplete_array"]={
		[b]="warn_tentative_incomplete_array",
		[c]="tentative array definition assumed to have one element",
		[d]="tentative array definition assumed to have one element",
		[e]=j,
		[f]="tentative array definition assumed to have one element",
		[g]=Q,
		[a]=n,
		[i]={"c7ba5333782f",1239831327,"Add warning when a tentative array definition is assumed to have one element.","Add warning when a tentative array definition is assumed to have one element.\n - Also, fixed one to actually be one (instead of zero). :)\n\nllvm-svn: 69226"},
		[h]={{M,1308,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n    // ...\n    if (const IncompleteArrayType *ArrayT = Context.getAsIncompleteArrayType(VD->getType())) {\n      // ...\n      Diag(VD->getLocation(), diag::warn_tentative_incomplete_array);"}},
		[m]={
			["clang/test/Sema/extern-redecl.c"]={"clang/test/Sema/extern-redecl.c:4:12: warning: tentative array definition assumed to have one element","clang/test/Sema/extern-redecl.c:23:12: warning: tentative array definition assumed to have one element"}
		}
	},
	["warn_this_bool_conversion"]={
		[l]={"bool-conversion","bool-conversions",rb,Nb,"undefined-bool-conversion"},
		[k]="undefined-bool-conversion",
		[b]="warn_this_bool_conversion",
		[c]="\'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true",
		[d]="\'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true",
		[e]=j,
		[f]="\'this\' pointer cannot be null in well\\-defined C\\+\\+ code; pointer may be assumed to always convert to true",
		[g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-bool\\-conversion[^\\]]*\\]",
		[a]=Rb,
		[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings","Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings\nto detect underfined behavior involving pointers.\n\nllvm-svn: 210372"},
		[h]={{y,15459,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  // ...\n  if (isa<CXXThisExpr>(E)) {\n    unsigned DiagID = IsCompare ? diag::warn_this_null_compare : diag::warn_this_bool_conversion;"}},
		[m]={
			["clang/test/SemaCXX/warn-undefined-bool-conversion.cpp"]={"clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:19:9: warning: \'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:22:10: warning: \'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]","clang/test/SemaCXX/warn-undefined-bool-conversion.cpp:117:14: warning: \'this\' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion]"}
		}
	},
	["warn_this_null_compare"]={
		[l]={o,q,r,"tautological-compare","tautological-undefined-compare"},
		[k]="tautological-undefined-compare",
		[b]="warn_this_null_compare",
		[c]="\'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0",
		[d]={{nil,nil,{"\'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to ",{"true","false"}}}},
		[e]=j,
		[f]="\'this\' pointer cannot be null in well\\-defined C\\+\\+ code; comparison may be assumed to always evaluate to (?:true|false)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-undefined\\-compare[^\\]]*\\]",
		[a]=n,
		[i]={"f7432755d0c0",1402090766,"Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings","Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings\nto detect underfined behavior involving pointers.\n\nllvm-svn: 210372"},
		[h]={{y,15458,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  // ...\n  if (isa<CXXThisExpr>(E)) {\n    unsigned DiagID = IsCompare ? diag::warn_this_null_compare : diag::warn_this_bool_conversion;"}},
		[m]={
			["clang/test/SemaCXX/warn-tautological-undefined-compare.cpp"]={"clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:18:9: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:20:9: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:130:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:132:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:134:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to true [-Wtautological-undefined-compare]","clang/test/SemaCXX/warn-tautological-undefined-compare.cpp:136:14: warning: \'this\' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]"}
		}
	},
	["warn_thread_attribute_argument_not_lockable"]={
		[l]={X,bb},
		[k]=bb,
		[b]="warn_thread_attribute_argument_not_lockable",
		[c]="%0 attribute requires arguments whose type is annotated with \'capability\' attribute; type here is %1",
		[d]="A attribute requires arguments whose type is annotated with \'capability\' attribute; type here is B",
		[e]=j,
		[f]="(.*?) attribute requires arguments whose type is annotated with \'capability\' attribute; type here is (.*?)",
		[g]=wb,
		[a]=n,
		[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings","Thread safety analysis: split warnings into two groups: attribute warnings\nwhich are checked in the parser, and analysis warnings that require the\nfull analysis.  This allows attribute syntax to be checked independently\nof the full thread safety analysis.  Also introduces a new warning for the\ncase where a string is used as a lock expression; this allows the analysis\nto gracefully handle expressions that would otherwise cause a parse error.\n\nllvm-svn: 155129"},
		[h]={{x,679,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  // ...\n  for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n    // ...\n    // If the type does not have a capability, see if the components of the\n    // expression have capabilities. This allows for writing C code where the\n    // capability may be on the type, and the expression is a capability\n    // boolean logic expression. Eg) requires_capability(A || B && !C)\n    if (!typeHasCapability(S, ArgTy) && !isCapabilityExpr(S, ArgExp))\n      S.Diag(AL.getLoc(), diag::warn_thread_attribute_argument_not_lockable) << AL << ArgTy;"}},
		[m]={
			["clang/test/Sema/attr-capabilities.cpp"]={"clang/test/Sema/attr-capabilities.cpp:13:31: warning: \'assert_capability\' attribute requires arguments whose type is annotated with \'capability\' attribute; type here is \'NotACapability *\' [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.cpp:14:31: warning: \'assert_capability\' attribute requires arguments whose type is annotated with \'capability\' attribute; type here is \'bool\' [-Wthread-safety-attributes]"}
		}
	},
	["warn_thread_attribute_decl_not_lockable"]={
		[l]={X,bb},
		[k]=bb,
		[b]="warn_thread_attribute_decl_not_lockable",
		[c]={{nil,z,"%0 attribute can only be applied in a context annotated with \'capability\' attribute"},{s,nil,"%0 attribute can only be applied in a context annotated with \'capability(\"mutex\")\' attribute"}},
		[d]={{nil,z,"A attribute can only be applied in a context annotated with \'capability\' attribute"},{s,nil,"A attribute can only be applied in a context annotated with \'capability(\"mutex\")\' attribute"}},
		[e]=j,
		[f]="(.*?) attribute can only be applied in a context annotated with \'capability\' attribute",
		[g]=wb,
		[a]=n,
		[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings","Thread safety analysis: split warnings into two groups: attribute warnings\nwhich are checked in the parser, and analysis warnings that require the\nfull analysis.  This allows attribute syntax to be checked independently\nof the full thread safety analysis.  Also introduces a new warning for the\ncase where a string is used as a lock expression; this allows the analysis\nto gracefully handle expressions that would otherwise cause a parse error.\n\nllvm-svn: 155129"},
		[h]={{x,738,"static bool checkAcquireOrderAttrCommon(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args) {\n  // ...\n  if (!QT->isDependentType() && !typeHasCapability(S, QT)) {\n    S.Diag(AL.getLoc(), diag::warn_thread_attribute_decl_not_lockable) << AL;"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:498:31: warning: \'acquired_after\' attribute can only be applied in a context annotated with \'capability\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:561:31: warning: \'acquired_before\' attribute can only be applied in a context annotated with \'capability\' attribute [-Wthread-safety-attributes]"}
		}
	},
	["warn_thread_attribute_decl_not_pointer"]={
		[l]={X,bb},
		[k]=bb,
		[b]="warn_thread_attribute_decl_not_pointer",
		[c]="%0 only applies to pointer types; type here is %1",
		[d]="A only applies to pointer types; type here is B",
		[e]=j,
		[f]="(.*?) only applies to pointer types; type here is (.*?)",
		[g]=wb,
		[a]=n,
		[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings","Thread safety analysis: split warnings into two groups: attribute warnings\nwhich are checked in the parser, and analysis warnings that require the\nfull analysis.  This allows attribute syntax to be checked independently\nof the full thread safety analysis.  Also introduces a new warning for the\ncase where a string is used as a lock expression; this allows the analysis\nto gracefully handle expressions that would otherwise cause a parse error.\n\nllvm-svn: 155129"},
		[h]={{x,490,"/// Check if passed in Decl is a pointer type.\n/// Note that this function may produce an error message.\n/// \\return true if the Decl is a pointer type; false otherwise\nstatic bool threadSafetyCheckIsPointer(Sema &S, const Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(AL.getLoc(), diag::warn_thread_attribute_decl_not_pointer) << AL << QT;"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:184:20: warning: \'pt_guarded_var\' only applies to pointer types; type here is \'int\' [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:190:20: warning: \'pt_guarded_var\' only applies to pointer types; type here is \'int\' [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:389:18: warning: \'pt_guarded_by\' only applies to pointer types; type here is \'int\' [-Wthread-safety-attributes]"}
		}
	},
	["warn_thread_attribute_ignored"]={
		[l]={X,bb},
		[k]=bb,
		[b]="warn_thread_attribute_ignored",
		[c]="ignoring %0 attribute because its argument is invalid",
		[d]="ignoring A attribute because its argument is invalid",
		[e]=j,
		[f]="ignoring (.*?) attribute because its argument is invalid",
		[g]=wb,
		[a]=n,
		[i]={"8d11c797b2b6",1334851844,"Thread safety analysis: split warnings into two groups: attribute warnings","Thread safety analysis: split warnings into two groups: attribute warnings\nwhich are checked in the parser, and analysis warnings that require the\nfull analysis.  This allows attribute syntax to be checked independently\nof the full thread safety analysis.  Also introduces a new warning for the\ncase where a string is used as a lock expression; this allows the analysis\nto gracefully handle expressions that would otherwise cause a parse error.\n\nllvm-svn: 155129"},
		[h]={{x,637,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  // ...\n  for (unsigned Idx = Sidx; Idx < AL.getNumArgs(); ++Idx) {\n    // ...\n    if (const auto *StrLit = dyn_cast<StringLiteral>(ArgExp)) {\n      // ...\n      S.Diag(AL.getLoc(), diag::warn_thread_attribute_ignored) << AL;"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:312:18: warning: ignoring \'guarded_by\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:360:22: warning: ignoring \'guarded_by\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:431:25: warning: ignoring \'pt_guarded_by\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:492:24: warning: ignoring \'acquired_after\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:555:24: warning: ignoring \'acquired_before\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:621:26: warning: ignoring \'exclusive_lock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:694:26: warning: ignoring \'shared_lock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:780:26: warning: ignoring \'exclusive_trylock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:858:26: warning: ignoring \'shared_trylock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:925:25: warning: ignoring \'unlock_function\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1001:25: warning: ignoring \'lock_returned\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1068:25: warning: ignoring \'locks_excluded\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1135:26: warning: ignoring \'exclusive_locks_required\' attribute because its argument is invalid [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1203:26: warning: ignoring \'shared_locks_required\' attribute because its argument is invalid [-Wthread-safety-attributes]"}
		}
	},
	["warn_thread_attribute_not_on_capability_member"]={
		[l]={X,bb},
		[k]=bb,
		[b]={{nil,I,"warn_thread_attribute_not_on_capability_member"}},
		[c]={{nil,I,"%0 attribute without capability arguments refers to \'this\', but %1 isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute"}},
		[d]={{nil,I,"A attribute without capability arguments refers to \'this\', but B isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute"}},
		[e]=j,
		[f]="(.*?) attribute without capability arguments refers to \'this\', but (.*?) isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute",
		[g]=wb,
		[a]={{nil,I,n}},
		[i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments","Thread Safety Analysis: warnings for attributes without arguments\n\nSummary:\nWhen thread safety annotations are used without capability arguments,\nthey are assumed to apply to `this` instead. So we warn when either\n`this` doesn\'t exist, or the class is not a capability type.\n\nThis is based on earlier work by Josh Gao that was committed in r310403,\nbut reverted in r310698 because it didn\'t properly work in template\nclasses. See also D36237.\n\nThe solution is not to go via the QualType of `this`, which is then a\ntemplate type, hence the attributes are not known because it could be\nspecialized. Instead we look directly at the class in which we are\ncontained.\n\nAdditionally I grouped two of the warnings together. There are two\nissues here: the existence of `this`, which requires us to be a\nnon-static member function, and the appropriate annotation on the class\nwe are contained in. So we don\'t distinguish between not being in a\nclass and being static, because in both cases we don\'t have `this`.\n\nFixes PR38399.\n\nReviewers: aaron.ballman, delesley, jmgao, rtrieu\n\nReviewed By: delesley\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51901\n\nllvm-svn: 342605"},
		[h]={{x,609,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  if (Sidx == AL.getNumArgs()) {\n    // ...\n    if (MD && !MD->isStatic()) {\n      // ...\n      // FIXME -- need to check this again on template instantiation\n      if (!checkRecordDeclForAttr<CapabilityAttr>(RD) && !checkRecordDeclForAttr<ScopedLockableAttr>(RD))\n        S.Diag(AL.getLoc(), diag::warn_thread_attribute_not_on_capability_member) << AL << MD->getParent();"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-parsing.cpp"]={"clang/test/SemaCXX/warn-thread-safety-parsing.cpp:594:22: warning: \'exclusive_lock_function\' attribute without capability arguments refers to \'this\', but \'ElfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:670:22: warning: \'shared_lock_function\' attribute without capability arguments refers to \'this\', but \'SlfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:746:22: warning: \'exclusive_trylock_function\' attribute without capability arguments refers to \'this\', but \'EtfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:827:22: warning: \'shared_trylock_function\' attribute without capability arguments refers to \'this\', but \'StfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:898:22: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'UfFoo\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1274:25: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'NonSLTemplateClass\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1294:17: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'SLDerived2\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]","clang/test/SemaCXX/warn-thread-safety-parsing.cpp:1299:17: warning: \'unlock_function\' attribute without capability arguments refers to \'this\', but \'SLDerived3\' isn\'t annotated with \'capability\' or \'scoped_lockable\' attribute [-Wthread-safety-attributes]"}
		}
	},
	["warn_thread_attribute_not_on_non_static_member"]={
		[l]={X,bb},
		[k]=bb,
		[b]={{nil,I,"warn_thread_attribute_not_on_non_static_member"}},
		[c]={{nil,I,"%0 attribute without capability arguments can only be applied to non-static methods of a class"}},
		[d]={{nil,I,"A attribute without capability arguments can only be applied to non-static methods of a class"}},
		[e]=j,
		[f]="(.*?) attribute without capability arguments can only be applied to non\\-static methods of a class",
		[g]=wb,
		[a]={{nil,I,n}},
		[i]={"7ba1ab71ecf4",1537403967,"Thread Safety Analysis: warnings for attributes without arguments","Thread Safety Analysis: warnings for attributes without arguments\n\nSummary:\nWhen thread safety annotations are used without capability arguments,\nthey are assumed to apply to `this` instead. So we warn when either\n`this` doesn\'t exist, or the class is not a capability type.\n\nThis is based on earlier work by Josh Gao that was committed in r310403,\nbut reverted in r310698 because it didn\'t properly work in template\nclasses. See also D36237.\n\nThe solution is not to go via the QualType of `this`, which is then a\ntemplate type, hence the attributes are not known because it could be\nspecialized. Instead we look directly at the class in which we are\ncontained.\n\nAdditionally I grouped two of the warnings together. There are two\nissues here: the existence of `this`, which requires us to be a\nnon-static member function, and the appropriate annotation on the class\nwe are contained in. So we don\'t distinguish between not being in a\nclass and being static, because in both cases we don\'t have `this`.\n\nFixes PR38399.\n\nReviewers: aaron.ballman, delesley, jmgao, rtrieu\n\nReviewed By: delesley\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51901\n\nllvm-svn: 342605"},
		[h]={{x,612,"/// Checks that all attribute arguments, starting from Sidx, resolve to\n/// a capability object.\n/// \\param Sidx The attribute argument index to start checking with.\n/// \\param ParamIdxOk Whether an argument can be indexing into a function\n/// parameter list.\nstatic void checkAttrArgsAreCapabilityObjs(Sema &S, Decl *D, const ParsedAttr &AL, SmallVectorImpl<Expr *> &Args, unsigned Sidx = 0, bool ParamIdxOk = false) {\n  if (Sidx == AL.getNumArgs()) {\n    // ...\n    if (MD && !MD->isStatic()) {\n    // ...\n    } else {\n      S.Diag(AL.getLoc(), diag::warn_thread_attribute_not_on_non_static_member) << AL;"}},
		[m]={
			["clang/test/Sema/attr-capabilities.c"]={"clang/test/Sema/attr-capabilities.c:40:33: warning: \'assert_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:41:34: warning: \'assert_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:46:34: warning: \'acquire_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:47:34: warning: \'acquire_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:53:34: warning: \'release_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:54:34: warning: \'release_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:55:34: warning: \'release_generic_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:57:34: warning: \'try_acquire_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]","clang/test/Sema/attr-capabilities.c:58:34: warning: \'try_acquire_shared_capability\' attribute without capability arguments can only be applied to non-static methods of a class [-Wthread-safety-attributes]"}
		}
	},
	["warn_thread_safety_beta"]={
		[l]={"thread-safety-beta"},
		[k]="thread-safety-beta",
		[b]="warn_thread_safety_beta",
		[c]={{nil,C,"thread safety beta warning"},{J,nil,"Thread safety beta warning."}},
		[d]={{nil,C,"thread safety beta warning"},{J,nil,"Thread safety beta warning."}},
		[e]=j,
		[f]="thread safety beta warning",
		[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-beta[^\\]]*\\]",
		[a]=n,
		[i]={"8edae13dd069",1354665975,"Thread safety analysis: Add a new \"beta\" warning flag: -Wthread-safety-beta.","Thread safety analysis: Add a new \"beta\" warning flag: -Wthread-safety-beta.\nAs the analysis improves, it will continue to add new warnings that are\npotentially disruptive to existing users.  From now on, such warnings will\nfirst be introduced under the \"beta\" flag.  Such warnings are not turned on by\ndefault; their purpose is to allow users to test their code against future\nplanned changes, before those changes are actually made.  After a suitable\nmigration period, beta warnings will be folded into the standard\n-Wthread-safety.\n\nllvm-svn: 169338"},
		[h]={{v,2612,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  // Check for thread safety violations\n  if (P.enableThreadSafetyAnalysis) {\n    // ...\n    if (!Diags.isIgnored(diag::warn_thread_safety_beta, D->getBeginLoc()))"}}
	},
	["warn_thread_safety_verbose"]={
		[l]={"thread-safety-verbose"},
		[k]="thread-safety-verbose",
		[b]="warn_thread_safety_verbose",
		[c]={{nil,C,"thread safety verbose warning"},{J,nil,"Thread safety verbose warning."}},
		[d]={{nil,C,"thread safety verbose warning"},{J,nil,"Thread safety verbose warning."}},
		[e]=j,
		[f]="thread safety verbose warning",
		[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-verbose[^\\]]*\\]",
		[a]=n,
		[i]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf...","Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpful when compiling statistics on thread safety warnings.\n\nllvm-svn: 215677"},
		[h]={{v,2614,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  // Check for thread safety violations\n  if (P.enableThreadSafetyAnalysis) {\n    // ...\n    if (!Diags.isIgnored(diag::warn_thread_safety_verbose, D->getBeginLoc()))"}}
	},
	["warn_throw_in_noexcept_func"]={
		[l]={"exceptions"},
		[k]="exceptions",
		[b]={{nil,w,"warn_throw_in_noexcept_func"}},
		[c]={{nil,w,"%0 has a non-throwing exception specification but can still throw"}},
		[d]={{nil,w,"A has a non-throwing exception specification but can still throw"}},
		[e]=j,
		[f]="(.*?) has a non\\-throwing exception specification but can still throw",
		[g]=" \\[(?:\\-Werror,)?\\-Wexceptions[^\\]]*\\]",
		[a]={{nil,w,n}},
		[i]={"89fe9c269a22",1498249339,"Emit warning when throw exception in destruct or dealloc functions which has a ","Emit warning when throw exception in destruct or dealloc functions which has a \n(possible implicit) noexcept specifier\n\nThrowing in the destructor is not good (C++11 change try to not allow see below).\n But in reality, those codes are exist.\nC++11 [class.dtor]p3:\n\nA declaration of a destructor that does not have an exception-specification is \nimplicitly considered to have the same exception specification as an implicit \ndeclaration.\n\nWith this change, the application worked before may now run into runtime \ntermination. My goal here is to emit a warning to provide only possible info to \nwhere the code may need to be changed.\n\nFirst there is no way, in compile time to identify the “throw” really throw out \nof the function. Things like the call which throw out… To keep this simple, \nwhen “throw” is seen, checking its enclosing function(only destructor and \ndealloc functions) with noexcept(true) specifier emit warning.\n\nHere is implementation detail:\nA new member function CheckCXXThrowInNonThrowingFunc is added for class Sema \nin Sema.h. It is used in the call to both BuildCXXThrow and \nTransformCXXThrowExpr.\n\nThe function basic check if the enclosing function with non-throwing noexcept \nspecifer, if so emit warning for it.\n\nThe example of warning message like:\nk1.cpp:18:3: warning: \'\'~dependent_warn\'\' has a (possible implicit) non-throwing\n\n    noexcept specifier. Throwing exception may cause termination.\n        [-Wthrow-in-dtor]\n        throw 1;\n        ^\n\n        k1.cpp:43:30: note: in instantiation of member function\n\n        \'dependent_warn<noexcept_fun>::~dependent_warn\' requested here\n\n        dependent_warn<noexcept_fun> f; // cause warning\n\nDifferential Revision: https://reviews.llvm.org/D33333\n\nllvm-svn: 306149"},
		[h]={{v,358,"static void EmitDiagForCXXThrowInNonThrowingFunc(Sema &S, SourceLocation OpLoc, const FunctionDecl *FD) {\n  if (!S.getSourceManager().isInSystemHeader(OpLoc) && FD->getTypeSourceInfo()) {\n    S.Diag(OpLoc, diag::warn_throw_in_noexcept_func) << FD;"},{v,2688,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_throw_in_noexcept_func, D->getBeginLoc()))"}},
		[m]={
			["clang/test/CXX/except/except.spec/p11.cpp"]={"clang/test/CXX/except/except.spec/p11.cpp:5:3: warning: \'f\' has a non-throwing exception specification but can still throw [-Wexceptions]","clang/test/CXX/except/except.spec/p11.cpp:8:3: warning: \'g\' has a non-throwing exception specification but can still throw [-Wexceptions]"}
		}
	},
	["warn_throw_underaligned_obj"]={
		[l]={"underaligned-exception-object"},
		[k]="underaligned-exception-object",
		[b]={{nil,S,"warn_throw_underaligned_obj"}},
		[c]={{nil,S,"underaligned exception object thrown"}},
		[d]={{nil,S,"underaligned exception object thrown"}},
		[e]=j,
		[f]="underaligned exception object thrown",
		[g]=" \\[(?:\\-Werror,)?\\-Wunderaligned\\-exception\\-object[^\\]]*\\]",
		[a]={{nil,S,n}},
		[i]={"c39a243da651",1557454597,"Assume `__cxa_allocate_exception` returns an under-aligned memory on","Assume `__cxa_allocate_exception` returns an under-aligned memory on\nDarwin if the version of libc++abi isn\'t new enough to include the fix\nin r319123\n\nThis patch resurrects r264998, which was committed to work around a bug\nin libc++abi that was causing _cxa_allocate_exception to return a memory\nthat wasn\'t double-word aligned.\n\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160328/154332.html\n\nIn addition, this patch makes clang issue a warning if the type of the\nthrown object requires an alignment that is larger than the minimum\nguaranteed by the target C++ runtime.\n\nrdar://problem/49864414\n\nDifferential Revision: https://reviews.llvm.org/D61667\n\nllvm-svn: 360404"},
		[h]={{yb,1091,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  // Under the Itanium C++ ABI, memory for the exception object is allocated by\n  // the runtime with no ability for the compiler to request additional\n  // alignment. Warn if the exception type requires alignment beyond the minimum\n  // guaranteed by the target C++ runtime.\n  if (Context.getTargetInfo().getCXXABI().isItaniumFamily()) {\n    // ...\n    if (ExnObjAlign < TypeAlign) {\n      Diag(ThrowLoc, diag::warn_throw_underaligned_obj);"}},
		[m]={
			["clang/test/SemaCXX/warn-overaligned-type-thrown.cpp"]={"clang/test/SemaCXX/warn-overaligned-type-thrown.cpp:53:3: warning: underaligned exception object thrown [-Wunderaligned-exception-object]"}
		}
	},
	["warn_transparent_union_attribute_field_size_align"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_transparent_union_attribute_field_size_align",
		[c]="%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored",
		[d]={{nil,nil,{{"alignment","size"}," of field B (C bits) does not match the ",{"alignment","size"}," of the first field in transparent union; transparent_union attribute ignored"}}},
		[e]=j,
		[f]="(?:alignment|size) of field (.*?) \\((.*?) bits\\) does not match the (?:alignment|size) of the first field in transparent union; transparent_union attribute ignored",
		[g]=V,
		[a]=n,
		[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely","Implement semantic analysis for transparent unions. This is largely\nbased on a patch from Anders Johnsen. CodeGen support is incomplete,\nin that we do not properly coerce to the first field\'s type.\n\nllvm-svn: 70419"},
		[h]={{x,4266,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (; Field != FieldEnd; ++Field) {\n    // ...\n    // FIXME: this isn\'t fully correct; we also need to test whether the\n    // members of the union would all have the same calling convention as the\n    // first member of the union. Checking just the size and alignment isn\'t\n    // sufficient (consider structs passed on the stack instead of in registers\n    // as an example).\n    if (S.Context.getTypeSize(FieldType) != FirstSize || S.Context.getTypeAlign(FieldType) > FirstAlign) {\n      // ...\n      S.Diag(Field->getLocation(), diag::warn_transparent_union_attribute_field_size_align) << isSize << *Field << FieldBits;"}},
		[m]={
			["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:83:19: warning: alignment of field \'s8\' (64 bits) does not match the alignment of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:88:19: warning: alignment of field \'s8\' (64 bits) does not match the alignment of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:93:7: warning: size of field \'i\' (32 bits) does not match the size of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:98:7: warning: size of field \'i\' (32 bits) does not match the size of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:127:3: warning: alignment of field \'\' (64 bits) does not match the alignment of the first field in transparent union; transparent_union attribute ignored [-Wignored-attributes]"}
		}
	},
	["warn_transparent_union_attribute_floating"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_transparent_union_attribute_floating",
		[c]="first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored",
		[d]={{nil,nil,{"first field of a transparent union cannot have ",{"floating point","vector"}," type B; transparent_union attribute ignored"}}},
		[e]=j,
		[f]="first field of a transparent union cannot have (?:floating point|vector) type (.*?); transparent_union attribute ignored",
		[g]=V,
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{x,4241,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (FirstType->hasFloatingRepresentation() || FirstType->isVectorType()) {\n    S.Diag(FirstField->getLocation(), diag::warn_transparent_union_attribute_floating) << FirstType->isVectorType() << FirstType;"}},
		[m]={
			["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:102:9: warning: first field of a transparent union cannot have floating point type \'float\'; transparent_union attribute ignored [-Wignored-attributes]","clang/test/Sema/transparent-union.c:109:8: warning: first field of a transparent union cannot have vector type \'int4\' (vector of 4 \'int\' values); transparent_union attribute ignored [-Wignored-attributes]"}
		}
	},
	["warn_transparent_union_attribute_not_definition"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_transparent_union_attribute_not_definition",
		[c]="transparent_union attribute can only be applied to a union definition; attribute ignored",
		[d]="transparent_union attribute can only be applied to a union definition; attribute ignored",
		[e]=j,
		[f]="transparent_union attribute can only be applied to a union definition; attribute ignored",
		[g]=V,
		[a]=n,
		[i]={"0cfbdab0cf8a",1241043376,"Implement semantic analysis for transparent unions. This is largely","Implement semantic analysis for transparent unions. This is largely\nbased on a patch from Anders Johnsen. CodeGen support is incomplete,\nin that we do not properly coerce to the first field\'s type.\n\nllvm-svn: 70419"},
		[h]={{x,4226,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!RD->isCompleteDefinition()) {\n    if (!RD->isBeingDefined())\n      S.Diag(AL.getLoc(), diag::warn_transparent_union_attribute_not_definition);"}}
	},
	["warn_transparent_union_attribute_zero_fields"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_transparent_union_attribute_zero_fields",
		[c]="transparent union definition must contain at least one field; transparent_union attribute ignored",
		[d]="transparent union definition must contain at least one field; transparent_union attribute ignored",
		[e]=j,
		[f]="transparent union definition must contain at least one field; transparent_union attribute ignored",
		[g]=V,
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{x,4233,"static void handleTransparentUnionAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Field == FieldEnd) {\n    S.Diag(AL.getLoc(), diag::warn_transparent_union_attribute_zero_fields);"}},
		[m]={
			["clang/test/Sema/transparent-union.c"]={"clang/test/Sema/transparent-union.c:105:38: warning: transparent union definition must contain at least one field; transparent_union attribute ignored [-Wignored-attributes]"}
		}
	},
	["warn_type_attribute_deprecated_on_decl"]={
		[l]={"deprecated","deprecated-attributes"},
		[k]="deprecated-attributes",
		[b]={{nil,D,"warn_type_attribute_deprecated_on_decl"}},
		[c]={{nil,D,"applying attribute %0 to a declaration is deprecated; apply it to the type instead"}},
		[d]={{nil,D,"applying attribute A to a declaration is deprecated; apply it to the type instead"}},
		[e]=j,
		[f]="applying attribute (.*?) to a declaration is deprecated; apply it to the type instead",
		[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]",
		[a]={{nil,D,"Deprecations"}},
		[i]={eb,1625925174,fb,ob},
		[h]={{x,8783,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  default:\n    // ...\n    if (AL.isTypeAttr()) {\n      // ...\n      // According to the C and C++ standards, we should never see a\n      // [[]] type attribute on a declaration. However, we have in the past\n      // allowed some type attributes to \"slide\" to the `DeclSpec`, so we need\n      // to continue to support this legacy behavior. We only do this, however,\n      // if\n      // - we actually have a `DeclSpec`, i.e. if we\'re looking at a\n      //   `DeclaratorDecl`, or\n      // - we are looking at an alias-declaration, where historically we have\n      //   allowed type attributes after the identifier to slide to the type.\n      if (AL.slidesFromDeclToDeclSpecLegacyBehavior() && isa<DeclaratorDecl, TypeAliasDecl>(D)) {\n        // Suggest moving the attribute to the type instead, but only for our\n        // own vendor attributes; moving other vendors\' attributes might hurt\n        // portability.\n        if (AL.isClangScope()) {\n          S.Diag(AL.getLoc(), diag::warn_type_attribute_deprecated_on_decl) << AL << D->getLocation();"},{U,1837,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // Apply any type attributes from the decl spec.  This may cause the\n  // list of type attributes to be temporarily saved while the type\n  // attributes are pushed around.\n  // pipe attributes will be handled later ( at GetFullTypeForDeclarator )\n  if (!DS.isTypeSpecPipe()) {\n    // ...\n    for (ParsedAttr &AL : declarator.getDeclarationAttributes()) {\n      if (AL.slidesFromDeclToDeclSpecLegacyBehavior()) {\n        // ...\n        // For standard syntax attributes, which would normally appertain to the\n        // declaration here, suggest moving them to the type instead. But only\n        // do this for our own vendor attributes; moving other vendors\'\n        // attributes might hurt portability.\n        // There\'s one special case that we need to deal with here: The\n        // `MatrixType` attribute may only be used in a typedef declaration. If\n        // it\'s being used anywhere else, don\'t output the warning as\n        // ProcessDeclAttributes() will output an error anyway.\n        if (AL.isStandardAttributeSyntax() && AL.isClangScope() && !(AL.getKind() == ParsedAttr::AT_MatrixType && DS.getStorageClassSpec() != DeclSpec::SCS_typedef)) {\n          S.Diag(AL.getLoc(), diag::warn_type_attribute_deprecated_on_decl) << AL;"}},
		[m]={
			["clang/test/SemaObjC/attr-objc-gc.m"]={"clang/test/SemaObjC/attr-objc-gc.m:22:3: warning: applying attribute \'objc_gc\' to a declaration is deprecated; apply it to the type instead [-Wdeprecated-attributes]","clang/test/SemaObjC/attr-objc-gc.m:23:15: warning: applying attribute \'objc_gc\' to a declaration is deprecated; apply it to the type instead [-Wdeprecated-attributes]"}
		}
	},
	["warn_type_attribute_wrong_type"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_type_attribute_wrong_type",
		[c]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
		[d]={{nil,nil,{"\'A\' only applies to ",{nb,"pointer","Objective-C object or block pointer"}," types; type here is C"}}},
		[e]=j,
		[f]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
		[g]=V,
		[a]=n,
		[i]={"db6d85ef9272",1374260024,"Replace some existing type attribute diagnostics with a","Replace some existing type attribute diagnostics with a\nsingle diagnostic that selects.  No functional changes intended.\n\nllvm-svn: 186708"},
		[h]={{U,109,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n  // ...\n  S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"},{U,7004,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (NonObjCPointer) {\n    // ...\n    S.Diag(AttrLoc, diag::warn_type_attribute_wrong_type) << name << TDS_ObjCObjOrBlock << type;"}},
		[m]={
			["clang/test/Sema/stdcall-fastcall-x64.c"]={"clang/test/Sema/stdcall-fastcall-x64.c:4:20: warning: \'stdcall\' only applies to function types; type here is \'int\' [-Wignored-attributes]","clang/test/Sema/stdcall-fastcall-x64.c:5:20: warning: \'fastcall\' only applies to function types; type here is \'int\' [-Wignored-attributes]"}
		}
	},
	["warn_type_safety_null_pointer_required"]={
		[l]={Ib},
		[k]=Ib,
		[b]="warn_type_safety_null_pointer_required",
		[c]="specified %0 type tag requires a null pointer",
		[d]="specified A type tag requires a null pointer",
		[e]=j,
		[f]="specified (.*?) type tag requires a null pointer",
		[g]=" \\[(?:\\-Werror,)?\\-Wtype\\-safety[^\\]]*\\]",
		[a]=n,
		[i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n  buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
		[h]={{y,18427,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  // ...\n  if (TypeInfo.MustBeNull) {\n    // Type tag with matching void type requires a null pointer.\n    if (!ArgumentExpr->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNotNull)) {\n      Diag(ArgumentExpr->getExprLoc(), diag::warn_type_safety_null_pointer_required) << ArgumentKind->getName() << ArgumentExpr->getSourceRange() << TypeTagExpr->getSourceRange();"}},
		[m]={
			["clang/test/Sema/warn-type-safety-mpi-hdf5.c"]={"clang/test/Sema/warn-type-safety-mpi-hdf5.c:191:14: warning: specified mpi type tag requires a null pointer [-Wtype-safety]"}
		}
	},
	["warn_type_safety_type_mismatch"]={
		[l]={Ib},
		[k]=Ib,
		[b]="warn_type_safety_type_mismatch",
		[c]="argument type %0 doesn\'t match specified %1 type tag %select{that requires %3|}2",
		[d]={{nil,nil,{"argument type A doesn\'t match specified B type tag ",{"that requires D",F}}}},
		[e]=j,
		[f]="argument type (.*?) doesn\'t match specified (.*?) type tag (?:that requires (.*?)|)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtype\\-safety[^\\]]*\\]",
		[a]=n,
		[i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n  buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
		[h]={{y,18462,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  // ...\n  if (mismatch)\n    Diag(ArgumentExpr->getExprLoc(), diag::warn_type_safety_type_mismatch) << ArgumentType << ArgumentKind << TypeInfo.LayoutCompatible << RequiredType << ArgumentExpr->getSourceRange() << TypeTagExpr->getSourceRange();"}},
		[m]={
			["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:54:15: warning: argument type \'int *\' doesn\'t match specified \'mpi\' type tag that requires \'float *\' [-Wtype-safety]","clang/test/Sema/warn-type-safety.cpp:60:15: warning: argument type \'int *\' doesn\'t match specified \'mpi\' type tag that requires \'float *\' [-Wtype-safety]"}
		}
	},
	["warn_type_tag_for_datatype_wrong_kind"]={
		[l]={Ib},
		[k]=Ib,
		[b]="warn_type_tag_for_datatype_wrong_kind",
		[c]="this type tag was not designed to be used with this function",
		[d]="this type tag was not designed to be used with this function",
		[e]=j,
		[f]="this type tag was not designed to be used with this function",
		[g]=" \\[(?:\\-Werror,)?\\-Wtype\\-safety[^\\]]*\\]",
		[a]=n,
		[i]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n  buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
		[h]={{y,18396,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  // ...\n  if (!GetMatchingCType(ArgumentKind, TypeTagExpr, Context, TypeTagForDatatypeMagicValues.get(), FoundWrongKind, TypeInfo, isConstantEvaluated())) {\n    if (FoundWrongKind)\n      Diag(TypeTagExpr->getExprLoc(), diag::warn_type_tag_for_datatype_wrong_kind) << TypeTagExpr->getSourceRange();"}},
		[m]={
			["clang/test/Sema/warn-type-safety.c"]={"clang/test/Sema/warn-type-safety.c:82:15: warning: this type tag was not designed to be used with this function [-Wtype-safety]","clang/test/Sema/warn-type-safety.c:84:15: warning: this type tag was not designed to be used with this function [-Wtype-safety]"}
		}
	},
	["warn_typecheck_convert_incompatible_function_pointer_strict"]={
		[l]={"incompatible-function-pointer-types-strict"},
		[k]="incompatible-function-pointer-types-strict",
		[b]={{nil,B,"warn_typecheck_convert_incompatible_function_pointer_strict"}},
		[c]={{nil,B,"incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
		[d]={{nil,B,{"incompatible function pointer types ",{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}},{F,"; dereference with *","; take the address with &","; remove *","; remove &"}}}},
		[e]=j,
		[f]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
		[g]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-function\\-pointer\\-types\\-strict[^\\]]*\\]",
		[a]={{nil,B,n}},
		[i]={eb,1625925174,fb,ob},
		[h]={{A,10068,"// checkPointerTypesForAssignment - This is a very tricky routine (despite\n// being closely modeled after the C99 spec:-). The odd characteristic of this\n// routine is it effectively iqnores the qualifiers on the top level pointee.\n// This circumvents the usual type rules specified in 6.2.7p1 & 6.7.5.[1-3].\n// FIXME: add a couple examples in this comment.\nstatic Sema::AssignConvertType checkPointerTypesForAssignment(Sema &S, QualType LHSType, QualType RHSType, SourceLocation Loc) {\n  // ...\n  if (!S.Diags.isIgnored(diag::warn_typecheck_convert_incompatible_function_pointer_strict, Loc) && RHSType->isFunctionPointerType() && LHSType->isFunctionPointerType() && !S.IsFunctionConversion(RHSType, LHSType, RHSType))"},{A,17551,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleFunctionPointerStrict:\n    DiagKind = diag::warn_typecheck_convert_incompatible_function_pointer_strict;"}},
		[m]={
			["clang/test/Sema/incompatible-function-pointer-types-strict.c"]={"clang/test/Sema/incompatible-function-pointer-types-strict.c:17:6: error: incompatible function pointer types passing \'int (*)(void)\' to parameter of type \'fn_a_t\' (aka \'enum E (*)(void)\') [-Werror,-Wincompatible-function-pointer-types-strict]"}
		}
	},
	["warn_typecheck_function_qualifiers_ignored"]={
		[l]={F,o,Cb,Ub},
		[k]=Ub,
		[b]="warn_typecheck_function_qualifiers_ignored",
		[c]="\'%0\' qualifier on function type %1 has no effect",
		[d]="\'A\' qualifier on function type B has no effect",
		[e]=j,
		[f]="\'(.*?)\' qualifier on function type (.*?) has no effect",
		[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-qualifiers[^\\]]*\\]",
		[a]=n,
		[i]={"a462b4c9acd1",1431630642,"DR295: cv-qualifiers on function types are ignored in C++.","DR295: cv-qualifiers on function types are ignored in C++.\n\nllvm-svn: 237383"},
		[h]={{U,1867,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // Apply const/volatile/restrict qualifiers to T.\n  if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // Warn about CV qualifiers on function types.\n    // C99 6.7.3p8:\n    //   If the specification of a function type includes any type qualifiers,\n    //   the behavior is undefined.\n    // C++11 [dcl.fct]p7:\n    //   The effect of a cv-qualifier-seq in a function declarator is not the\n    //   same as adding cv-qualification on top of the function type. In the\n    //   latter case, the cv-qualifiers are ignored.\n    if (Result->isFunctionType()) {\n      diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, DeclSpec::TQ_const | DeclSpec::TQ_volatile, S.getLangOpts().CPlusPlus ? diag::warn_typecheck_function_qualifiers_ignored : diag::warn_typecheck_function_qualifiers_unspecified);"}},
		[m]={
			["clang/test/CXX/drs/dr2xx.cpp"]={"clang/test/CXX/drs/dr2xx.cpp:1094:3: warning: \'const\' qualifier on function type \'f\' (aka \'int ()\') has no effect [-Wignored-qualifiers]","clang/test/CXX/drs/dr2xx.cpp:1102:11: warning: \'const\' qualifier on function type \'U\' (aka \'int ()\') has no effect [-Wignored-qualifiers]","clang/test/CXX/drs/dr2xx.cpp:1105:11: warning: \'volatile\' qualifier on function type \'U\' (aka \'int ()\') has no effect [-Wignored-qualifiers]"}
		}
	},
	["warn_typecheck_function_qualifiers_unspecified"]={
		[b]="warn_typecheck_function_qualifiers_unspecified",
		[c]="\'%0\' qualifier on function type %1 has unspecified behavior",
		[d]="\'A\' qualifier on function type B has unspecified behavior",
		[e]=j,
		[f]="\'(.*?)\' qualifier on function type (.*?) has unspecified behavior",
		[g]=Q,
		[a]=n,
		[i]={"a462b4c9acd1",1431630642,"DR295: cv-qualifiers on function types are ignored in C++.","DR295: cv-qualifiers on function types are ignored in C++.\n\nllvm-svn: 237383"},
		[h]={{U,1868,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // Apply const/volatile/restrict qualifiers to T.\n  if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // Warn about CV qualifiers on function types.\n    // C99 6.7.3p8:\n    //   If the specification of a function type includes any type qualifiers,\n    //   the behavior is undefined.\n    // C++11 [dcl.fct]p7:\n    //   The effect of a cv-qualifier-seq in a function declarator is not the\n    //   same as adding cv-qualification on top of the function type. In the\n    //   latter case, the cv-qualifiers are ignored.\n    if (Result->isFunctionType()) {\n      diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, DeclSpec::TQ_const | DeclSpec::TQ_volatile, S.getLangOpts().CPlusPlus ? diag::warn_typecheck_function_qualifiers_ignored : diag::warn_typecheck_function_qualifiers_unspecified);"}},
		[m]={
			["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:21:1: warning: \'const\' qualifier on function type \'f\' (aka \'int (void)\') has unspecified behavior"}
		}
	},
	["warn_typecheck_ordered_comparison_of_function_pointers"]={
		[l]={"ordered-compare-function-pointers"},
		[k]="ordered-compare-function-pointers",
		[b]={{nil,C,"warn_typecheck_ordered_comparison_of_function_pointers"}},
		[c]={{nil,C,"ordered comparison of function pointers (%0 and %1)"}},
		[d]={{nil,C,"ordered comparison of function pointers (A and B)"}},
		[e]=j,
		[f]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
		[g]=" \\[(?:\\-Werror,)?\\-Wordered\\-compare\\-function\\-pointers[^\\]]*\\]",
		[a]={{nil,C,n}},
		[i]={Lb,1615397021,Kb,Mb},
		[h]={{A,13040,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n    // ...\n    auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}},
		[m]={
			["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:11:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:12:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:13:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:14:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\') [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:19:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:21:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:23:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]","clang/test/SemaCXX/compare-function-pointer.cpp:25:14: warning: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\')) [-Wordered-compare-function-pointers]"}
		}
	},
	["warn_typecheck_reference_qualifiers"]={
		[l]={F,o,Cb,Ub,"ignored-reference-qualifiers"},
		[k]="ignored-reference-qualifiers",
		[b]="warn_typecheck_reference_qualifiers",
		[c]="\'%0\' qualifier on reference type %1 has no effect",
		[d]="\'A\' qualifier on reference type B has no effect",
		[e]=j,
		[f]="\'(.*?)\' qualifier on reference type (.*?) has no effect",
		[g]=" \\[(?:\\-Werror,)?\\-Wignored\\-reference\\-qualifiers[^\\]]*\\]",
		[a]=n,
		[i]={"40259443073b",1392768807,"PR13110: Add a -Wignored-qualifiers warning when ignoring a const, volatile, or","PR13110: Add a -Wignored-qualifiers warning when ignoring a const, volatile, or\n_Atomic qualifier applied to a reference type.\n\nllvm-svn: 201620"},
		[h]={{U,1885,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // Apply const/volatile/restrict qualifiers to T.\n  if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // ...\n    // C++11 [dcl.ref]p1:\n    //   Cv-qualified references are ill-formed except when the\n    //   cv-qualifiers are introduced through the use of a typedef-name\n    //   or decltype-specifier, in which case the cv-qualifiers are ignored.\n    //\n    // There don\'t appear to be any other contexts in which a cv-qualified\n    // reference type could be formed, so the \'ill-formed\' clause here appears\n    // to never happen.\n    if (TypeQuals && Result->isReferenceType()) {\n      diagnoseAndRemoveTypeQualifiers(S, DS, TypeQuals, Result, DeclSpec::TQ_const | DeclSpec::TQ_volatile | DeclSpec::TQ_atomic, diag::warn_typecheck_reference_qualifiers);"}},
		[m]={
			["clang/test/Parser/cxx0x-rvalue-reference.cpp"]={"clang/test/Parser/cxx0x-rvalue-reference.cpp:6:9: warning: \'const\' qualifier on reference type \'R\' (aka \'int &&\') has no effect [-Wignored-reference-qualifiers]"}
		}
	},
	["warn_typecheck_vector_element_sizes_not_equal"]={
		[l]={"vec-elem-size"},
		[k]="vec-elem-size",
		[b]="warn_typecheck_vector_element_sizes_not_equal",
		[c]="vector operands do not have the same elements sizes (%0 and %1)",
		[d]="vector operands do not have the same elements sizes (A and B)",
		[e]=Jb,
		[f]="vector operands do not have the same elements sizes \\((.*?) and (.*?)\\)",
		[g]=" \\[[^\\]]*\\-Wvec\\-elem\\-size[^\\]]*\\]",
		[a]=n,
		[i]={"9941ca8af6b4",1476878770,"[Sema] Gcc compatibility of vector shift","[Sema] Gcc compatibility of vector shift\n\nGcc prints error if elements of left and right parts of a shift have different\nsizes. This patch is provided the GCC compatibility.\n\nPatch by Vladimir Yakovlev.\n\nDifferential Revision: https://reviews.llvm.org/D24669\n\nllvm-svn: 284579"},
		[h]={{A,12192,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if (!LHSVecTy) {\n  // ...\n  } else if (RHSVecTy) {\n    // ...\n    if (!S.LangOpts.OpenCL && !S.LangOpts.ZVector) {\n      // ...\n      if (LHSBT != RHSBT && S.Context.getTypeSize(LHSBT) != S.Context.getTypeSize(RHSBT)) {\n        S.Diag(Loc, diag::warn_typecheck_vector_element_sizes_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[m]={
			["clang/test/CodeGen/vecshift.c"]={"clang/test/CodeGen/vecshift.c:113:13: warning: vector operands do not have the same elements sizes (\'vector_int8\' (vector of 8 \'int\' values) and \'vector_uchar8\' (vector of 8 \'unsigned char\' values)) [-Wvec-elem-size]","clang/test/CodeGen/vecshift.c:118:15: warning: vector operands do not have the same elements sizes (\'vector_uchar8\' (vector of 8 \'unsigned char\' values) and \'vector_int8\' (vector of 8 \'int\' values)) [-Wvec-elem-size]","clang/test/CodeGen/vecshift.c:123:15: warning: vector operands do not have the same elements sizes (\'vector_ushort8\' (vector of 8 \'unsigned short\' values) and \'vector_uint8\' (vector of 8 \'unsigned int\' values)) [-Wvec-elem-size]","clang/test/CodeGen/vecshift.c:128:15: warning: vector operands do not have the same elements sizes (\'vector_uint8\' (vector of 8 \'unsigned int\' values) and \'vector_short8\' (vector of 8 \'short\' values)) [-Wvec-elem-size]"}
		}
	},
	["warn_ucn_escape_incomplete"]={
		[l]={db},
		[k]=db,
		[b]="warn_ucn_escape_incomplete",
		[c]="incomplete universal character name; treating as \'\\\' followed by identifier",
		[d]="incomplete universal character name; treating as \'\\\' followed by identifier",
		[e]=j,
		[f]="incomplete universal character name; treating as \'\\\\\' followed by identifier",
		[g]=fc,
		[a]=cb,
		[i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals.","Handle universal character names and Unicode characters outside of literals.\n\nThis is a missing piece for C99 conformance.\n\nThis patch handles UCNs by adding a \'\\\\\' case to LexTokenInternal and\nLexIdentifier -- if we see a backslash, we tentatively try to read in a UCN.\nIf the UCN is not syntactically well-formed, we fall back to the old\ntreatment: a backslash followed by an identifier beginning with \'u\' (or \'U\').\n\nBecause the spelling of an identifier with UCNs still has the UCN in it, we\nneed to convert that to UTF-8 in Preprocessor::LookUpIdentifierInfo.\n\nOf course, valid code that does *not* use UCNs will see only a very minimal\nperformance hit (checks after each identifier for non-ASCII characters,\nchecks when converting raw_identifiers to identifiers that they do not\ncontain UCNs, and checks when getting the spelling of an identifier that it\ndoes not contain a UCN).\n\nThis patch also adds basic support for actual UTF-8 in the source. This is\ntreated almost exactly the same as UCNs except that we consider stray\nUnicode characters to be mistakes and offer a fixit to remove them.\n\nllvm-svn: 173369"},
		[h]={{ub,3340,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!Delimited && Count != NumHexDigits) {\n    if (Diagnose) {\n      Diag(SlashLoc, diag::warn_ucn_escape_incomplete);"},{ub,3389,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (C != \'{\') {\n    if (Diagnose)\n      Diag(SlashLoc, diag::warn_ucn_escape_incomplete);"}},
		[m]={
			["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:26:5: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:30:5: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:76:18: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:114:19: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:122:9: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:132:9: warning: incomplete universal character name; treating as \'\\\' followed by identifier [-Wunicode]"}
		}
	},
	["warn_ucn_escape_no_digits"]={
		[l]={db},
		[k]=db,
		[b]="warn_ucn_escape_no_digits",
		[c]="\\%0 used with no following hex digits; treating as \'\\\' followed by identifier",
		[d]="\\A used with no following hex digits; treating as \'\\\' followed by identifier",
		[e]=j,
		[f]="\\\\(.*?) used with no following hex digits; treating as \'\\\\\' followed by identifier",
		[g]=fc,
		[a]=cb,
		[i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals.","Handle universal character names and Unicode characters outside of literals.\n\nThis is a missing piece for C99 conformance.\n\nThis patch handles UCNs by adding a \'\\\\\' case to LexTokenInternal and\nLexIdentifier -- if we see a backslash, we tentatively try to read in a UCN.\nIf the UCN is not syntactically well-formed, we fall back to the old\ntreatment: a backslash followed by an identifier beginning with \'u\' (or \'U\').\n\nBecause the spelling of an identifier with UCNs still has the UCN in it, we\nneed to convert that to UTF-8 in Preprocessor::LookUpIdentifierInfo.\n\nOf course, valid code that does *not* use UCNs will see only a very minimal\nperformance hit (checks after each identifier for non-ASCII characters,\nchecks when converting raw_identifiers to identifiers that they do not\ncontain UCNs, and checks when getting the spelling of an identifier that it\ndoes not contain a UCN).\n\nThis patch also adds basic support for actual UTF-8 in the source. This is\ntreated almost exactly the same as UCNs except that we consider stray\nUnicode characters to be mistakes and offer a fixit to remove them.\n\nllvm-svn: 173369"},
		[h]={{ub,3327,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Count == 0) {\n    if (Diagnose)\n      Diag(SlashLoc, FoundEndDelimiter ? diag::warn_delimited_ucn_empty : diag::warn_ucn_escape_no_digits) << StringRef(KindLoc, 1);"}},
		[m]={
			["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:28:5: warning: \\u used with no following hex digits; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Preprocessor/ucn-pp-identifier.c:75:18: warning: \\u used with no following hex digits; treating as \'\\\' followed by identifier [-Wunicode]"}
		}
	},
	["warn_ucn_escape_surrogate"]={
		[l]={db},
		[k]=db,
		[b]="warn_ucn_escape_surrogate",
		[c]="universal character name refers to a surrogate character",
		[d]="universal character name refers to a surrogate character",
		[e]=j,
		[f]="universal character name refers to a surrogate character",
		[g]=fc,
		[a]=cb,
		[i]={"58c61e006f4d",1360372225,"Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11).","Properly validate UCNs for C99 and C++03 (both more restrictive than C(++)11).\n\nAdd warnings under -Wc++11-compat, -Wc++98-compat, and -Wc99-compat when a\nparticular UCN is incompatible with a different standard, and -Wunicode when\na UCN refers to a surrogate character in C++03.\n\nllvm-svn: 174788"},
		[h]={{ub,3523,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  // C++11 [lex.charset]p2: If the hexadecimal value for a\n  //   universal-character-name corresponds to a surrogate code point (in the\n  //   range 0xD800-0xDFFF, inclusive), the program is ill-formed. Additionally,\n  //   if the hexadecimal value for a universal-character-name outside the\n  //   c-char-sequence, s-char-sequence, or r-char-sequence of a character or\n  //   string literal corresponds to a control character (in either of the\n  //   ranges 0x00-0x1F or 0x7F-0x9F, both inclusive) or to a character in the\n  //   basic source character set, the program is ill-formed.\n  if (CodePoint < 0xA0) {\n  // ...\n  } else if (CodePoint >= 0xD800 && CodePoint <= 0xDFFF) {\n    // C++03 allows UCNs representing surrogate characters. C99 and C++11 don\'t.\n    // We don\'t use isLexingRawMode() here because we need to diagnose bad\n    // UCNs even when skipping preprocessing tokens in a #if block.\n    if (Result && PP) {\n      if (LangOpts.CPlusPlus && !LangOpts.CPlusPlus11)\n        Diag(BufferPtr, diag::warn_ucn_escape_surrogate);"}},
		[m]={
			["clang/test/Preprocessor/ucn-allowed-chars.c"]={"clang/test/Preprocessor/ucn-allowed-chars.c:33:11: warning: universal character name refers to a surrogate character [-Wunicode]"}
		}
	},
	["warn_ucn_not_valid_in_c89"]={
		[l]={db},
		[k]=db,
		[b]="warn_ucn_not_valid_in_c89",
		[c]="universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier",
		[d]="universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier",
		[e]=j,
		[f]="universal character names are only valid in C99 or C\\+\\+; treating as \'\\\\\' followed by identifier",
		[g]=fc,
		[a]=cb,
		[i]={"9762e0a2348b",1286341046,"Add support for 4-byte UCNs like \\U12345678. Warn about UCNs in c90 mode.","Add support for 4-byte UCNs like \\U12345678. Warn about UCNs in c90 mode.\n\nllvm-svn: 115743"},
		[h]={{ub,3280,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!LangOpts.CPlusPlus && !LangOpts.C99) {\n    if (Diagnose)\n      Diag(SlashLoc, diag::warn_ucn_not_valid_in_c89);"}},
		[m]={
			["clang/test/Lexer/c90.c"]={"clang/test/Lexer/c90.c:43:16: warning: universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier [-Wunicode]","clang/test/Lexer/c90.c:46:21: warning: universal character names are only valid in C99 or C++; treating as \'\\\' followed by identifier [-Wunicode]"}
		}
	},
	["warn_ucn_not_valid_in_c89_literal"]={
		[l]={db},
		[k]=db,
		[b]="warn_ucn_not_valid_in_c89_literal",
		[c]="universal character names are only valid in C99 or C++",
		[d]="universal character names are only valid in C99 or C++",
		[e]=j,
		[f]="universal character names are only valid in C99 or C\\+\\+",
		[g]=fc,
		[a]=cb,
		[i]={"c0cba2723060",1359317524,"PR15067: Don\'t assert when a UCN appears in a C90 file.","PR15067: Don\'t assert when a UCN appears in a C90 file.\n\nUnfortunately, we can\'t accept the UCN as an extension because we\'re\nrequired to treat it as two tokens for preprocessing purposes.\n\nllvm-svn: 173622"},
		[h]={{"clang/lib/Lex/LiteralSupport.cpp",695,"/// ProcessUCNEscape - Read the Universal Character Name, check constraints and\n/// return the UTF32.\nstatic bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  if (!Features.CPlusPlus && !Features.C99 && Diags)\n    Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::warn_ucn_not_valid_in_c89_literal);"}},
		[m]={
			["clang/test/Lexer/c90.c"]={"clang/test/Lexer/c90.c:32:11: error: universal character names are only valid in C99 or C++ [-Werror,-Wunicode]","clang/test/Lexer/c90.c:33:11: error: universal character names are only valid in C99 or C++ [-Werror,-Wunicode]"}
		}
	},
	["warn_unaligned_access"]={
		[l]={"unaligned-access"},
		[k]="unaligned-access",
		[b]={{nil,u,"warn_unaligned_access"}},
		[c]={{nil,u,"field %1 within %0 is less aligned than %2 and is usually due to %0 being packed, which can lead to unaligned accesses"}},
		[d]={{nil,u,"field B within A is less aligned than C and is usually due to A being packed, which can lead to unaligned accesses"}},
		[e]=j,
		[f]="field (.*?) within (.*?) is less aligned than (.*?) and is usually due to (.*?) being packed, which can lead to unaligned accesses",
		[g]=" \\[(?:\\-Werror,)?\\-Wunaligned\\-access[^\\]]*\\]",
		[a]={{nil,u,E}},
		[i]={"683e83c56f98",1633469611,"[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr","[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr\n\nAllow goto, labelled statements as well as `static`, `thread_local`, and\nnon-literal variables in `constexpr` functions.\n\nAs specified. for all of the above (except labelled statements) constant\nevaluation of the construct still fails.\n\nFor `constexpr` bodies, the proposal is implemented with diagnostics as\na language extension in older language modes. For determination of\nwhether a lambda body satisfies the requirements for a constexpr\nfunction, the proposal is implemented only in C++2b mode to retain the\nsemantics of older modes for programs conforming to them.\n\nReviewed By: aaron.ballman, hubert.reinterpretcast, erichkeane\n\nDifferential Revision: https://reviews.llvm.org/D111400"},
		[h]={{"clang/lib/AST/RecordLayoutBuilder.cpp",2131,"void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D, bool InsertExtraPadding) {\n  // ...\n  // For checking the alignment of inner fields against\n  // the alignment of its parent record.\n  if (const RecordDecl *RD = D->getParent()) {\n    // Check if packed attribute or pragma pack is present.\n    if (RD->hasAttr<PackedAttr>() || !MaxFieldAlignment.isZero())\n      if (FieldAlign < OriginalFieldAlign)\n        if (D->getType()->isRecordType()) {\n          // If the offset is a multiple of the alignment of\n          // the type, raise the warning.\n          // TODO: Takes no account the alignment of the outer struct\n          if (FieldOffset % OriginalFieldAlign != 0)\n            Diag(D->getLocation(), diag::warn_unaligned_access) << Context.getTypeDeclType(RD) << D->getName() << D->getType();"}},
		[m]={
			["clang/test/Sema/test-wunaligned-access.cpp"]={"clang/test/Sema/test-wunaligned-access.cpp:24:6: warning: field b within \'U1\' is less aligned than \'T1\' and is usually due to \'U1\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:48:6: warning: field b within \'U5\' is less aligned than \'T1\' and is usually due to \'U5\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:65:6: warning: field b within \'U7\' is less aligned than \'T1\' and is usually due to \'U7\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:71:6: warning: field b within \'U8\' is less aligned than \'T1\' and is usually due to \'U8\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:77:6: warning: field b within \'U9\' is less aligned than \'T1\' and is usually due to \'U9\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:83:6: warning: field b within \'U10\' is less aligned than \'T1\' and is usually due to \'U10\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:141:6: warning: field b within \'A1\' is less aligned than \'T1\' and is usually due to \'A1\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:157:6: warning: field b within \'U17\' is less aligned than \'A2\' and is usually due to \'U17\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:183:6: warning: field b within \'U19\' is less aligned than \'A4\' and is usually due to \'U19\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:197:6: warning: field b within \'U20\' is less aligned than \'A5\' and is usually due to \'U20\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:209:6: warning: field b within \'U21\' is less aligned than \'A6\' and is usually due to \'U21\' being packed, which can lead to unaligned accesses [-Wunaligned-access]","clang/test/Sema/test-wunaligned-access.cpp:231:6: warning: field b within \'A8\' is less aligned than \'T1\' and is usually due to \'A8\' being packed, which can lead to unaligned accesses [-Wunaligned-access]"}
		}
	},
	["warn_unannotated_fallthrough"]={
		[l]={"implicit-fallthrough"},
		[k]="implicit-fallthrough",
		[b]="warn_unannotated_fallthrough",
		[c]="unannotated fall-through between switch labels",
		[d]="unannotated fall-through between switch labels",
		[e]=j,
		[f]="unannotated fall\\-through between switch labels",
		[g]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fallthrough[^\\]]*\\]",
		[a]=n,
		[i]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between","Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between\ncases in switch statements. Also add a [[clang::fallthrough]] attribute, which\ncan be used to suppress the warning in the case of intentional fallthrough.\n\nPatch by Alexander Kornienko!\n\nThe handling of C++11 attribute namespaces in this patch is temporary, and will\nbe replaced with a cleaner mechanism in a subsequent patch.\n\nllvm-svn: 156086"},
		[h]={{v,1306,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n  // ...\n  for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n    // ...\n    S.Diag(Label->getBeginLoc(), PerFunction ? diag::warn_unannotated_fallthrough_per_function : diag::warn_unannotated_fallthrough);"},{v,2666,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  bool FallThroughDiagFull = !Diags.isIgnored(diag::warn_unannotated_fallthrough, D->getBeginLoc());"}},
		[m]={
			["clang/test/SemaCXX/switch-implicit-fallthrough-blocks.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough-blocks.cpp:12:5: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]"}
		}
	},
	["warn_unannotated_fallthrough_per_function"]={
		[l]={"implicit-fallthrough","implicit-fallthrough-per-function"},
		[k]="implicit-fallthrough-per-function",
		[b]="warn_unannotated_fallthrough_per_function",
		[c]="unannotated fall-through between switch labels in partly-annotated function",
		[d]="unannotated fall-through between switch labels in partly-annotated function",
		[e]=j,
		[f]="unannotated fall\\-through between switch labels in partly\\-annotated function",
		[g]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-fallthrough\\-per\\-function[^\\]]*\\]",
		[a]=n,
		[i]={"2178f14c10af",1339795325,"Stop referring to functions as methods in per-function fallthrough-checking.","Stop referring to functions as methods in per-function fallthrough-checking.\n\nllvm-svn: 158545"},
		[h]={{v,1305,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n  // ...\n  for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n    // ...\n    S.Diag(Label->getBeginLoc(), PerFunction ? diag::warn_unannotated_fallthrough_per_function : diag::warn_unannotated_fallthrough);"},{v,2668,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  bool FallThroughDiagPerFunction = !Diags.isIgnored(diag::warn_unannotated_fallthrough_per_function, D->getBeginLoc());"}},
		[m]={
			["clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp:15:7: warning: unannotated fall-through between switch labels in partly-annotated function [-Wimplicit-fallthrough-per-function]","clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp:8:5: warning: unannotated fall-through between switch labels in partly-annotated function [-Wimplicit-fallthrough-per-function]"}
		}
	},
	["warn_unavailable_def"]={
		[l]={"deprecated-implementations"},
		[k]="deprecated-implementations",
		[b]={{nil,w,"warn_unavailable_def"}},
		[c]={{nil,w,"implementing unavailable method"}},
		[d]={{nil,w,"implementing unavailable method"}},
		[e]=j,
		[f]="implementing unavailable method",
		[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-implementations[^\\]]*\\]",
		[a]={{nil,w,n}},
		[i]={"e1088dc42b3e",1499963831,"Extend -Wdeprecated-implementations to warn about unavailable methods","Extend -Wdeprecated-implementations to warn about unavailable methods\n\nrdar://22867595\n\nllvm-svn: 307924"},
		[h]={{N,302,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  // ...\n  if (Availability != AR_Deprecated) {\n    if (isa<ObjCMethodDecl>(ND)) {\n      // ...\n      S.Diag(ImplLoc, diag::warn_unavailable_def);"}},
		[m]={
			["clang/test/SemaObjC/warn-deprecated-implementations.m"]={"clang/test/SemaObjC/warn-deprecated-implementations.m:24:1: warning: implementing unavailable method [-Wdeprecated-implementations]","clang/test/SemaObjC/warn-deprecated-implementations.m:59:1: warning: implementing unavailable method [-Wdeprecated-implementations]"}
		}
	},
	["warn_unavailable_fwdclass_message"]={
		[l]={"unavailable-declarations"},
		[k]="unavailable-declarations",
		[b]="warn_unavailable_fwdclass_message",
		[c]="%0 may be unavailable because the receiver type is unknown",
		[d]="A may be unavailable because the receiver type is unknown",
		[e]=j,
		[f]="(.*?) may be unavailable because the receiver type is unknown",
		[g]=" \\[(?:\\-Werror,)?\\-Wunavailable\\-declarations[^\\]]*\\]",
		[a]=n,
		[i]={"7d6e11a1923a",1292892241,"Warn when message is sent to receiver of","Warn when message is sent to receiver of\nunknown type and there is a possibility that\nat runtime method is resolved to a deprecated or \nunavailable method.  Addreses // rdar://8769853\n\nllvm-svn: 122294"},
		[h]={{Pb,450,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Unavailable:\n    // ...\n    diag_fwdclass_message = diag::warn_unavailable_fwdclass_message;"}},
		[m]={
			["clang/test/SemaObjC/special-dep-unavail-warning.m"]={"clang/test/SemaObjC/special-dep-unavail-warning.m:34:6: warning: \'unavailMeth\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:36:6: warning: \'unavailMeth1\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:38:6: warning: \'unavailMeth2\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:39:6: warning: \'depunavailInA\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]","clang/test/SemaObjC/special-dep-unavail-warning.m:40:6: warning: \'depunavailInA1\' may be unavailable because the receiver type is unknown [-Wunavailable-declarations]"}
		}
	},
	["warn_uncovered_module_header"]={
		[l]={"incomplete-module","incomplete-umbrella"},
		[k]="incomplete-umbrella",
		[b]="warn_uncovered_module_header",
		[c]="umbrella header for module \'%0\' does not include header \'%1\'",
		[d]="umbrella header for module \'A\' does not include header \'B\'",
		[e]=j,
		[f]="umbrella header for module \'(.*?)\' does not include header \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-umbrella[^\\]]*\\]",
		[a]=cb,
		[i]={"fe76cfd89c37",1324599839,"When building a module with an umbrella header, warn about any headers","When building a module with an umbrella header, warn about any headers\nfound within that umbrella directory that were not actually included\nby the umbrella header. They should either be referenced in the module\nmap or included by the umbrella header.\n\nllvm-svn: 147207"},
		[h]={{"clang/lib/Lex/PPLexerChange.cpp",297,"void Preprocessor::diagnoseMissingHeaderInUmbrellaDir(const Module &Mod) {\n  // ...\n  if (getDiagnostics().isIgnored(diag::warn_uncovered_module_header, ExpectedHeadersLoc))"},{"clang/lib/Lex/PPLexerChange.cpp",323,"void Preprocessor::diagnoseMissingHeaderInUmbrellaDir(const Module &Mod) {\n  // ...\n  for (llvm::vfs::recursive_directory_iterator Entry(FS, Dir->getName(), EC), End; Entry != End && !EC; Entry.increment(EC)) {\n    // ...\n    if (auto Header = getFileManager().getOptionalFileRef(Entry->path()))\n      if (!getSourceManager().hasFileInfo(*Header)) {\n        if (!ModMap.isHeaderInUnavailableModule(*Header)) {\n          // ...\n          Diag(ExpectedHeadersLoc, diag::warn_uncovered_module_header) << Mod.getFullModuleName() << RelativePath;"}},
		[m]={
			["clang/test/Modules/dependency-gen-inferred-map.m"]={"clang/test/Modules/Inputs/Module.framework/Headers/Module.h:38:1: warning: umbrella header for module \'Module\' does not include header \'NotInModule.h\' [-Wincomplete-umbrella]"}
		}
	},
	["warn_undeclared_selector"]={
		[l]={"undeclared-selector"},
		[k]="undeclared-selector",
		[b]="warn_undeclared_selector",
		[c]="undeclared selector %0",
		[d]="undeclared selector A",
		[e]=j,
		[f]="undeclared selector (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wundeclared\\-selector[^\\]]*\\]",
		[a]=n,
		[i]={"0571d9bbbaed",1245169500,"Implements -Wundeclared-selector for ObjC.","Implements -Wundeclared-selector for ObjC.\n\nllvm-svn: 73495"},
		[h]={{zb,1313,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // ...\n  if (!Method) {\n    if (const ObjCMethodDecl *OM = SelectorsForTypoCorrection(Sel)) {\n    // ...\n    } else\n      Diag(SelLoc, diag::warn_undeclared_selector) << Sel;"}}
	},
	["warn_undeclared_selector_with_typo"]={
		[l]={"undeclared-selector"},
		[k]="undeclared-selector",
		[b]="warn_undeclared_selector_with_typo",
		[c]="undeclared selector %0; did you mean %1?",
		[d]="undeclared selector A; did you mean B?",
		[e]=j,
		[f]="undeclared selector (.*?); did you mean (.*?)\\?",
		[g]=" \\[(?:\\-Werror,)?\\-Wundeclared\\-selector[^\\]]*\\]",
		[a]=n,
		[i]={"0c0fc9e14b9c",1370457974,"Objective-C: Provide fixit with suggested spelling correction","Objective-C: Provide fixit with suggested spelling correction\nfor -Wundeclared-selector warnings. // rdar://14039037\n\nllvm-svn: 183331"},
		[h]={{zb,1308,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // ...\n  if (!Method) {\n    if (const ObjCMethodDecl *OM = SelectorsForTypoCorrection(Sel)) {\n      // ...\n      Diag(SelLoc, diag::warn_undeclared_selector_with_typo) << Sel << MatchedSel << FixItHint::CreateReplacement(SelectorRange, MatchedSel.getAsString());"}},
		[m]={
			["clang/test/SemaObjC/undeclared-selector.m"]={"clang/test/SemaObjC/undeclared-selector.m:40:12: warning: undeclared selector \'methodC\'; did you mean \'methodB\'? [-Wundeclared-selector]"}
		}
	},
	["warn_undef_interface"]={
		[b]="warn_undef_interface",
		[c]="cannot find interface declaration for %0",
		[d]="cannot find interface declaration for A",
		[e]=j,
		[f]="cannot find interface declaration for (.*?)",
		[g]=Q,
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{N,1178,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n  // ...\n  if (!CDecl) {\n    Diag(ClassLocation, diag::warn_undef_interface) << ClassName;"},{N,1999,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n  // ...\n  } else if ((IDecl = dyn_cast_or_null<ObjCInterfaceDecl>(PrevDecl))) {\n    // ...\n    RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::warn_undef_interface);"},{N,2015,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n  // ...\n  } else if ((IDecl = dyn_cast_or_null<ObjCInterfaceDecl>(PrevDecl))) {\n  // ...\n  } else {\n    // ...\n    if (Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n    // ...\n    } else {\n      Diag(ClassLoc, diag::warn_undef_interface) << ClassName;"}},
		[m]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:30:17: warning: cannot find interface declaration for \'E\'"}
		}
	},
	["warn_undef_interface_suggest"]={
		[b]="warn_undef_interface_suggest",
		[c]="cannot find interface declaration for %0; did you mean %1?",
		[d]="cannot find interface declaration for A; did you mean B?",
		[e]=j,
		[f]="cannot find interface declaration for (.*?); did you mean (.*?)\\?",
		[g]=Q,
		[a]=n,
		[i]={"40f7a007e9d0",1262626032,"When declaring an Objective-C implementation without a corresponding","When declaring an Objective-C implementation without a corresponding\ninterface, suggest correction of typos. For example, given:\n\n  @interface NSString\n  @end\n\n  @implementation NSstring\n  @end\n\nwe\'ll warn with:\n\nt.m:4:19: warning: cannot find interface declaration for \'NSstring\';\n    did you mean \'NSString\'?\n  @implementation NSstring\n                  ^\n\nHowever, since this is just a warning, we don\'t provide a fix-it\nhint. Good idea, Ted!\n\nllvm-svn: 92488"},
		[h]={{N,2012,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n  // ...\n  } else if ((IDecl = dyn_cast_or_null<ObjCInterfaceDecl>(PrevDecl))) {\n  // ...\n  } else {\n    // ...\n    if (Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(diag::warn_undef_interface_suggest) << ClassName,"}},
		[m]={
			["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:35:17: warning: cannot find interface declaration for \'iNTF3\'; did you mean \'INTF3\'?"}
		}
	},
	["warn_undef_method_impl"]={
		[l]={"incomplete-implementation"},
		[k]="incomplete-implementation",
		[b]="warn_undef_method_impl",
		[c]="method definition for %0 not found",
		[d]="method definition for A not found",
		[e]=j,
		[f]="method definition for (.*?) not found",
		[g]=" \\[(?:\\-Werror,)?\\-Wincomplete\\-implementation[^\\]]*\\]",
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{N,2848,"/// MatchAllMethodDeclarations - Check methods declared in interface\n/// or protocol against those declared in their implementations.\n///\nvoid Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap, const SelectorSet &ClsMap, SelectorSet &InsMapSeen, SelectorSet &ClsMapSeen, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, bool &IncompleteImpl, bool ImmediateClass, bool WarnCategoryMethodImpl) {\n  // Check and see if instance methods in class interface have been\n  // implemented in the implementation class. If so, their types match.\n  for (auto *I : CDecl->instance_methods()) {\n    // ...\n    if (!I->isPropertyAccessor() && !InsMap.count(I->getSelector())) {\n      if (ImmediateClass)\n        WarnUndefinedMethod(*this, IMPDecl, I, IncompleteImpl, diag::warn_undef_method_impl);"},{N,2878,"/// MatchAllMethodDeclarations - Check methods declared in interface\n/// or protocol against those declared in their implementations.\n///\nvoid Sema::MatchAllMethodDeclarations(const SelectorSet &InsMap, const SelectorSet &ClsMap, SelectorSet &InsMapSeen, SelectorSet &ClsMapSeen, ObjCImplDecl *IMPDecl, ObjCContainerDecl *CDecl, bool &IncompleteImpl, bool ImmediateClass, bool WarnCategoryMethodImpl) {\n  // ...\n  // Check and see if class methods in class interface have been\n  // implemented in the implementation class. If so, their types match.\n  for (auto *I : CDecl->class_methods()) {\n    // ...\n    if (!I->isPropertyAccessor() && !ClsMap.count(I->getSelector())) {\n      if (ImmediateClass)\n        WarnUndefinedMethod(*this, IMPDecl, I, IncompleteImpl, diag::warn_undef_method_impl);"}},
		[m]={
			["clang/test/SemaObjC/method-bad-param.m"]={"clang/test/SemaObjC/method-bad-param.m:61:17: warning: method definition for \'my_method:\' not found [-Wincomplete-implementation]"}
		}
	},
	["warn_undef_protocolref"]={
		[b]="warn_undef_protocolref",
		[c]="cannot find protocol definition for %0",
		[d]="cannot find protocol definition for A",
		[e]=j,
		[f]="cannot find protocol definition for (.*?)",
		[g]=Q,
		[a]=n,
		[i]={pb,1236199783,gb,lb},
		[h]={{N,1351,"/// FindProtocolDeclaration - This routine looks up protocols and\n/// issues an error if they are not declared. It returns list of\n/// protocol declarations in its \'Protocols\' argument.\nvoid Sema::FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer, ArrayRef<IdentifierLocPair> ProtocolId, SmallVectorImpl<Decl *> &Protocols) {\n  for (const IdentifierLocPair &Pair : ProtocolId) {\n    // ...\n    if (WarnOnDeclarations && NestedProtocolHasNoDefinition(PDecl, UndefinedProtocol)) {\n      Diag(Pair.second, diag::warn_undef_protocolref) << Pair.first;"},{N,1487,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n  // ...\n  auto resolvedAsProtocols = [&] {\n    // ...\n    for (unsigned i = 0, n = protocols.size(); i != n; ++i) {\n      // ...\n      if (warnOnIncompleteProtocols && NestedProtocolHasNoDefinition(proto, forwardDecl)) {\n        Diag(identifierLocs[i], diag::warn_undef_protocolref) << proto->getDeclName();"}},
		[m]={
			["clang/test/SemaObjC/class-def-test-1.m"]={"clang/test/SemaObjC/class-def-test-1.m:5:19: warning: cannot find protocol definition for \'SUPER\'"}
		}
	},
	["warn_undefined_inline"]={
		[l]={"undefined-inline"},
		[k]="undefined-inline",
		[b]="warn_undefined_inline",
		[c]="inline function %q0 is not defined",
		[d]="inline function A is not defined",
		[e]=j,
		[f]="inline function (.*?) is not defined",
		[g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-inline[^\\]]*\\]",
		[a]=n,
		[i]={"9c7eb1d887c1",1359706400,"Add a new -Wundefined-inline warning for inline functions which are used but not","Add a new -Wundefined-inline warning for inline functions which are used but not\ndefined. Fixes PR14993!\n\nllvm-svn: 174158"},
		[h]={{M,911,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n  // ...\n  for (const auto &Undef : Undefined) {\n    // ...\n    if (S.isExternalWithNoLinkageType(VD)) {\n    // ...\n    } else if (!VD->isExternallyVisible()) {\n    // ...\n    } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {\n      // ...\n      S.Diag(VD->getLocation(), diag::warn_undefined_inline) << VD;"}},
		[m]={
			["clang/test/CXX/basic/basic.def/p4.cpp"]={"clang/test/CXX/basic/basic.def/p4.cpp:3:12: warning: inline function \'f\' is not defined [-Wundefined-inline]"}
		}
	},
	["warn_undefined_internal"]={
		[l]={"undefined-internal"},
		[k]="undefined-internal",
		[b]="warn_undefined_internal",
		[c]="%select{function|variable}0 %q1 has internal linkage but is not defined",
		[d]={{nil,nil,{{nb,Ob}," B has internal linkage but is not defined"}}},
		[e]=j,
		[f]="(?:function|variable) (.*?) has internal linkage but is not defined",
		[g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-internal[^\\]]*\\]",
		[a]=n,
		[i]={"837796754391",1298084021,"Warn about code that uses variables and functions with internal linkage","Warn about code that uses variables and functions with internal linkage\nwithout defining them.  This should be an error, but I\'m paranoid about\n\"uses\" that end up not actually requiring a definition.  I\'ll revisit later.\n\nAlso, teach IR generation to not set internal linkage on variable\ndeclarations, just for safety\'s sake.  Doing so produces an invalid module\nif the variable is not ultimately defined.\n\nAlso, fix several places in the test suite where we were using internal\nfunctions without definitions.\n\nllvm-svn: 126016"},
		[h]={{M,904,"/// checkUndefinedButUsed - Check for undefined objects with internal linkage\n/// or that are inline.\nstatic void checkUndefinedButUsed(Sema &S) {\n  // ...\n  for (const auto &Undef : Undefined) {\n    // ...\n    if (S.isExternalWithNoLinkageType(VD)) {\n    // ...\n    } else if (!VD->isExternallyVisible()) {\n      // ...\n      if (!S.getLangOpts().OpenMP || !IsImplicitBase)\n        S.Diag(VD->getLocation(), diag::warn_undefined_internal) << isa<VarDecl>(VD) << VD;"}},
		[m]={
			["clang/test/OpenMP/declare_variant.cpp"]={"clang/test/OpenMP/declare_variant.cpp:15:13: warning: function \'baz\' has internal linkage but is not defined [-Wundefined-internal]","clang/test/OpenMP/declare_variant.cpp:6:6: warning: function \'(anonymous namespace)::bar\' has internal linkage but is not defined [-Wundefined-internal]"}
		}
	},
	["warn_undefined_reinterpret_cast"]={
		[l]={"undefined-reinterpret-cast"},
		[k]="undefined-reinterpret-cast",
		[b]="warn_undefined_reinterpret_cast",
		[c]="reinterpret_cast from %0 to %1 has undefined behavior",
		[d]="reinterpret_cast from A to B has undefined behavior",
		[e]=j,
		[f]="reinterpret_cast from (.*?) to (.*?) has undefined behavior",
		[g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-reinterpret\\-cast[^\\]]*\\]",
		[a]=n,
		[i]={"69a2c924b9e8",1304360479,"Add a warning for when reinterpret_cast leads to undefined behavior, patch by Richard Trieu!","Add a warning for when reinterpret_cast leads to undefined behavior, patch by Richard Trieu!\n\nllvm-svn: 130703"},
		[h]={{Xb,2040,"// Checks for undefined behavior in reinterpret_cast.\n// The cases that is checked for is:\n// *reinterpret_cast<T*>(&a)\n// reinterpret_cast<T&>(a)\n// where accessing \'a\' as type \'T\' will result in undefined behavior.\nvoid Sema::CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType, bool IsDereference, SourceRange Range) {\n  unsigned DiagID = IsDereference ? diag::warn_pointer_indirection_from_incompatible_type : diag::warn_undefined_reinterpret_cast;"}},
		[m]={
			["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:162:9: warning: reinterpret_cast from \'long\' to \'double &\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:164:9: warning: reinterpret_cast from \'float\' to \'double &\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:166:9: warning: reinterpret_cast from \'long\' to \'float &\' has undefined behavior [-Wundefined-reinterpret-cast]","clang/test/SemaCXX/reinterpret-cast.cpp:168:9: warning: reinterpret_cast from \'double\' to \'float &\' has undefined behavior [-Wundefined-reinterpret-cast]"}
		}
	},
	["warn_unevaluated_string_prefix"]={
		[l]={"invalid-unevaluated-string"},
		[k]="invalid-unevaluated-string",
		[b]="warn_unevaluated_string_prefix",
		[c]="encoding prefix \'%0\' on an unevaluated string literal has no effect%select{| and is incompatible with c++2c}1",
		[d]={{nil,nil,{"encoding prefix \'A\' on an unevaluated string literal has no effect",{F," and is incompatible with c++2c"}}}},
		[e]=j,
		[f]="encoding prefix \'(.*?)\' on an unevaluated string literal has no effect(?:| and is incompatible with c\\+\\+2c)",
		[g]=" \\[(?:\\-Werror,)?\\-Winvalid\\-unevaluated\\-string[^\\]]*\\]",
		[a]=cb,
		[i]={"82343aa9cf9c",1690639424,"[Clang] Backport static_assert messages fixes","[Clang] Backport static_assert messages fixes\n\n* 4d494e7: Handle static_assert messages with an expression started by a literal\n* 49e0495 Produce a warning instead of an error in unevaluated strings before C++26\n\nEmiting an error on unexpected encoding prefix - which was allowed before C++26 -\ncaused build errors for a few users.\nThis downgrade the error to a warning on older language modes and C"},
		[h]={{"clang/lib/Lex/LiteralSupport.cpp",1954,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  // ...\n  /// (C99 5.1.1.2p1).  The common case is only one string fragment.\n  for (const Token &Tok : StringToks) {\n    // ...\n    // Remember if we see any wide or utf-8/16/32 strings.\n    // Also check for illegal concatenations.\n    if (isUnevaluated() && Tok.getKind() != tok::string_literal) {\n      if (Diags) {\n        // ...\n        Diags->Report(Tok.getLocation(), Features.CPlusPlus26 ? diag::err_unevaluated_string_prefix : diag::warn_unevaluated_string_prefix) << Prefix << Features.CPlusPlus << FixItHint::CreateRemoval(Range);"}},
		[m]={
			["clang/test/CXX/dcl.dcl/dcl.link/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:11:8: warning: encoding prefix \'u8\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]","clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:12:8: warning: encoding prefix \'L\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]","clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:13:8: warning: encoding prefix \'u\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]","clang/test/CXX/dcl.dcl/dcl.link/p2.cpp:14:8: warning: encoding prefix \'U\' on an unevaluated string literal has no effect and is incompatible with c++2c [-Winvalid-unevaluated-string]"}
		}
	},
	["warn_unguarded_availability"]={
		[l]={"partial-availability","unguarded-availability"},
		[k]="unguarded-availability",
		[b]="warn_unguarded_availability",
		[c]="%0 is only available on %1 %2 or newer",
		[d]="A is only available on B C or newer",
		[e]=j,
		[f]="(.*?) is only available on (.*?) (.*?) or newer",
		[g]=" \\[(?:\\-Werror,)?\\-Wunguarded\\-availability[^\\]]*\\]",
		[a]=n,
		[i]={"5cd57177a51a",1471369451,"[ObjC] Warn on unguarded use of partial declaration","[ObjC] Warn on unguarded use of partial declaration\n\nThis commit adds a traversal of the AST after Sema of a function that diagnoses\nunguarded references to declarations that are partially available (based on\navailability attributes). This traversal is only done when we would otherwise\nemit -Wpartial-availability.\n\nThis commit is part of a feature I proposed here:\nhttp://lists.llvm.org/pipermail/cfe-dev/2016-July/049851.html\n\nDifferential revision: https://reviews.llvm.org/D23003\n\nllvm-svn: 278826"},
		[h]={{Pb,387,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_NotYetIntroduced: {\n    // ...\n    unsigned Warning = UseNewWarning ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"},{Pb,772,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  // ...\n  if (Result != AR_Available) {\n    // ...\n    unsigned DiagKind = shouldDiagnoseAvailabilityByDefault(SemaRef.Context, SemaRef.Context.getTargetInfo().getPlatformMinVersion(), Introduced) ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"}},
		[m]={
			["clang/test/Parser/objc-implementation-attrs.m"]={"clang/test/Parser/objc-implementation-attrs.m:29:3: warning: \'unavail_int\' is only available on macOS 1000 or newer [-Wunguarded-availability-new]"}
		}
	},
	["warn_unguarded_availability_new"]={
		[l]={"partial-availability","unguarded-availability","unguarded-availability-new"},
		[k]="unguarded-availability-new",
		[b]={{nil,w,"warn_unguarded_availability_new"}},
		[c]={{nil,w,"%0 is only available on %1 %2 or newer"}},
		[d]={{nil,w,"A is only available on B C or newer"}},
		[e]=j,
		[f]="(.*?) is only available on (.*?) (.*?) or newer",
		[g]=" \\[(?:\\-Werror,)?\\-Wunguarded\\-availability\\-new[^\\]]*\\]",
		[a]={{nil,w,n}},
		[i]={"c9a369fbecd5",1498150944,"[Sema] Add -Wunguarded-availability-new","[Sema] Add -Wunguarded-availability-new\n\nThe new compiler warning -Wunguarded-availability-new is a subset of\n-Wunguarded-availability. It is on by default. It only warns about uses of APIs\nthat have been introduced in macOS >= 10.13, iOS >= 11, watchOS >= 4 and\ntvOS >= 11. We decided to use this kind of solution as we didn\'t want to turn\non -Wunguarded-availability by default, because we didn\'t want our users to get\nwarnings about uses of old APIs in their existing projects.\n\nrdar://31054725\n\nDifferential Revision: https://reviews.llvm.org/D34264\n\nllvm-svn: 306033"},
		[h]={{Pb,386,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_NotYetIntroduced: {\n    // ...\n    unsigned Warning = UseNewWarning ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"},{Pb,771,"void DiagnoseUnguardedAvailability::DiagnoseDeclAvailability(NamedDecl *D, SourceRange Range, ObjCInterfaceDecl *ReceiverClass) {\n  // ...\n  if (Result != AR_Available) {\n    // ...\n    unsigned DiagKind = shouldDiagnoseAvailabilityByDefault(SemaRef.Context, SemaRef.Context.getTargetInfo().getPlatformMinVersion(), Introduced) ? diag::warn_unguarded_availability_new : diag::warn_unguarded_availability;"}}
	},
	["warn_unhandled_ms_attribute_ignored"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_unhandled_ms_attribute_ignored",
		[c]="__declspec attribute %0 is not supported",
		[d]="__declspec attribute A is not supported",
		[e]=j,
		[f]="__declspec attribute (.*?) is not supported",
		[g]=V,
		[a]=n,
		[i]={"38c9ad9e725c",1340113766,"Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the ...","Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the align (which fixes PR12631).\n\nllvm-svn: 158717"},
		[h]={{x,8734,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  // Unknown attributes are automatically warned on. Target-specific attributes\n  // which do not apply to the current target architecture are treated as\n  // though they were unknown attributes.\n  if (AL.getKind() == ParsedAttr::UnknownAttribute || !AL.existsInTarget(S.Context.getTargetInfo())) {\n    S.Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : AL.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",497,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getKind() == ParsedAttr::UnknownAttribute || !(A.existsInTarget(S.Context.getTargetInfo()) || (S.Context.getLangOpts().SYCLIsDevice && Aux && A.existsInTarget(*Aux)))) {\n    S.Diag(A.getLoc(), A.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : A.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << A << A.getRange();"}},
		[m]={
			["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:67:19: warning: __declspec attribute \'frobble\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:69:19: warning: __declspec attribute \'\"testing\"\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:81:30: warning: __declspec attribute \'frobble\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:81:38: warning: __declspec attribute \'\"testing\"\' is not supported [-Wignored-attributes]","clang/test/Parser/MicrosoftExtensions.c:82:19: warning: __declspec attribute \'unknown\' is not supported [-Wignored-attributes]"}
		}
	},
	["warn_unimplemented_protocol_method"]={
		[l]={"protocol"},
		[k]="protocol",
		[b]="warn_unimplemented_protocol_method",
		[c]="method %0 in protocol %1 not implemented",
		[d]="method A in protocol B not implemented",
		[e]=j,
		[f]="method (.*?) in protocol (.*?) not implemented",
		[g]=" \\[(?:\\-Werror,)?\\-Wprotocol[^\\]]*\\]",
		[a]=n,
		[i]={"c1fb862fda60",1270059813,"Patch implements gcc\'s -Wno-protocol option to suppress warning","Patch implements gcc\'s -Wno-protocol option to suppress warning\non unimplemented methods in protocols adopted by a class.\n(radar 7056600).\n\nllvm-svn: 100028"},
		[h]={{N,2793,"/// CheckProtocolMethodDefs - This routine checks unimplemented methods\n/// Declared in protocol, and those referenced by it.\nstatic void CheckProtocolMethodDefs(Sema &S, ObjCImplDecl *Impl, ObjCProtocolDecl *PDecl, bool &IncompleteImpl, const Sema::SelectorSet &InsMap, const Sema::SelectorSet &ClsMap, ObjCContainerDecl *CDecl, LazyProtocolNameSet &ProtocolsExplictImpl) {\n  // ...\n  // check unimplemented instance methods.\n  if (!NSIDecl)\n    for (auto *method : PDecl->instance_methods()) {\n      if (method->getImplementationControl() != ObjCMethodDecl::Optional && !method->isPropertyAccessor() && !InsMap.count(method->getSelector()) && (!Super || !Super->lookupMethod(method->getSelector(), true /* instance */, false /* shallowCategory */, true /* followsSuper */, nullptr /* category */))) {\n        // ...\n        unsigned DIAG = diag::warn_unimplemented_protocol_method;"},{N,2815,"/// CheckProtocolMethodDefs - This routine checks unimplemented methods\n/// Declared in protocol, and those referenced by it.\nstatic void CheckProtocolMethodDefs(Sema &S, ObjCImplDecl *Impl, ObjCProtocolDecl *PDecl, bool &IncompleteImpl, const Sema::SelectorSet &InsMap, const Sema::SelectorSet &ClsMap, ObjCContainerDecl *CDecl, LazyProtocolNameSet &ProtocolsExplictImpl) {\n  // ...\n  // check unimplemented class methods\n  for (auto *method : PDecl->class_methods()) {\n    if (method->getImplementationControl() != ObjCMethodDecl::Optional && !ClsMap.count(method->getSelector()) && (!Super || !Super->lookupMethod(method->getSelector(), false /* class method */, false /* shallowCategoryLookup */, true /* followSuper */, nullptr /* category */))) {\n      // ...\n      unsigned DIAG = diag::warn_unimplemented_protocol_method;"}},
		[m]={
			["clang/test/SemaObjC/undef-protocol-methods-1.m"]={"clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'meth\' in protocol \'PROTO\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'meth:\' in protocol \'PROTO\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'cls_meth:\' in protocol \'PROTO\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'P1proto\' in protocol \'P1\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'ClsP1Proto\' in protocol \'P1\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'P3proto\' in protocol \'P3\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'ClsP3Proto\' in protocol \'P3\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'P2proto\' in protocol \'P2\' not implemented [-Wprotocol]","clang/test/SemaObjC/undef-protocol-methods-1.m:28:17: warning: method \'ClsP2Proto\' in protocol \'P2\' not implemented [-Wprotocol]"}
		}
	},
	["warn_unimplemented_selector"]={
		[l]={"selector"},
		[k]="selector",
		[b]="warn_unimplemented_selector",
		[c]="no method with selector %0 is implemented in this translation unit",
		[d]="no method with selector A is implemented in this translation unit",
		[e]=j,
		[f]="no method with selector (.*?) is implemented in this translation unit",
		[g]=" \\[(?:\\-Werror,)?\\-Wselector[^\\]]*\\]",
		[a]=n,
		[i]={"6e7e8cc19d05",1279823060,"atch for implementation of objective-c\'s -Wselector","atch for implementation of objective-c\'s -Wselector\nwarning flag in clang. Little more to do\nfor a PCH issue. Radar 6507158.\n\nllvm-svn: 109129"},
		[h]={{N,5274,"void Sema::DiagnoseUseOfUnimplementedSelectors() {\n  // ...\n  for (auto &SelectorAndLocation : ReferencedSelectors) {\n    // ...\n    if (!LookupImplementedMethodInGlobalPool(Sel))\n      Diag(Loc, diag::warn_unimplemented_selector) << Sel;"}},
		[m]={
			["clang/test/SemaObjC/selector-3.m"]={"clang/test/SemaObjC/selector-3.m:28:13: warning: no method with selector \'length\' is implemented in this translation unit [-Wselector]"}
		}
	},
	["warn_uninit_byref_blockvar_captured_by_block"]={
		[l]={o,q,r,W},
		[k]=W,
		[b]="warn_uninit_byref_blockvar_captured_by_block",
		[c]={{nil,S,"block pointer variable %0 is %select{uninitialized|null}1 when captured by block"},{I,nil,"block pointer variable %0 is uninitialized when captured by block"}},
		[d]={{nil,S,{"block pointer variable A is ",{W,"null"}," when captured by block"}},{I,nil,"block pointer variable A is uninitialized when captured by block"}},
		[e]=j,
		[f]="block pointer variable (.*?) is (?:uninitialized|null) when captured by block",
		[g]=bc,
		[a]=n,
		[i]={"429fadb8e262",1331166170,"improve on diagnostic and provide a fixit hint when","improve on diagnostic and provide a fixit hint when\nan uninitialized block variable is being called inside the\nblock literal. // rdar://10817031\n\nllvm-svn: 152271"},
		[h]={{v,1041,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n  if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Use.getUser())) {\n  // ...\n  } else {\n    // ...\n    if (VD->getType()->isBlockPointerType() && !VD->hasAttr<BlocksAttr>())\n      S.Diag(BE->getBeginLoc(), diag::warn_uninit_byref_blockvar_captured_by_block) << VD->getDeclName() << VD->getType().getQualifiers().hasObjCLifetime();"}},
		[m]={
			["clang/test/FixIt/fixit-recursive-block.c"]={"clang/test/FixIt/fixit-recursive-block.c:8:30: warning: block pointer variable \'arc_fail\' is null when captured by block [-Wuninitialized]"}
		}
	},
	["warn_uninit_const_reference"]={
		[l]={o,q,r,W,"uninitialized-const-reference"},
		[k]="uninitialized-const-reference",
		[b]={{nil,z,"warn_uninit_const_reference"}},
		[c]={{nil,z,"variable %0 is uninitialized when passed as a const reference argument here"}},
		[d]={{nil,z,"variable A is uninitialized when passed as a const reference argument here"}},
		[e]=j,
		[f]="variable (.*?) is uninitialized when passed as a const reference argument here",
		[g]=" \\[(?:\\-Werror,)?\\-Wuninitialized\\-const\\-reference[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n   turned out to be ineffective anyway since functions can be defined later\n   in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
		[h]={{v,998,"/// Diagnose uninitialized const reference usages.\nstatic bool DiagnoseUninitializedConstRefUse(Sema &S, const VarDecl *VD, const UninitUse &Use) {\n  S.Diag(Use.getUser()->getBeginLoc(), diag::warn_uninit_const_reference) << VD->getDeclName() << Use.getUser()->getSourceRange();"},{v,2632,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}},
		[m]={
			["clang/test/SemaCXX/warn-uninitialized-const-reference.cpp"]={"clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:50:25: warning: variable \'l\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:52:21: warning: variable \'l1\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:54:45: warning: variable \'l2\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:29:17: warning: variable \'i\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:30:29: warning: variable \'j\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:31:26: warning: variable \'a1\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:34:24: warning: variable \'a3\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:35:16: warning: variable \'a4\' is uninitialized when passed as a const reference argument here [-Wuninitialized-const-reference]"}
		}
	},
	["warn_uninit_self_reference_in_init"]={
		[l]={o,q,r,W},
		[k]=W,
		[b]="warn_uninit_self_reference_in_init",
		[c]="variable %0 is uninitialized when used within its own initialization",
		[d]="variable A is uninitialized when used within its own initialization",
		[e]=j,
		[f]="variable (.*?) is uninitialized when used within its own initialization",
		[g]=bc,
		[a]=n,
		[i]={"33bf3e758d1d",1301219216,"Diagnose uninitialized uses of a variable within its own initializer.","Diagnose uninitialized uses of a variable within its own initializer.\nThis is basically the same idea as the warning on uninitialized uses of\nfields within an initializer list. As such, it is on by default and\nunder -Wuninitialized.\n\nOriginal patch by Richard Trieu, with some massaging from me on the\nwording and grouping of the diagnostics.\n\nllvm-svn: 128376"},
		[h]={{v,1030,"/// DiagnoseUninitializedUse -- Helper function for diagnosing uses of an\n/// uninitialized variable. This manages the different forms of diagnostic\n/// emitted for particular types of uses. Returns true if the use was diagnosed\n/// as a warning. If a particular use is one we omit warnings for, returns\n/// false.\nstatic bool DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool alwaysReportSelfInit = false) {\n  if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Use.getUser())) {\n    // Inspect the initializer of the variable declaration which is\n    // being referenced prior to its initialization. We emit\n    // specialized diagnostics for self-initialization, and we\n    // specifically avoid warning about self references which take the\n    // form of:\n    //\n    //   int x = x;\n    //\n    // This is used to indicate to GCC that \'x\' is intentionally left\n    // uninitialized. Proven code paths which access \'x\' in\n    // an uninitialized state after this will still warn.\n    if (const Expr *Initializer = VD->getInit()) {\n      // ...\n      if (CR.doesContainReference()) {\n        S.Diag(DRE->getBeginLoc(), diag::warn_uninit_self_reference_in_init) << VD->getDeclName() << VD->getLocation() << DRE->getSourceRange();"},{G,12623,"// Visits an initialization expression to see if OrigDecl is evaluated in\n// its own initialization and throws a warning if it does.\nclass SelfReferenceChecker : public EvaluatedExprVisitor<SelfReferenceChecker> {\n  // ...\n  void HandleDeclRefExpr(DeclRefExpr *DRE) {\n    // ...\n    if (isReferenceType) {\n    // ...\n    } else if (cast<VarDecl>(OrigDecl)->isStaticLocal()) {\n    // ...\n    } else if (isa<TranslationUnitDecl>(OrigDecl->getDeclContext()) || isa<NamespaceDecl>(OrigDecl->getDeclContext()) || DRE->getDecl()->getType()->isRecordType()) {\n      diag = diag::warn_uninit_self_reference_in_init;"}},
		[m]={
			["clang/test/SemaCXX/warn-uninitialized-const-reference.cpp"]={"clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:33:22: warning: variable \'a2\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:35:16: warning: variable \'a4\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:30:11: warning: variable \'j\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:32:21: warning: variable \'k\' is uninitialized when used within its own initialization [-Wuninitialized]","clang/test/SemaCXX/warn-uninitialized-const-reference.cpp:36:11: warning: variable \'n\' is uninitialized when used within its own initialization [-Wuninitialized]"}
		}
	},
	["warn_uninit_self_reference_in_reference_init"]={
		[l]={o,q,r,W},
		[k]=W,
		[b]="warn_uninit_self_reference_in_reference_init",
		[c]="reference %0 is not yet bound to a value when used within its own initialization",
		[d]="reference A is not yet bound to a value when used within its own initialization",
		[e]=j,
		[f]="reference (.*?) is not yet bound to a value when used within its own initialization",
		[g]=bc,
		[a]=n,
		[i]={"d799a2b3b91f",1345452742,"Better wording for reference self-initialization warning.","Better wording for reference self-initialization warning.\n\nllvm-svn: 162198"},
		[h]={{G,12617,"// Visits an initialization expression to see if OrigDecl is evaluated in\n// its own initialization and throws a warning if it does.\nclass SelfReferenceChecker : public EvaluatedExprVisitor<SelfReferenceChecker> {\n  // ...\n  void HandleDeclRefExpr(DeclRefExpr *DRE) {\n    // ...\n    if (isReferenceType) {\n      diag = diag::warn_uninit_self_reference_in_reference_init;"}},
		[m]={
			["clang/test/Analysis/stack-addr-ps.cpp"]={"clang/test/Analysis/stack-addr-ps.cpp:94:12: warning: reference \'i\' is not yet bound to a value when used within its own initialization [-Wuninitialized]"}
		}
	},
	["warn_uninit_var"]={
		[l]={o,q,r,W},
		[k]=W,
		[b]="warn_uninit_var",
		[c]="variable %0 is uninitialized when %select{used here|captured by block}1",
		[d]={{nil,nil,{"variable A is uninitialized when ",{"used here","captured by block"}}}},
		[e]=j,
		[f]="variable (.*?) is uninitialized when (?:used here|captured by block)",
		[g]=bc,
		[a]=n,
		[i]={"bcf848f70a42",1295982828,"Teach -Wuninitialized-experimental to also warn","Teach -Wuninitialized-experimental to also warn\nabout uninitialized variables captured by blocks.\n\nllvm-svn: 124213"},
		[h]={{v,834,"/// DiagUninitUse -- Helper function to produce a diagnostic for an\n/// uninitialized use of a variable.\nstatic void DiagUninitUse(Sema &S, const VarDecl *VD, const UninitUse &Use, bool IsCapturedByBlock) {\n  // ...\n  case UninitUse::Always:\n    S.Diag(Use.getUser()->getBeginLoc(), diag::warn_uninit_var) << VD->getDeclName() << IsCapturedByBlock << Use.getUser()->getSourceRange();"},{v,2629,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, sema::FunctionScopeInfo *fscope, const Decl *D, QualType BlockType) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_sometimes_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_maybe_uninit_var, D->getBeginLoc()) || !Diags.isIgnored(diag::warn_uninit_const_reference, D->getBeginLoc())) {"}},
		[m]={
			["clang/test/Analysis/uninit-asm-goto.cpp"]={"clang/test/Analysis/uninit-asm-goto.cpp:108:10: warning: variable \'y\' is uninitialized when used here [-Wuninitialized]"}
		}
	},
	["warn_unknown_attribute_ignored"]={
		[l]={R,"unknown-attributes"},
		[k]="unknown-attributes",
		[b]="warn_unknown_attribute_ignored",
		[c]="unknown attribute %0 ignored",
		[d]="unknown attribute A ignored",
		[e]=j,
		[f]="unknown attribute (.*?) ignored",
		[g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-attributes[^\\]]*\\]",
		[a]={{nil,I,E},{jb,nil,n}},
		[i]={"dd1bc0f1b5a6",1278582146,"Add support for differentiating between attributes ignored when handled and","Add support for differentiating between attributes ignored when handled and\nunknown attributes that we discard. Add a diagnostic group for unknown\nattribute warnings to allow turning these off when we don\'t care. Also\nconsolidates the tests for this case.\n\nllvm-svn: 107864"},
		[h]={{"clang/lib/Parse/ParseDecl.cpp",1769,"void Parser::ProhibitCXX11Attributes(ParsedAttributes &Attrs, unsigned AttrDiagID, unsigned KeywordDiagID, bool DiagnoseEmptyAttrs, bool WarnOnUnknownAttrs) {\n  // ...\n  for (const ParsedAttr &AL : Attrs) {\n    // ...\n    if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n      if (WarnOnUnknownAttrs)\n        Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{x,2231,"bool Sema::CheckAttrTarget(const ParsedAttr &AL) {\n  // Check whether the attribute is valid on the current target.\n  if (!AL.existsInTarget(Context.getTargetInfo())) {\n    Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_keyword_not_supported_on_target : diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{x,8735,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  // Unknown attributes are automatically warned on. Target-specific attributes\n  // which do not apply to the current target architecture are treated as\n  // though they were unknown attributes.\n  if (AL.getKind() == ParsedAttr::UnknownAttribute || !AL.existsInTarget(S.Context.getTargetInfo())) {\n    S.Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : AL.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{x,9618,"/// checkUnusedDeclAttributes - Check a list of attributes to see if it\n/// contains any decl attributes that we should warn about.\nstatic void checkUnusedDeclAttributes(Sema &S, const ParsedAttributesView &A) {\n  for (const ParsedAttr &AL : A) {\n    // ...\n    if (AL.getKind() == ParsedAttr::UnknownAttribute) {\n      S.Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{T,2824,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n///    class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n  // ...\n  // We do not support any C++11 attributes on base-specifiers yet.\n  // Diagnose any attributes we see.\n  for (const ParsedAttr &AL : Attributes) {\n    // ...\n    if (AL.getKind() == ParsedAttr::UnknownAttribute)\n      Diag(AL.getLoc(), diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",498,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getKind() == ParsedAttr::UnknownAttribute || !(A.existsInTarget(S.Context.getTargetInfo()) || (S.Context.getLangOpts().SYCLIsDevice && Aux && A.existsInTarget(*Aux)))) {\n    S.Diag(A.getLoc(), A.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : A.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << A << A.getRange();"},{U,8580,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::UnknownAttribute:\n      if (attr.isStandardAttributeSyntax()) {\n        state.getSema().Diag(attr.getLoc(), diag::warn_unknown_attribute_ignored) << attr << attr.getRange();"}},
		[m]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:3:3: warning: unknown attribute \'disable_tail_calls\' ignored [-Wunknown-attributes]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:3:23: warning: unknown attribute \'noduplicate\' ignored [-Wunknown-attributes]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:15:9: warning: unknown attribute \'unknown_attr\' ignored [-Wunknown-attributes]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p2-1z.cpp:16:9: warning: unknown attribute \'something\' ignored [-Wunknown-attributes]"}
		}
	},
	["warn_unknown_comment_command_name"]={
		[l]={"documentation-pedantic","documentation-unknown-command"},
		[k]="documentation-unknown-command",
		[b]="warn_unknown_comment_command_name",
		[c]="unknown command tag name",
		[d]="unknown command tag name",
		[e]=j,
		[f]="unknown command tag name",
		[g]=" \\[(?:\\-Werror,)?\\-Wdocumentation\\-unknown\\-command[^\\]]*\\]",
		[a]="Documentation Issue",
		[i]={"5b637078e1ab",1367622920,"[Doc parsing] Provide diagnostics for unknown documentation ","[Doc parsing] Provide diagnostics for unknown documentation \ncommands. // rdar://12381408\n\nllvm-svn: 181071"},
		[h]={{"clang/lib/AST/CommentLexer.cpp",417,"void Lexer::lexCommentText(Token &T) {\n  // ...\n  case \'\\\\\':\n  case \'@\': {\n    // ...\n    if (!Info) {\n      if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) {\n      // ...\n      } else {\n        // ...\n        Diag(T.getLocation(), diag::warn_unknown_comment_command_name) << SourceRange(T.getLocation(), T.getEndLocation());"},{G,14660,"void Sema::ActOnDocumentableDecls(ArrayRef<Decl *> Group) {\n  // ...\n  if (Diags.isIgnored(diag::warn_doc_param_not_found, Group[0]->getLocation()) && Diags.isIgnored(diag::warn_unknown_comment_command_name, Group[0]->getLocation()))"}},
		[m]={
			["clang/test/Sema/warn-documentation.m"]={"clang/test/Sema/warn-documentation.m:156:1: warning: unknown command tag name [-Wdocumentation-unknown-command]","clang/test/Sema/warn-documentation.m:178:5: warning: unknown command tag name [-Wdocumentation-unknown-command]"}
		}
	},
	["warn_unknown_declare_variant_isa_trait"]={
		[l]={"openmp","source-uses-openmp"},
		[k]="source-uses-openmp",
		[b]={{nil,J,"warn_unknown_declare_variant_isa_trait"}},
		[c]={{nil,J,"isa trait \'%0\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further"}},
		[d]={{nil,J,"isa trait \'A\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further"}},
		[e]=j,
		[f]="isa trait \'(.*?)\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further",
		[g]=" \\[(?:\\-Werror,)?\\-Wsource\\-uses\\-openmp[^\\]]*\\]",
		[a]={{nil,u,Eb},{C,J,"OpenMP Issue"}},
		[i]={cc,1582847864,Tb,dc},
		[h]={{"clang/lib/Parse/ParseOpenMP.cpp",2244,"/// Parsing of declarative OpenMP directives.\n///\n///       threadprivate-directive:\n///         annot_pragma_openmp \'threadprivate\' simple-variable-list\n///         annot_pragma_openmp_end\n///\n///       allocate-directive:\n///         annot_pragma_openmp \'allocate\' simple-variable-list [<clause>]\n///         annot_pragma_openmp_end\n///\n///       declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' [...]\n///        annot_pragma_openmp_end\n///\n///       declare-mapper-directive:\n///         annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///         <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///         annot_pragma_openmp_end\n///\n///       declare-simd-directive:\n///         annot_pragma_openmp \'declare simd\' {<clause> [,]}\n///         annot_pragma_openmp_end\n///         <function declaration/definition>\n///\n///       requires directive:\n///         annot_pragma_openmp \'requires\' <clause> [[[,] <clause>] ... ]\n///         annot_pragma_openmp_end\n///\n///       assumes directive:\n///         annot_pragma_openmp \'assumes\' <clause> [[[,] <clause>] ... ]\n///         annot_pragma_openmp_end\n///       or\n///         annot_pragma_openmp \'begin assumes\' <clause> [[[,] <clause>] ... ]\n///         annot_pragma_openmp \'end assumes\'\n///         annot_pragma_openmp_end\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(AccessSpecifier &AS, ParsedAttributes &Attrs, bool Delayed, DeclSpec::TST TagType, Decl *Tag) {\n  // ...\n  case OMPD_begin_declare_variant: {\n    // ...\n    std::function<void(StringRef)> DiagUnknownTrait = [this, Loc](StringRef ISATrait) {\n      // ...\n      Diag(Loc, diag::warn_unknown_declare_variant_isa_trait) << ISATrait;"},{"clang/lib/Parse/ParseOpenMP.cpp",2604,"/// Parsing of declarative or executable OpenMP directives.\n///\n///       threadprivate-directive:\n///         annot_pragma_openmp \'threadprivate\' simple-variable-list\n///         annot_pragma_openmp_end\n///\n///       allocate-directive:\n///         annot_pragma_openmp \'allocate\' simple-variable-list\n///         annot_pragma_openmp_end\n///\n///       declare-reduction-directive:\n///         annot_pragma_openmp \'declare\' \'reduction\' \'(\' <reduction_id> \':\'\n///         <type> {\',\' <type>} \':\' <expression> \')\' [\'initializer\' \'(\'\n///         (\'omp_priv\' \'=\' <expression>|<function_call>) \')\']\n///         annot_pragma_openmp_end\n///\n///       declare-mapper-directive:\n///         annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///         <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///         annot_pragma_openmp_end\n///\n///       executable-directive:\n///         annot_pragma_openmp \'parallel\' | \'simd\' | \'for\' | \'sections\' |\n///         \'section\' | \'single\' | \'master\' | \'critical\' [ \'(\' <name> \')\' ] |\n///         \'parallel for\' | \'parallel sections\' | \'parallel master\' | \'task\' |\n///         \'taskyield\' | \'barrier\' | \'taskwait\' | \'flush\' | \'ordered\' | \'error\'\n///         | \'atomic\' | \'for simd\' | \'parallel for simd\' | \'target\' | \'target\n///         data\' | \'taskgroup\' | \'teams\' | \'taskloop\' | \'taskloop simd\' |\n///         \'master taskloop\' | \'master taskloop simd\' | \'parallel master\n///         taskloop\' | \'parallel master taskloop simd\' | \'distribute\' | \'target\n///         enter data\' | \'target exit data\' | \'target parallel\' | \'target\n///         parallel for\' | \'target update\' | \'distribute parallel for\' |\n///         \'distribute paralle for simd\' | \'distribute simd\' | \'target parallel\n///         for simd\' | \'target simd\' | \'teams distribute\' | \'teams distribute\n///         simd\' | \'teams distribute parallel for simd\' | \'teams distribute\n///         parallel for\' | \'target teams\' | \'target teams distribute\' | \'target\n///         teams distribute parallel for\' | \'target teams distribute parallel\n///         for simd\' | \'target teams distribute simd\' | \'masked\' |\n///         \'parallel masked\' {clause} annot_pragma_openmp_end\n///\nStmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx, bool ReadDirectiveWithinMetadirective) {\n  // ...\n  case OMPD_metadirective: {\n    // ...\n    std::function<void(StringRef)> DiagUnknownTrait = [this, Loc](StringRef ISATrait) {\n      // ...\n      Diag(Loc, diag::warn_unknown_declare_variant_isa_trait) << ISATrait;"},{"clang/lib/Sema/SemaOpenMP.cpp",7264,"ExprResult Sema::ActOnOpenMPCall(ExprResult Call, Scope *Scope, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n  // ...\n  std::function<void(StringRef)> DiagUnknownTrait = [this, CE](StringRef ISATrait) {\n    // ...\n    Diag(CE->getBeginLoc(), diag::warn_unknown_declare_variant_isa_trait) << ISATrait;"}},
		[m]={
			["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:20:1: warning: isa trait \'some-unsupported-feature\' is not known to the current target; verify the spelling or consider restricting the context selector with the \'arch\' selector further [-Wsource-uses-openmp]"}
		}
	},
	["warn_unknown_diag_option"]={
		[l]={"unknown-warning-option"},
		[k]="unknown-warning-option",
		[b]="warn_unknown_diag_option",
		[c]="unknown %select{warning|remark}0 option \'%1\'%select{|; did you mean \'%3\'?}2",
		[d]={{nil,nil,{"unknown ",{"warning","remark"}," option \'B\'",{F,"; did you mean \'D\'?"}}}},
		[e]=j,
		[f]="unknown (?:warning|remark) option \'(.*?)\'(?:|; did you mean \'(.*?)\'\\?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-warning\\-option[^\\]]*\\]",
		[a]=E,
		[i]={"3be1cb294f32",1407371061,"Use -Rblah, not -Wblah, to control remark diagnostics. This was always the","Use -Rblah, not -Wblah, to control remark diagnostics. This was always the\nintent when we added remark support, but was never implemented in the general\ncase, because the first -R flags didn\'t need it. (-Rpass= had special handling\nto accomodate its argument.)\n\n-Rno-foo, -Reverything, and -Rno-everything can be used to turn off a remark,\nor to turn on or off all remarks. Per discussion on cfe-commits, -Weverything\ndoes not affect remarks, and -Reverything does not affect warnings or errors.\n\nThe only \"real\" -R flag we have right now is -Rmodule-build; that flag is\neffectively renamed from -Wmodule-build to -Rmodule-build by this change.\n\n-Wpass and -Wno-pass (and their friends) are also renamed to -Rpass and\n-Rno-pass by this change; it\'s not completely clear whether we intended to have\na -Rpass (with no =pattern), but that is unchanged by this commit, other than\nthe flag name. The default pattern is effectively one which matches no passes.\nIn future, we may want to make the default pattern be .*, so that -Reverything\nworks for -Rpass properly.\n\nllvm-svn: 215046"},
		[h]={{"clang/lib/Basic/Warnings.cpp",39,"// EmitUnknownDiagWarning - Emit a warning and typo hint for unknown warning\n// opts\nstatic void EmitUnknownDiagWarning(DiagnosticsEngine &Diags, diag::Flavor Flavor, StringRef Prefix, StringRef Opt) {\n  // ...\n  Diags.Report(diag::warn_unknown_diag_option) << (Flavor == diag::Flavor::WarningOrError ? 0 : 1) << (Prefix.str() += std::string(Opt)) << !Suggestion.empty() << (Prefix.str() += std::string(Suggestion));"}},
		[m]={
			["clang/test/Frontend/warning-options.cpp"]={"warning: unknown warning option \'-Wmonkey\'; did you mean \'-Wmove\'? [-Wunknown-warning-option]","warning: unknown warning option \'-Wno-monkey\'; did you mean \'-Wno-move\'? [-Wunknown-warning-option]","warning: unknown warning option \'-Wno-unused-command-line-arguments\'; did you mean \'-Wno-unused-command-line-argument\'? [-Wunknown-warning-option]","warning: unknown warning option \'-Wmodule-build\'; did you mean \'-Wmodule-conflict\'? [-Wunknown-warning-option]","warning: unknown remark option \'-Rmodule-built\'; did you mean \'-Rmodule-build\'? [-Wunknown-warning-option]"}
		}
	},
	["warn_unknown_sanitizer_ignored"]={
		[l]={"unknown-sanitizers"},
		[k]="unknown-sanitizers",
		[b]="warn_unknown_sanitizer_ignored",
		[c]="unknown sanitizer \'%0\' ignored",
		[d]="unknown sanitizer \'A\' ignored",
		[e]=j,
		[f]="unknown sanitizer \'(.*?)\' ignored",
		[g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-sanitizers[^\\]]*\\]",
		[a]=n,
		[i]={"915df9968b65",1431714812,"Implement no_sanitize attribute.","Implement no_sanitize attribute.\n\nDifferential Revision: http://reviews.llvm.org/D9631\n\nllvm-svn: 237463"},
		[h]={{x,8232,"static void handleNoSanitizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I != E; ++I) {\n    // ...\n    if (parseSanitizerValue(SanitizerName, /*AllowGroups=*/true) == SanitizerMask() && SanitizerName != \"coverage\")\n      S.Diag(LiteralLoc, diag::warn_unknown_sanitizer_ignored) << SanitizerName;"}},
		[m]={
			["clang/test/SemaCXX/attr-no-sanitize.cpp"]={"clang/test/SemaCXX/attr-no-sanitize.cpp:10:28: warning: unknown sanitizer \'unknown\' ignored [-Wunknown-sanitizers]","clang/test/SemaCXX/attr-no-sanitize.cpp:35:37: warning: unknown sanitizer \'unknown\' ignored [-Wunknown-sanitizers]"}
		}
	},
	["warn_unknown_warning_specifier"]={
		[l]={"unknown-warning-option"},
		[k]="unknown-warning-option",
		[b]="warn_unknown_warning_specifier",
		[c]="unknown %0 warning specifier: \'%1\'",
		[d]="unknown A warning specifier: \'B\'",
		[e]=j,
		[f]="unknown (.*?) warning specifier\\: \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wunknown\\-warning\\-option[^\\]]*\\]",
		[a]=E,
		[i]={"b089c1de5521",1261594417,"switch -Werror/-Wfatal-errors error conditions to use diagnostics instead","switch -Werror/-Wfatal-errors error conditions to use diagnostics instead\nof printf, patch by Christian Adaker!\n\nllvm-svn: 92019"},
		[h]={{"clang/lib/Basic/Warnings.cpp",143,"void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, const DiagnosticOptions &Opts, bool ReportDiags) {\n  // ...\n  // We parse the warning options twice.  The first pass sets diagnostic state,\n  // while the second pass reports warnings/errors.  This has the effect that\n  // we follow the more canonical \"last option wins\" paradigm when there are\n  // conflicting options.\n  for (unsigned Report = 0, ReportEnd = 2; Report != ReportEnd; ++Report) {\n    // ...\n    for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) {\n      // ...\n      // -Werror/-Wno-error is a special case, not controlled by the option\n      // table. It also has the \"specifier\" form of -Werror=foo. GCC supports\n      // the deprecated -Werror-implicit-function-declaration which is used by\n      // a few projects.\n      if (Opt.startswith(\"error\")) {\n        // ...\n        if (Opt.size() > 5) { // Specifier must be present.\n          if (Opt[5] != \'=\' && Opt.substr(5) != \"-implicit-function-declaration\") {\n            if (Report)\n              Diags.Report(diag::warn_unknown_warning_specifier) << \"-Werror\" << (\"-W\" + OrigOpt.str());"},{"clang/lib/Basic/Warnings.cpp",171,"void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, const DiagnosticOptions &Opts, bool ReportDiags) {\n  // ...\n  // We parse the warning options twice.  The first pass sets diagnostic state,\n  // while the second pass reports warnings/errors.  This has the effect that\n  // we follow the more canonical \"last option wins\" paradigm when there are\n  // conflicting options.\n  for (unsigned Report = 0, ReportEnd = 2; Report != ReportEnd; ++Report) {\n    // ...\n    for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) {\n      // ...\n      // -Wfatal-errors is yet another special case.\n      if (Opt.startswith(\"fatal-errors\")) {\n        // ...\n        if (Opt.size() != 12) {\n          if ((Opt[12] != \'=\' && Opt[12] != \'-\') || Opt.size() == 13) {\n            if (Report)\n              Diags.Report(diag::warn_unknown_warning_specifier) << \"-Wfatal-errors\" << (\"-W\" + OrigOpt.str());"}},
		[m]={
			["clang/test/Frontend/warning-options.cpp"]={"warning: unknown -Werror warning specifier: \'-Werror-vla\' [-Wunknown-warning-option]"}
		}
	},
	["warn_unlock_but_no_lock"]={
		[l]={X,Z},
		[k]=Z,
		[b]="warn_unlock_but_no_lock",
		[c]="releasing %0 \'%1\' that was not held",
		[d]="releasing A \'B\' that was not held",
		[e]=j,
		[f]="releasing (.*?) \'(.*?)\' that was not held",
		[g]=vb,
		[a]=n,
		[i]={"ee5db8b5c4ab",1315518770,"Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Lock...","Thread Safety:  In C++0x Mutexes are the objects that control access to shared variables, while Locks are the objects that acquire and release Mutexes. We switch to this new terminology.\n\nllvm-svn: 139321"},
		[h]={{v,1873,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleUnmatchedUnlock(StringRef Kind, Name LockName, SourceLocation Loc, SourceLocation LocPreviousUnlock) override {\n    // ...\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_unlock_but_no_lock) << Kind << LockName);"}},
		[m]={
			["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:123:3: warning: releasing mutex \'mu1\' that was not held [-Wthread-safety-analysis]","clang/test/Sema/warn-thread-safety-analysis.c:128:3: warning: releasing mutex \'mu1\' that was not held [-Wthread-safety-analysis]"}
		}
	},
	["warn_unlock_kind_mismatch"]={
		[l]={X,Z},
		[k]=Z,
		[b]="warn_unlock_kind_mismatch",
		[c]="releasing %0 \'%1\' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access",
		[d]={{nil,nil,{"releasing A \'B\' using ",{"shared","exclusive"}," access, expected ",{"shared","exclusive"}," access"}}},
		[e]=j,
		[f]="releasing (.*?) \'(.*?)\' using (?:shared|exclusive) access, expected (?:shared|exclusive) access",
		[g]=vb,
		[a]=n,
		[i]={"df115d9bf354",1395413328,"The release_capability, release_shared_capability and release_generic_capability functions are now f...","The release_capability, release_shared_capability and release_generic_capability functions are now functionally distinct for capability analysis. The unlock_function attribute maps directly to release_generic_capability.\n\nllvm-svn: 204469"},
		[h]={{v,1886,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleIncorrectUnlockKind(StringRef Kind, Name LockName, LockKind Expected, LockKind Received, SourceLocation LocLocked, SourceLocation LocUnlock) override {\n    // ...\n    PartialDiagnosticAt Warning(LocUnlock, S.PDiag(diag::warn_unlock_kind_mismatch) << Kind << LockName << Received << Expected);"}},
		[m]={
			["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:121:3: warning: releasing mutex \'mu1\' using shared access, expected exclusive access [-Wthread-safety-analysis]","clang/test/Sema/warn-thread-safety-analysis.c:126:3: warning: releasing mutex \'mu1\' using exclusive access, expected shared access [-Wthread-safety-analysis]"}
		}
	},
	["warn_unnecessary_packed"]={
		[l]={"packed"},
		[k]="packed",
		[b]="warn_unnecessary_packed",
		[c]="packed attribute is unnecessary for %0",
		[d]="packed attribute is unnecessary for A",
		[e]=j,
		[f]="packed attribute is unnecessary for (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wpacked[^\\]]*\\]",
		[a]={{nil,I,E},{jb,nil,n}},
		[i]={"ca0d0cd3b993",1285165944,"Implement -Wpadded and -Wpacked.","Implement -Wpadded and -Wpacked.\n\n-Wpadded warns when undesired padding is introduced in a struct. (rdar://7469556)\n-Wpacked warns if a struct is given the packed attribute, but the packed attribute has no effect\n  on the layout or the size of the struct. Such structs may be mis-aligned for little benefit.\n\nThe warnings are emitted at the point where layout is calculated, that is at RecordLayoutBuilder.\nTo avoid calculating the layouts of all structs regardless of whether they are needed or not,\nI let the layouts be lazily constructed when needed. This has the disadvantage that the above warnings\nwill be emitted only when they are used for IR gen, and not e.g with -fsyntax-only:\n\n$ cat t.c\nstruct S {\n  char c;\n  int i;\n};\nvoid f(struct S* s) {}\n\n$ clang -fsyntax-only -Wpadded t.c\n$ clang -c -Wpadded t.c -o t.o\nt.c:3:7: warning: padding struct \'struct S\' with 3 bytes to align \'i\' [-Wpadded]\n  int i;\n      ^\n1 warning generated.\n\nThis is a good tradeoff between providing the warnings and not calculating layouts for all\nstructs in case the user has enabled a couple of rarely used warnings.\n\nllvm-svn: 114544"},
		[h]={{"clang/lib/AST/RecordLayoutBuilder.cpp",2215,"void ItaniumRecordLayoutBuilder::FinishLayout(const NamedDecl *D) {\n  // ...\n  if (const RecordDecl *RD = dyn_cast<RecordDecl>(D)) {\n    // ...\n    // Warn if we packed it unnecessarily, when the unpacked alignment is not\n    // greater than the one after packing, the size in bits doesn\'t change and\n    // the offset of each field is identical.\n    // Unless the type is non-POD (for Clang ABI > 15), where the packed\n    // attribute on such a type does allow the type to be packed into other\n    // structures that use the packed attribute.\n    if (Packed && UnpackedAlignment <= Alignment && UnpackedSizeInBits == getSizeInBits() && !HasPackedField && (!CXXRD || CXXRD->isPOD() || Context.getLangOpts().getClangABICompat() <= LangOptions::ClangABI::Ver15))\n      Diag(D->getLocation(), diag::warn_unnecessary_packed) << Context.getTypeDeclType(RD);"}},
		[m]={
			["clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp"]={"clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:180:8: warning: packed attribute is unnecessary for \'S30_use\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:66:8: warning: packed attribute is unnecessary for \'S11\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:81:8: warning: packed attribute is unnecessary for \'S14\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:85:8: warning: packed attribute is unnecessary for \'S15\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:90:8: warning: packed attribute is unnecessary for \'S16\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:99:8: warning: packed attribute is unnecessary for \'S18\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:104:8: warning: packed attribute is unnecessary for \'S19\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:119:8: warning: packed attribute is unnecessary for \'S22\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:124:8: warning: packed attribute is unnecessary for \'S23\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:140:8: warning: packed attribute is unnecessary for \'S25\' [-Wpacked]","clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:145:8: warning: packed attribute is unnecessary for \'S26\' [-Wpacked]"}
		}
	},
	["warn_unneeded_internal_decl"]={
		[l]={o,q,r,"unneeded-internal-declaration",K,"unused-function","unused-template"},
		[k]="unneeded-internal-declaration",
		[b]="warn_unneeded_internal_decl",
		[c]="%select{function|variable}0 %1 is not needed and will not be emitted",
		[d]={{nil,nil,{{nb,Ob}," B is not needed and will not be emitted"}}},
		[e]=j,
		[f]="(?:function|variable) (.*?) is not needed and will not be emitted",
		[g]=" \\[(?:\\-Werror,)?\\-Wunneeded\\-internal\\-declaration[^\\]]*\\]",
		[a]=L,
		[i]={"1618023018cd",1303242670,"We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from","We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from\ngcc\'s unused warnings which don\'t get emitted if the function is referenced even in an unevaluated context\n(e.g. in templates, sizeof, etc.). Also, saying that a function is \'unused\' because it won\'t get codegen\'ed\nis somewhat misleading.\n\n- Don\'t emit \'unused\' warnings for functions that are referenced in any part of the user\'s code.\n- A warning that an internal function/variable won\'t get emitted is useful though, so introduce\n  -Wunneeded-internal-declaration which will warn if a function/variable with internal linkage is not\n  \"needed\" (\'used\' from the codegen perspective), e.g:\n\n  static void foo() { }\n\n  template <int>\n  void bar() {\n    foo();\n  }\n\ntest.cpp:1:13: warning: function \'foo\' is not needed and will not be emitted\nstatic void foo() { }\n            ^\n\nAddresses rdar://8733476.\n\nllvm-svn: 129794"},
		[h]={{M,1368,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n        // ...\n        if (DiagD->isReferenced()) {\n          if (isa<CXXMethodDecl>(DiagD))\n          // ...\n          else {\n            if (FD->getStorageClass() == SC_Static && !FD->isInlineSpecified() && !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(FD->getLocation())))\n            // ...\n            else\n              Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) << /*function=*/0 << DiagD << DiagRange;"},{M,1392,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n      // ...\n      } else {\n        // ...\n        if (DiagD->isReferenced()) {\n          Diag(DiagD->getLocation(), diag::warn_unneeded_internal_decl) << /*variable=*/1 << DiagD << DiagRange;"}},
		[m]={
			["clang/test/SemaCXX/warn-func-not-needed.cpp"]={"clang/test/SemaCXX/warn-func-not-needed.cpp:4:13: warning: function \'f\' is not needed and will not be emitted [-Wunneeded-internal-declaration]","clang/test/SemaCXX/warn-func-not-needed.cpp:14:18: warning: function \'f<int>\' is not needed and will not be emitted [-Wunneeded-internal-declaration]"}
		}
	},
	["warn_unneeded_member_function"]={
		[l]={"unneeded-member-function","unused-member-function"},
		[k]="unneeded-member-function",
		[b]="warn_unneeded_member_function",
		[c]="member function %0 is not needed and will not be emitted",
		[d]="member function A is not needed and will not be emitted",
		[e]=j,
		[f]="member function (.*?) is not needed and will not be emitted",
		[g]=" \\[(?:\\-Werror,)?\\-Wunneeded\\-member\\-function[^\\]]*\\]",
		[a]=n,
		[i]={"1618023018cd",1303242670,"We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from","We regard a function as \'unused\' from the codegen perspective, so our warnings diverge from\ngcc\'s unused warnings which don\'t get emitted if the function is referenced even in an unevaluated context\n(e.g. in templates, sizeof, etc.). Also, saying that a function is \'unused\' because it won\'t get codegen\'ed\nis somewhat misleading.\n\n- Don\'t emit \'unused\' warnings for functions that are referenced in any part of the user\'s code.\n- A warning that an internal function/variable won\'t get emitted is useful though, so introduce\n  -Wunneeded-internal-declaration which will warn if a function/variable with internal linkage is not\n  \"needed\" (\'used\' from the codegen perspective), e.g:\n\n  static void foo() { }\n\n  template <int>\n  void bar() {\n    foo();\n  }\n\ntest.cpp:1:13: warning: function \'foo\' is not needed and will not be emitted\nstatic void foo() { }\n            ^\n\nAddresses rdar://8733476.\n\nllvm-svn: 129794"},
		[h]={{M,1357,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n        // ...\n        if (DiagD->isReferenced()) {\n          if (isa<CXXMethodDecl>(DiagD))\n            Diag(DiagD->getLocation(), diag::warn_unneeded_member_function) << DiagD << DiagRange;"}},
		[m]={
			["clang/test/SemaCXX/warn-member-not-needed.cpp"]={"clang/test/SemaCXX/warn-member-not-needed.cpp:5:10: warning: member function \'g\' is not needed and will not be emitted [-Wunneeded-member-function]","clang/test/SemaCXX/warn-member-not-needed.cpp:7:22: warning: member function \'gt<int>\' is not needed and will not be emitted [-Wunneeded-member-function]","clang/test/SemaCXX/warn-member-not-needed.cpp:8:22: warning: member function \'gt<float>\' is not needed and will not be emitted [-Wunneeded-member-function]"}
		}
	},
	["warn_unneeded_static_internal_decl"]={
		[l]={o,q,r,"unneeded-internal-declaration",K,"unused-function","unused-template"},
		[k]="unneeded-internal-declaration",
		[b]="warn_unneeded_static_internal_decl",
		[c]="\'static\' function %0 declared in header file should be declared \'static inline\'",
		[d]="\'static\' function A declared in header file should be declared \'static inline\'",
		[e]=j,
		[f]="\'static\' function (.*?) declared in header file should be declared \'static inline\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wunneeded\\-internal\\-declaration[^\\]]*\\]",
		[a]=L,
		[i]={"91fc39e31324",1340826209,"patch to suggest \'static\' function should be \'static inline\' ","patch to suggest \'static\' function should be \'static inline\' \nwhen it appears to be unused and occurs in a header.\n// rdar://11202617\n\nllvm-svn: 159282"},
		[h]={{M,1365,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n        // ...\n        if (DiagD->isReferenced()) {\n          if (isa<CXXMethodDecl>(DiagD))\n          // ...\n          else {\n            if (FD->getStorageClass() == SC_Static && !FD->isInlineSpecified() && !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(FD->getLocation())))\n              Diag(DiagD->getLocation(), diag::warn_unneeded_static_internal_decl) << DiagD << DiagRange;"}},
		[m]={
			["clang/test/SemaCXX/warn-static-function-inheader.cpp"]={"clang/test/SemaCXX/warn-static-function-inheader.h:1:13: warning: \'static\' function \'thing\' declared in header file should be declared \'static inline\' [-Wunneeded-internal-declaration]"}
		}
	},
	["warn_unofficial_aarch64_simdlen_must_be_power_of_2"]={
		[b]="warn_unofficial_aarch64_simdlen_must_be_power_of_2",
		[c]="The value specified in simdlen must be a power of 2 when targeting Advanced SIMD.",
		[d]="The value specified in simdlen must be a power of 2 when targeting Advanced SIMD.",
		[e]=j,
		[f]="The value specified in simdlen must be a power of 2 when targeting Advanced SIMD\\.",
		[g]=Q,
		[a]=E,
		[m]={
			["clang/test/OpenMP/declare_simd_aarch64.c"]={"clang/test/OpenMP/declare_simd_aarch64.c:9:34: warning: The value specified in simdlen must be a power of 2 when targeting Advanced SIMD.","clang/test/OpenMP/declare_simd_aarch64.c:47:34: warning: The value specified in simdlen must be a power of 2 when targeting Advanced SIMD."}
		}
	},
	["warn_unofficial_aarch64_sve_simdlen_constraints"]={
		[b]="warn_unofficial_aarch64_sve_simdlen_constraints",
		[c]="The clause simdlen must fit the %0-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)",
		[d]="The clause simdlen must fit the A-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)",
		[e]=j,
		[f]="The clause simdlen must fit the (.*?)\\-bit lanes in the architectural constraints for SVE \\(min is 128\\-bit, max is 2048\\-bit, by steps of 128\\-bit\\)",
		[g]=Q,
		[a]=E,
		[m]={
			["clang/test/OpenMP/declare_simd_aarch64_sve.c"]={"clang/test/OpenMP/declare_simd_aarch64_sve.c:18:34: warning: The clause simdlen must fit the 64-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)","clang/test/OpenMP/declare_simd_aarch64_sve.c:14:34: warning: The clause simdlen must fit the 64-bit lanes in the architectural constraints for SVE (min is 128-bit, max is 2048-bit, by steps of 128-bit)"}
		}
	},
	["warn_unofficial_converting_to_boxing_syntax_requires_casting"]={
		[b]="warn_unofficial_converting_to_boxing_syntax_requires_casting",
		[c]="converting to boxing syntax requires casting %0 to %1",
		[d]="converting to boxing syntax requires casting A to B",
		[e]=j,
		[f]="converting to boxing syntax requires casting (.*?) to (.*?)",
		[g]=Q,
		[a]=E
	},
	["warn_unofficial_mips_requires_arch"]={
		[b]="warn_unofficial_mips_requires_arch",
		[c]="the \'%0\' ASE requires %1 revision %2 or greater",
		[d]="the \'A\' ASE requires B revision C or greater",
		[e]=j,
		[f]="the \'(.*?)\' ASE requires (.*?) revision (.*?) or greater",
		[g]=Q,
		[a]=E,
		[m]={
			["clang/test/CodeGen/builtins-mips-msa.c"]={"warning: the \'msa\' ASE requires MIPS32 revision 5 or greater"}
		}
	},
	["warn_unofficial_trivial_auto_var_init_stop_after"]={
		[b]="warn_unofficial_trivial_auto_var_init_stop_after",
		[c]="-ftrivial-auto-var-init-stop-after=%0 has been enabled to limit the number of times ftrivial-auto-var-init=%1 gets applied.",
		[d]="-ftrivial-auto-var-init-stop-after=A has been enabled to limit the number of times ftrivial-auto-var-init=B gets applied.",
		[e]=j,
		[f]="\\-ftrivial\\-auto\\-var\\-init\\-stop\\-after\\=(.*?) has been enabled to limit the number of times ftrivial\\-auto\\-var\\-init\\=(.*?) gets applied\\.",
		[g]=Q,
		[a]=E,
		[m]={
			["clang/test/CodeGenCXX/auto-var-init-stop-after.cpp"]={"warning: -ftrivial-auto-var-init-stop-after=5 has been enabled to limit the number of times ftrivial-auto-var-init=zero gets applied."}
		}
	},
	["warn_unpacked_field"]={
		[l]={o,q,"packed","packed-non-pod"},
		[k]="packed-non-pod",
		[b]={{nil,B,"warn_unpacked_field"}},
		[c]={{nil,B,"not packing field %0 as it is non-POD for the purposes of layout"}},
		[d]={{nil,B,"not packing field A as it is non-POD for the purposes of layout"}},
		[e]=j,
		[f]="not packing field (.*?) as it is non\\-POD for the purposes of layout",
		[g]=" \\[(?:\\-Werror,)?\\-Wpacked\\-non\\-pod[^\\]]*\\]",
		[a]={{nil,B,E}},
		[i]={"ec273d3e3a8c",1643408541,"Add a warning for not packing non-POD members in packed structs","Add a warning for not packing non-POD members in packed structs\n\nDifferential Revision: https://reviews.llvm.org/D118511"},
		[h]={{"clang/lib/AST/RecordLayoutBuilder.cpp",2137,"void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D, bool InsertExtraPadding) {\n  // ...\n  if (Packed && !FieldPacked && PackedFieldAlign < FieldAlign)\n    Diag(D->getLocation(), diag::warn_unpacked_field) << D;"}},
		[m]={
			["clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp"]={"clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp:163:15: warning: not packing field \'p1\' as it is non-POD for the purposes of layout [-Wpacked-non-pod]"}
		}
	},
	["warn_unqualified_call_to_std_cast_function"]={
		[l]={"unqualified-std-cast-call"},
		[k]="unqualified-std-cast-call",
		[b]={{nil,D,"warn_unqualified_call_to_std_cast_function"}},
		[c]={{nil,D,"unqualified call to \'%0\'"}},
		[d]={{nil,D,"unqualified call to \'A\'"}},
		[e]=j,
		[f]="unqualified call to \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wunqualified\\-std\\-cast\\-call[^\\]]*\\]",
		[a]={{nil,D,n}},
		[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
		[h]={{A,7043,"// Once a call is fully resolved, warn for unqualified calls to specific\n// C++ standard functions, like move and forward.\nstatic void DiagnosedUnqualifiedCallsToStdFunctions(Sema &S, CallExpr *Call) {\n  // ...\n  S.Diag(DRE->getLocation(), diag::warn_unqualified_call_to_std_cast_function) << FD->getQualifiedNameAsString() << FixItHint::CreateInsertion(DRE->getLocation(), \"std::\");"}},
		[m]={
			["clang/test/SemaCXX/unqualified-std-call.cpp"]={"clang/test/SemaCXX/unqualified-std-call.cpp:28:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:29:4: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:34:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:62:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:64:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:93:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:102:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:103:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:113:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:115:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:41:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:44:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:69:3: warning: unqualified call to \'std::move\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:70:3: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]","clang/test/SemaCXX/unqualified-std-call.cpp:71:4: warning: unqualified call to \'std::forward\' [-Wunqualified-std-cast-call]"}
		}
	},
	["warn_unreachable"]={
		[l]={Yb,Bb},
		[k]=Yb,
		[b]="warn_unreachable",
		[c]="code will never be executed",
		[d]="code will never be executed",
		[e]=j,
		[f]="code will never be executed",
		[g]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code[^\\]]*\\]",
		[a]=n,
		[i]={"1bacb81d6f61",1263351594,"Add an unreachable code checker.","Add an unreachable code checker.\n\nllvm-svn: 93287"},
		[h]={{v,94,"class UnreachableCodeHandler : public reachable_code::Callback {\n  // ...\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    // ...\n    unsigned diag = diag::warn_unreachable;"}},
		[m]={
			["clang/test/Sema/warn-unreachable.mm"]={"clang/test/Sema/warn-unreachable.mm:10:7: warning: code will never be executed [-Wunreachable-code]"}
		}
	},
	["warn_unreachable_association"]={
		[l]={Yb,Bb,"unreachable-code-generic-assoc"},
		[k]="unreachable-code-generic-assoc",
		[b]={{nil,D,"warn_unreachable_association"}},
		[c]={{nil,D,"due to lvalue conversion of the controlling expression, association of type %0 will never be selected because it is %select{of array type|qualified}1"}},
		[d]={{nil,D,{"due to lvalue conversion of the controlling expression, association of type A will never be selected because it is ",{"of array type","qualified"}}}},
		[e]=j,
		[f]="due to lvalue conversion of the controlling expression, association of type (.*?) will never be selected because it is (?:of array type|qualified)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-generic\\-assoc[^\\]]*\\]",
		[a]={{nil,D,n}},
		[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
		[h]={{A,1760,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    // ...\n    if (Types[i]) {\n      // ...\n      if (Types[i]->getType()->isDependentType()) {\n      // ...\n      } else {\n        // ...\n        if (ControllingExpr && Types[i]->getType()->isIncompleteType())\n        // ...\n        else if (ControllingExpr && !Types[i]->getType()->isObjectType())\n        // ...\n        else if (Types[i]->getType()->isVariablyModifiedType())\n        // ...\n        else if (ControllingExpr) {\n          // ...\n          if (Reason)\n            Diag(Types[i]->getTypeLoc().getBeginLoc(), diag::warn_unreachable_association) << QT << (Reason - 1);"}},
		[m]={
			["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:59:13: warning: due to lvalue conversion of the controlling expression, association of type \'const int\' will never be selected because it is qualified [-Wunreachable-code-generic-assoc]","clang/test/SemaCXX/generic-selection.cpp:60:16: warning: due to lvalue conversion of the controlling expression, association of type \'volatile int\' will never be selected because it is qualified [-Wunreachable-code-generic-assoc]","clang/test/SemaCXX/generic-selection.cpp:61:7: warning: due to lvalue conversion of the controlling expression, association of type \'int[12]\' will never be selected because it is of array type [-Wunreachable-code-generic-assoc]"}
		}
	},
	["warn_unreachable_break"]={
		[l]={Bb,"unreachable-code-break"},
		[k]="unreachable-code-break",
		[b]="warn_unreachable_break",
		[c]="\'break\' will never be executed",
		[d]="\'break\' will never be executed",
		[e]=j,
		[f]="\'break\' will never be executed",
		[g]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-break[^\\]]*\\]",
		[a]=n,
		[i]={"1a8641c1e772",1394846792,"Start breaking -Wunreachable-code up into different diagnostic groups.","Start breaking -Wunreachable-code up into different diagnostic groups.\n\nRecent work on -Wunreachable-code has focused on suppressing uninteresting\nunreachable code that center around \"configuration values\", but\nthere are still some set of cases that are sometimes interesting\nor uninteresting depending on the codebase.  For example, a dead\n\"break\" statement may not be interesting for a particular codebase,\npotentially because it is auto-generated or simply because code\nis written defensively.\n\nTo address these workflow differences, -Wunreachable-code is now\nbroken into several diagnostic groups:\n\n-Wunreachable-code: intended to be a reasonable \"default\" for\nmost users.\n\nand then other groups that turn on more aggressive checking:\n\n-Wunreachable-code-break: warn about dead break statements\n\n-Wunreachable-code-trivial-return: warn about dead return statements\nthat return \"trivial\" values (e.g., return 0).  Other return\nstatements that return non-trivial values are still reported\nunder -Wunreachable-code (this is an area subject to more refinement).\n\n-Wunreachable-code-aggressive: supergroup that enables all these\ngroups.\n\nThe goal is to eventually make -Wunreachable-code good enough to\neither be in -Wall or on-by-default, thus finessing these warnings\ninto different groups helps achieve maximum signal for more users.\n\nTODO: the tests need to be updated to reflect this extra control\nvia diagnostic flags.\n\nllvm-svn: 203994"},
		[h]={{v,97,"class UnreachableCodeHandler : public reachable_code::Callback {\n  // ...\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    // ...\n    case reachable_code::UK_Break:\n      diag = diag::warn_unreachable_break;"}},
		[m]={
			["clang/test/Sema/warn-unreachable.c"]={"clang/test/Sema/warn-unreachable.c:165:7: warning: \'break\' will never be executed [-Wunreachable-code-break]","clang/test/Sema/warn-unreachable.c:162:7: warning: \'break\' will never be executed [-Wunreachable-code-break]","clang/test/Sema/warn-unreachable.c:158:7: warning: \'break\' will never be executed [-Wunreachable-code-break]","clang/test/Sema/warn-unreachable.c:155:7: warning: \'break\' will never be executed [-Wunreachable-code-break]"}
		}
	},
	["warn_unreachable_default"]={
		[l]={"covered-switch-default"},
		[k]="covered-switch-default",
		[b]="warn_unreachable_default",
		[c]="default label in switch which covers all enumeration values",
		[d]="default label in switch which covers all enumeration values",
		[e]=j,
		[f]="default label in switch which covers all enumeration values",
		[g]=" \\[(?:\\-Werror,)?\\-Wcovered\\-switch\\-default[^\\]]*\\]",
		[a]=n,
		[i]={"645ae0ce10cb",1327169527,"Add -Wswitch-enum-redundant-default.","Add -Wswitch-enum-redundant-default.\n\nThis warning acts as the complement to the main -Wswitch-enum warning (which\nwarns whenever a switch over enum without a default doesn\'t cover all values of\n the enum) & has been an an-doc coding convention in LLVM and Clang in my\nexperience. The purpose is to ensure there\'s never a \"dead\" default in a\nswitch-over-enum because this would hide future -Wswitch-enum errors.\n\nThe name warning has a separate flag name so it can be disabled but it\'s grouped\nunder -Wswitch-enum & is on-by-default because of this.\n\nThe existing violations of this rule in test cases have had the warning disabled\n& I\'ve added a specific test for the new behavior (many negative cases already\nexist in the same test file - and none regressed - so I didn\'t add more).\n\nReviewed by Ted Kremenek ( http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120116/051690.html )\n\nllvm-svn: 148640"},
		[h]={{P,1599,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  if (!HasDependentValue) {\n    // ...\n    // If switch has default case, then ignore it.\n    if (!CaseListIsErroneous && !CaseListIsIncomplete && !HasConstantCond && ET && ET->getDecl()->isCompleteDefinition() && !ET->getDecl()->enumerators().empty()) {\n      // ...\n      if (TheDefaultStmt && UnhandledNames.empty() && ED->isClosedNonFlag())\n        Diag(TheDefaultStmt->getDefaultLoc(), diag::warn_unreachable_default);"}},
		[m]={
			["clang/test/SemaCXX/enum-attr.cpp"]={"clang/test/SemaCXX/enum-attr.cpp:38:3: warning: default label in switch which covers all enumeration values [-Wcovered-switch-default]","clang/test/SemaCXX/enum-attr.cpp:51:3: warning: default label in switch which covers all enumeration values [-Wcovered-switch-default]"}
		}
	},
	["warn_unreachable_fallthrough_attr"]={
		[l]={Yb,Bb,"unreachable-code-fallthrough"},
		[k]="unreachable-code-fallthrough",
		[b]={{nil,u,"warn_unreachable_fallthrough_attr"}},
		[c]={{nil,u,"fallthrough annotation in unreachable code"}},
		[d]={{nil,u,"fallthrough annotation in unreachable code"}},
		[e]=j,
		[f]="fallthrough annotation in unreachable code",
		[g]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-fallthrough[^\\]]*\\]",
		[a]={{nil,u,n}},
		[i]={Lb,1615397021,Kb,Mb},
		[h]={{v,82,"class UnreachableCodeHandler : public reachable_code::Callback {\n  // ...\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    // ...\n    if (HasFallThroughAttr && !S.getDiagnostics().isIgnored(diag::warn_unreachable_fallthrough_attr, SourceLocation()))"},{v,1140,"class FallthroughMapper : public RecursiveASTVisitor<FallthroughMapper> {\n  // ...\n  bool checkFallThroughIntoBlock(const CFGBlock &B, int &AnnotatedCnt, bool IsTemplateInstantiation) {\n    // ...\n    while (!BlockQueue.empty()) {\n      // ...\n      if (!ReachableBlocks.count(P)) {\n        for (const CFGElement &Elem : llvm::reverse(*P)) {\n          if (std::optional<CFGStmt> CS = Elem.getAs<CFGStmt>()) {\n            if (const AttributedStmt *AS = asFallThroughAttr(CS->getStmt())) {\n              // Don\'t issue a warning for an unreachable fallthrough\n              // attribute in template instantiations as it may not be\n              // unreachable in all instantiations of the template.\n              if (!IsTemplateInstantiation)\n                S.Diag(AS->getBeginLoc(), diag::warn_unreachable_fallthrough_attr);"}},
		[m]={
			["clang/test/SemaCXX/switch-implicit-fallthrough.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough.cpp:187:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]","clang/test/SemaCXX/switch-implicit-fallthrough.cpp:190:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]","clang/test/SemaCXX/switch-implicit-fallthrough.cpp:193:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]","clang/test/SemaCXX/switch-implicit-fallthrough.cpp:311:7: warning: fallthrough annotation in unreachable code [-Wunreachable-code-fallthrough]"}
		}
	},
	["warn_unreachable_loop_increment"]={
		[l]={Yb,Bb,"unreachable-code-loop-increment"},
		[k]="unreachable-code-loop-increment",
		[b]="warn_unreachable_loop_increment",
		[c]="loop will run at most once (loop increment never executed)",
		[d]="loop will run at most once (loop increment never executed)",
		[e]=j,
		[f]="loop will run at most once \\(loop increment never executed\\)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-loop\\-increment[^\\]]*\\]",
		[a]=n,
		[i]={"1421037ece1f",1395381756,"[-Wunreachable-code] add a specialized diagnostic for unreachable increment expressions of loops.","[-Wunreachable-code] add a specialized diagnostic for unreachable increment expressions of loops.\n\nllvm-svn: 204430"},
		[h]={{v,103,"class UnreachableCodeHandler : public reachable_code::Callback {\n  // ...\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    // ...\n    case reachable_code::UK_Loop_Increment:\n      diag = diag::warn_unreachable_loop_increment;"}},
		[m]={
			["clang/test/SemaCXX/unreachable-code.cpp"]={"clang/test/SemaCXX/unreachable-code.cpp:8:8: warning: loop will run at most once (loop increment never executed) [-Wunreachable-code-loop-increment]","clang/test/SemaCXX/unreachable-code.cpp:20:8: warning: loop will run at most once (loop increment never executed) [-Wunreachable-code-loop-increment]"}
		}
	},
	["warn_unreachable_return"]={
		[l]={Bb,"unreachable-code-return"},
		[k]="unreachable-code-return",
		[b]="warn_unreachable_return",
		[c]="\'return\' will never be executed",
		[d]="\'return\' will never be executed",
		[e]=j,
		[f]="\'return\' will never be executed",
		[g]=" \\[(?:\\-Werror,)?\\-Wunreachable\\-code\\-return[^\\]]*\\]",
		[a]=n,
		[i]={"ad8753c00eac",1394862426,"Further refine -Wunreachable-code groups so that -Wno-unreachable-code-break doesn\'t turn off all un...","Further refine -Wunreachable-code groups so that -Wno-unreachable-code-break doesn\'t turn off all unreachable code warnings.\n\nAlso relax unreachable \'break\' and \'return\' to not check for being\npreceded by a call to \'noreturn\'.  That turns out to not be so\ninteresting in practice.\n\nllvm-svn: 204000"},
		[h]={{v,100,"class UnreachableCodeHandler : public reachable_code::Callback {\n  // ...\n  void HandleUnreachable(reachable_code::UnreachableKind UK, SourceLocation L, SourceRange SilenceableCondVal, SourceRange R1, SourceRange R2, bool HasFallThroughAttr) override {\n    // ...\n    case reachable_code::UK_Return:\n      diag = diag::warn_unreachable_return;"}},
		[m]={
			["clang/test/SemaObjC/warn-unreachable.m"]={"clang/test/SemaObjC/warn-unreachable.m:15:3: warning: \'return\' will never be executed [-Wunreachable-code-return]","clang/test/SemaObjC/warn-unreachable.m:25:12: warning: \'return\' will never be executed [-Wunreachable-code-return]","clang/test/SemaObjC/warn-unreachable.m:34:12: warning: \'return\' will never be executed [-Wunreachable-code-return]"}
		}
	},
	["warn_unsafe_buffer_operation"]={
		[l]={"unsafe-buffer-usage"},
		[k]="unsafe-buffer-usage",
		[b]={{nil,B,"warn_unsafe_buffer_operation"}},
		[c]="%select{unsafe pointer operation|unsafe pointer arithmetic|unsafe buffer access|function introduces unsafe buffer manipulation}0",
		[d]={{nil,nil,{{"unsafe pointer operation","unsafe pointer arithmetic","unsafe buffer access","function introduces unsafe buffer manipulation"}}},{B,B,{{"unsafe pointer operation","unsafe pointer arithmetic","unsafe buffer access"}}}},
		[e]=j,
		[f]="(?:unsafe pointer operation|unsafe pointer arithmetic|unsafe buffer access|function introduces unsafe buffer manipulation)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsafe\\-buffer\\-usage[^\\]]*\\]",
		[a]={{nil,B,E}},
		[i]={eb,1625925174,fb,ob},
		[h]={{v,2215,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  // ...\n  void handleUnsafeOperation(const Stmt *Operation, bool IsRelatedToDecl) override {\n    // ...\n    if (IsRelatedToDecl) {\n    // ...\n    } else {\n      S.Diag(Loc, diag::warn_unsafe_buffer_operation) << MsgParam << Range;"},{v,2447,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n  // ...\n  // The Callback function that performs analyses:\n  auto CallAnalyzers = [&](const Decl *Node) -> void {\n    // ...\n    if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, Node->getBeginLoc()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, Node->getBeginLoc())) {"},{v,2459,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, SourceLocation()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, SourceLocation())) {"}},
		[m]={
			["clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp:5:3: warning: unsafe buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp:16:3: warning: unsafe buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/warn-unsafe-buffer-usage-c-linkage.cpp:22:3: warning: unsafe buffer access [-Wunsafe-buffer-usage]"}
		}
	},
	["warn_unsafe_buffer_variable"]={
		[l]={"unsafe-buffer-usage"},
		[k]="unsafe-buffer-usage",
		[b]={{nil,B,"warn_unsafe_buffer_variable"}},
		[c]={{nil,B,"%0 is an %select{unsafe pointer used for buffer access|unsafe buffer that does not perform bounds checks}1"}},
		[d]={{nil,B,{"A is an ",{"unsafe pointer used for buffer access","unsafe buffer that does not perform bounds checks"}}}},
		[e]=j,
		[f]="(.*?) is an (?:unsafe pointer used for buffer access|unsafe buffer that does not perform bounds checks)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsafe\\-buffer\\-usage[^\\]]*\\]",
		[a]={{nil,B,E}},
		[i]={eb,1625925174,fb,ob},
		[h]={{v,2227,"class UnsafeBufferUsageReporter : public UnsafeBufferUsageHandler {\n  // ...\n  void handleUnsafeVariableGroup(const VarDecl *Variable, const DefMapTy &VarGrpMap, FixItList &&Fixes) override {\n    // ...\n    S.Diag(Variable->getLocation(), diag::warn_unsafe_buffer_variable) << Variable << (Variable->getType()->isPointerType() ? 0 : 1) << Variable->getSourceRange();"},{v,2449,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n  // ...\n  // The Callback function that performs analyses:\n  auto CallAnalyzers = [&](const Decl *Node) -> void {\n    // ...\n    if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, Node->getBeginLoc()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, Node->getBeginLoc())) {"},{v,2460,"void clang::sema::AnalysisBasedWarnings::IssueWarnings(TranslationUnitDecl *TU) {\n  // ...\n  if (!Diags.isIgnored(diag::warn_unsafe_buffer_operation, SourceLocation()) || !Diags.isIgnored(diag::warn_unsafe_buffer_variable, SourceLocation())) {"}},
		[m]={
			["clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp"]={"clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:6:9: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:12:7: warning: \'array\' is an unsafe buffer that does not perform bounds checks [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:18:7: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:24:5: warning: \'array\' is an unsafe buffer that does not perform bounds checks [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:31:37: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:38:37: warning: \'array\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:87:16: warning: \'ptr\' is an unsafe pointer used for buffer access [-Wunsafe-buffer-usage]","clang/test/SemaCXX/unsafe-buffer-usage-diag-type.cpp:96:14: warning: \'array\' is an unsafe buffer that does not perform bounds checks [-Wunsafe-buffer-usage]"}
		}
	},
	["warn_unsequenced_mod_mod"]={
		[l]={"sequence-point","unsequenced"},
		[k]="unsequenced",
		[b]="warn_unsequenced_mod_mod",
		[c]="multiple unsequenced modifications to %0",
		[d]="multiple unsequenced modifications to A",
		[e]=j,
		[f]="multiple unsequenced modifications to (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsequenced[^\\]]*\\]",
		[a]=n,
		[i]={"c406cb736484",1358385476,"Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on","Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on\nexpressions which have undefined behavior due to multiple unsequenced\nmodifications or an unsequenced modification and use of a variable.\n\nllvm-svn: 172690"},
		[h]={{y,15948,"/// Visitor for expressions which looks for unsequenced operations on the\n/// same object.\nclass SequenceChecker : public ConstEvaluatedExprVisitor<SequenceChecker> {\n  // ...\n  /// Check whether a modification or use of an object \\p O in an expression\n  /// \\p UsageExpr conflicts with a prior usage of kind \\p OtherKind. \\p UI is\n  /// the \\p UsageInfo for the object \\p O as obtained via the \\p UsageMap.\n  /// \\p IsModMod is true when we are checking for a mod-mod unsequenced\n  /// usage and false we are checking for a mod-use unsequenced usage.\n  void checkUsage(Object O, UsageInfo &UI, const Expr *UsageExpr, UsageKind OtherKind, bool IsModMod) {\n    // ...\n    SemaRef.DiagRuntimeBehavior(Mod->getExprLoc(), {Mod, ModOrUse}, SemaRef.PDiag(IsModMod ? diag::warn_unsequenced_mod_mod : diag::warn_unsequenced_mod_use) << O << SourceRange(ModOrUse->getExprLoc()));"}},
		[m]={
			["clang/test/Sema/warn-unsequenced.c"]={"clang/test/Sema/warn-unsequenced.c:13:7: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:15:8: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:17:3: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:18:4: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:19:10: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:20:11: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:21:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:22:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:23:14: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:27:7: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:30:9: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:32:3: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:33:5: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:34:4: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:35:6: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:37:7: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:40:15: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:80:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:84:11: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:85:15: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:88:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:89:13: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:93:21: warning: multiple unsequenced modifications to \'a\' [-Wunsequenced]"}
		}
	},
	["warn_unsequenced_mod_use"]={
		[l]={"sequence-point","unsequenced"},
		[k]="unsequenced",
		[b]="warn_unsequenced_mod_use",
		[c]="unsequenced modification and access to %0",
		[d]="unsequenced modification and access to A",
		[e]=j,
		[f]="unsequenced modification and access to (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunsequenced[^\\]]*\\]",
		[a]=n,
		[i]={"c406cb736484",1358385476,"Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on","Add -Wunsequenced (with compatibility alias -Wsequence-point) to warn on\nexpressions which have undefined behavior due to multiple unsequenced\nmodifications or an unsequenced modification and use of a variable.\n\nllvm-svn: 172690"},
		[h]={{y,15949,"/// Visitor for expressions which looks for unsequenced operations on the\n/// same object.\nclass SequenceChecker : public ConstEvaluatedExprVisitor<SequenceChecker> {\n  // ...\n  /// Check whether a modification or use of an object \\p O in an expression\n  /// \\p UsageExpr conflicts with a prior usage of kind \\p OtherKind. \\p UI is\n  /// the \\p UsageInfo for the object \\p O as obtained via the \\p UsageMap.\n  /// \\p IsModMod is true when we are checking for a mod-mod unsequenced\n  /// usage and false we are checking for a mod-use unsequenced usage.\n  void checkUsage(Object O, UsageInfo &UI, const Expr *UsageExpr, UsageKind OtherKind, bool IsModMod) {\n    // ...\n    SemaRef.DiagRuntimeBehavior(Mod->getExprLoc(), {Mod, ModOrUse}, SemaRef.PDiag(IsModMod ? diag::warn_unsequenced_mod_mod : diag::warn_unsequenced_mod_use) << O << SourceRange(ModOrUse->getExprLoc()));"}},
		[m]={
			["clang/test/Sema/warn-unsequenced.c"]={"clang/test/Sema/warn-unsequenced.c:12:7: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:14:8: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:25:7: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:26:10: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:38:8: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:41:15: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:43:16: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:45:12: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:47:16: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:48:12: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:51:16: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:52:12: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:54:18: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:56:4: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:60:10: warning: unsequenced modification and access to \'a\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:67:6: warning: unsequenced modification and access to \'q\' [-Wunsequenced]","clang/test/Sema/warn-unsequenced.c:77:10: warning: unsequenced modification and access to \'a\' [-Wunsequenced]"}
		}
	},
	["warn_unsigned_abs"]={
		[l]={"absolute-value"},
		[k]="absolute-value",
		[b]="warn_unsigned_abs",
		[c]="taking the absolute value of unsigned type %0 has no effect",
		[d]="taking the absolute value of unsigned type A has no effect",
		[e]=j,
		[f]="taking the absolute value of unsigned type (.*?) has no effect",
		[g]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]",
		[a]=n,
		[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions.","Add -Wabsolute-value, warnings about absolute value functions.\n\nThe warnings fall into three groups.\n1) Using an absolute value function of the wrong type, for instance, using the\nint absolute value function when the argument is a floating point type.\n2) Using the improper sized absolute value function, for instance, using abs\nwhen the argument is a long long.  llabs should be used instead.\n\nFrom these two cases, an implicit conversion will occur which may cause\nunexpected behavior.  Where possible, suggest the proper absolute value\nfunction to use, and which header to include if the function is not available.\n\n3) Taking the absolute value of an unsigned value.  In addition to this warning,\nsuggest to remove the function call.  This usually indicates a logic error\nsince the programmer assumed negative values would have been possible.\n\nllvm-svn: 202211"},
		[h]={{y,12025,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // ...\n  // Unsigned types cannot be negative.  Suggest removing the absolute value\n  // function call.\n  if (ArgType->isUnsignedIntegerType()) {\n    // ...\n    Diag(Call->getExprLoc(), diag::warn_unsigned_abs) << ArgType << ParamType;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1410,"///                      diag::warn_unsigned_abs,"}},
		[m]={
			["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:15:9: warning: taking the absolute value of unsigned type \'unsigned int\' has no effect [-Wabsolute-value]"}
		}
	},
	["warn_unsigned_always_true_comparison"]={
		[l]={Wb,"tautological-unsigned-zero-compare","type-limits"},
		[k]="tautological-unsigned-zero-compare",
		[b]={{nil,p,"warn_unsigned_always_true_comparison"}},
		[c]={{nil,p,"result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4"}},
		[d]={{nil,p,{Qb,{kb,"unsigned expression"}," C ",{"unsigned expression",kb}," is always E"}}},
		[e]=j,
		[f]="result of comparison of (?:(.*?)|unsigned expression) (.*?) (?:unsigned expression|(.*?)) is always (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-unsigned\\-zero\\-compare[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values","[Sema] Diagnose tautological comparison with type\'s min/max values\n\nSummary:\nCurrently, clang only diagnoses completely out-of-range comparisons (e.g. `char` and constant `300`),\nand comparisons of unsigned and `0`. But gcc also does diagnose the comparisons with the\n`std::numeric_limits<>::max()` / `std::numeric_limits<>::min()` so to speak\n\nFinally Fixes https://bugs.llvm.org/show_bug.cgi?id=34147\nContinuation of https://reviews.llvm.org/D37565\n\nReviewers: rjmccall, rsmith, aaron.ballman\n\nReviewed By: rsmith\n\nSubscribers: rtrieu, jroelofs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D38101\n\nllvm-svn: 315614"},
		[h]={{y,13890,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  // FIXME: We use a somewhat different formatting for the in-range cases and\n  // cases involving boolean values for historical reasons. We should pick a\n  // consistent way of presenting these diagnostics.\n  if (!InRange || Other->isKnownToHaveBooleanValue()) {\n  // ...\n  } else {\n    // ...\n    unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}},
		[m]={
			["clang/test/Sema/compare.c"]={"clang/test/Sema/compare.c:90:19: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:89:20: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:81:13: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:285:11: warning: result of comparison of 0 <= unsigned expression is always true [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:284:11: warning: result of comparison of unsigned expression >= 0 is always true [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:283:11: warning: result of comparison of 0 > unsigned expression is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:282:13: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:297:11: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]","clang/test/Sema/compare.c:299:11: warning: result of comparison of unsigned expression < 0 is always false [-Wtautological-unsigned-zero-compare]"}
		}
	},
	["warn_unsigned_bitfield_assigned_signed_enum"]={
		[l]={"bitfield-enum-conversion",rb,Nb},
		[k]="bitfield-enum-conversion",
		[b]={{nil,w,"warn_unsigned_bitfield_assigned_signed_enum"}},
		[c]={{nil,w,"assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values"}},
		[d]={{nil,w,"assigning value of signed enum type B to unsigned bit-field A; negative enumerators of enum B will be converted to positive values"}},
		[e]=j,
		[f]="assigning value of signed enum type (.*?) to unsigned bit\\-field (.*?); negative enumerators of enum (.*?) will be converted to positive values",
		[g]=" \\[(?:\\-Werror,)?\\-Wbitfield\\-enum\\-conversion[^\\]]*\\]",
		[a]={{nil,w,Rb}},
		[i]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values","Warn on enum assignment to bitfields that can\'t fit all values\n\nThis adds -Wbitfield-enum-conversion, which warns on implicit\nconversions that happen on bitfield assignment that change the value of\nsome enumerators.\n\nValues of enum type typically take on a very small range of values, so\nthey are frequently stored in bitfields. Unfortunately, there is no\nconvenient way to calculate the minimum number of bits necessary to\nstore all possible values at compile time, so users usually hard code a\nbitwidth that works today and widen it as necessary to pass basic\ntesting and validation. This is very error-prone, and leads to stale\nwidths as enums grow. This warning aims to catch such bugs.\n\nThis would have found two real bugs in clang and two instances of\nquestionable code. See r297680 and r297654 for the full description of\nthe issues.\n\nThis warning is currently disabled by default while we investigate its\nusefulness outside of LLVM.\n\nThe major cause of false positives with this warning is this kind of\nenum:\n  enum E { W, X, Y, Z, SENTINEL_LAST };\nThe last enumerator is an invalid value used to validate inputs or size\nan array. Depending on the prevalance of this style of enum across a\ncodebase, this warning may be more or less feasible to deploy. It also\nhas trouble on sentinel values such as ~0U.\n\nReviewers: rsmith, rtrieu, thakis\n\nReviewed By: thakis\n\nSubscribers: hfinkel, voskresensky.vladimir, sashab, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D30923\n\nllvm-svn: 297761"},
		[h]={{y,14084,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  // ...\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      // ...\n      if (SignedEnum && !SignedBitfield) {\n        DiagID = diag::warn_unsigned_bitfield_assigned_signed_enum;"}},
		[m]={
			["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:27:14: warning: assigning value of signed enum type \'TwoBitsSigned\' to unsigned bit-field \'two_bits\'; negative enumerators of enum \'TwoBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:29:14: warning: assigning value of signed enum type \'ThreeBitsSigned\' to unsigned bit-field \'two_bits\'; negative enumerators of enum \'ThreeBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:38:16: warning: assigning value of signed enum type \'TwoBitsSigned\' to unsigned bit-field \'three_bits\'; negative enumerators of enum \'TwoBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:40:16: warning: assigning value of signed enum type \'ThreeBitsSigned\' to unsigned bit-field \'three_bits\'; negative enumerators of enum \'ThreeBitsSigned\' will be converted to positive values [-Wbitfield-enum-conversion]"}
		}
	},
	["warn_unsigned_char_always_true_comparison"]={
		[l]={Wb,"tautological-unsigned-char-zero-compare","type-limits"},
		[k]="tautological-unsigned-char-zero-compare",
		[b]={{nil,C,"warn_unsigned_char_always_true_comparison"}},
		[c]={{nil,C,"result of comparison of %select{%3|char expression}0 %2 %select{char expression|%3}0 is always %4, since char is interpreted as unsigned"}},
		[d]={{nil,C,{Qb,{kb,"char expression"}," C ",{"char expression",kb}," is always E, since char is interpreted as unsigned"}}},
		[e]=j,
		[f]="result of comparison of (?:(.*?)|char expression) (.*?) (?:char expression|(.*?)) is always (.*?), since char is interpreted as unsigned",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-unsigned\\-char\\-zero\\-compare[^\\]]*\\]",
		[a]={{nil,C,n}},
		[i]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
		[h]={{y,13889,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  // FIXME: We use a somewhat different formatting for the in-range cases and\n  // cases involving boolean values for historical reasons. We should pick a\n  // consistent way of presenting these diagnostics.\n  if (!InRange || Other->isKnownToHaveBooleanValue()) {\n  // ...\n  } else {\n    // ...\n    unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}}
	},
	["warn_unsigned_enum_always_true_comparison"]={
		[l]={Wb,"tautological-unsigned-enum-zero-compare","type-limits"},
		[k]="tautological-unsigned-enum-zero-compare",
		[b]={{nil,p,"warn_unsigned_enum_always_true_comparison"}},
		[c]={{nil,p,"result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4"}},
		[d]={{nil,p,{Qb,{kb,"unsigned enum expression"}," C ",{"unsigned enum expression",kb}," is always E"}}},
		[e]=j,
		[f]="result of comparison of (?:(.*?)|unsigned enum expression) (.*?) (?:unsigned enum expression|(.*?)) is always (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wtautological\\-unsigned\\-enum\\-zero\\-compare[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"bd1fc22043b7",1507839411,"[Sema] Diagnose tautological comparison with type\'s min/max values","[Sema] Diagnose tautological comparison with type\'s min/max values\n\nSummary:\nCurrently, clang only diagnoses completely out-of-range comparisons (e.g. `char` and constant `300`),\nand comparisons of unsigned and `0`. But gcc also does diagnose the comparisons with the\n`std::numeric_limits<>::max()` / `std::numeric_limits<>::min()` so to speak\n\nFinally Fixes https://bugs.llvm.org/show_bug.cgi?id=34147\nContinuation of https://reviews.llvm.org/D37565\n\nReviewers: rjmccall, rsmith, aaron.ballman\n\nReviewed By: rsmith\n\nSubscribers: rtrieu, jroelofs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D38101\n\nllvm-svn: 315614"},
		[h]={{y,13888,"static bool CheckTautologicalComparison(Sema &S, BinaryOperator *E, Expr *Constant, Expr *Other, const llvm::APSInt &Value, bool RhsConstant) {\n  // ...\n  // FIXME: We use a somewhat different formatting for the in-range cases and\n  // cases involving boolean values for historical reasons. We should pick a\n  // consistent way of presenting these diagnostics.\n  if (!InRange || Other->isKnownToHaveBooleanValue()) {\n  // ...\n  } else {\n    // ...\n    unsigned Diag = (isKnownToHaveUnsignedValue(OriginalOther) && Value == 0) ? (HasEnumType(OriginalOther) ? diag::warn_unsigned_enum_always_true_comparison : IsCharTy ? diag::warn_unsigned_char_always_true_comparison : diag::warn_unsigned_always_true_comparison) : diag::warn_tautological_constant_compare;"}},
		[m]={
			["clang/test/Sema/compare.c"]={"clang/test/Sema/compare.c:331:9: warning: result of comparison of unsigned enum expression < 0 is always false [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:337:9: warning: result of comparison of unsigned enum expression >= 0 is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:346:9: warning: result of comparison of 0 <= unsigned enum expression is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:348:9: warning: result of comparison of 0 > unsigned enum expression is always false [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:357:9: warning: result of comparison of unsigned enum expression < 0 is always false [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:363:9: warning: result of comparison of unsigned enum expression >= 0 is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:372:10: warning: result of comparison of 0 <= unsigned enum expression is always true [-Wtautological-unsigned-enum-zero-compare]","clang/test/Sema/compare.c:374:10: warning: result of comparison of 0 > unsigned enum expression is always false [-Wtautological-unsigned-enum-zero-compare]"}
		}
	},
	["warn_unsupported_branch_protection"]={
		[l]={Db},
		[k]=Db,
		[b]={{nil,u,"warn_unsupported_branch_protection"}},
		[c]={{nil,u,"invalid branch protection option \'%0\' in \'%1\'"}},
		[d]={{nil,u,"invalid branch protection option \'A\' in \'B\'"}},
		[e]=j,
		[f]="invalid branch protection option \'(.*?)\' in \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]",
		[a]={{nil,u,E}},
		[i]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
		[h]={{"clang/lib/Driver/ToolChains/Clang.cpp",1618,"static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool isAArch64) {\n  // ...\n  if (A->getOption().matches(options::OPT_msign_return_address_EQ)) {\n  // ...\n  } else {\n    // ...\n    if (!isAArch64 && PBP.Key == \"b_key\")\n      D.Diag(diag::warn_unsupported_branch_protection) << \"b-key\" << A->getAsString(Args);"}},
		[m]={
			["clang/test/Preprocessor/arm-target-features.c"]={"clang: warning: invalid branch protection option \'b-key\' in \'-mbranch-protection=bti+pac-ret+b-key+leaf\' [-Wbranch-protection]"}
		}
	},
	["warn_unsupported_branch_protection_spec"]={
		[l]={Db},
		[k]=Db,
		[b]={{nil,u,"warn_unsupported_branch_protection_spec"}},
		[c]={{nil,u,"unsupported branch protection specification \'%0\'"}},
		[d]={{nil,u,"unsupported branch protection specification \'A\'"}},
		[e]=j,
		[f]="unsupported branch protection specification \'(.*?)\'",
		[g]=" \\[(?:\\-Werror,)?\\-Wbranch\\-protection[^\\]]*\\]",
		[a]={{nil,u,n}},
		[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[h]={{x,3463,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (!DiagMsg.empty())\n    Diag(LiteralLoc, diag::warn_unsupported_branch_protection_spec) << DiagMsg;"}},
		[m]={
			["clang/test/Sema/arm-branch-protection-attr-err.c"]={"clang/test/Sema/arm-branch-protection-attr-err.c:19:23: warning: unsupported branch protection specification \'b-key\' [-Wbranch-protection]"}
		}
	},
	["warn_unsupported_lifetime_extension"]={
		[l]={Vb},
		[k]=Vb,
		[b]={{nil,t,"warn_unsupported_lifetime_extension"}},
		[c]={{nil,t,"sorry, lifetime extension of %select{temporary|backing array of initializer list}0 created by aggregate initialization using default member initializer is not supported; lifetime of %select{temporary|backing array}0 will end at the end of the full-expression"}},
		[d]={{nil,t,{"sorry, lifetime extension of ",{"temporary","backing array of initializer list"}," created by aggregate initialization using default member initializer is not supported; lifetime of ",{"temporary","backing array"}," will end at the end of the full-expression"}}},
		[e]=j,
		[f]="sorry, lifetime extension of (?:temporary|backing array of initializer list) created by aggregate initialization using default member initializer is not supported; lifetime of (?:temporary|backing array) will end at the end of the full\\-expression",
		[g]=" \\[(?:\\-Werror,)?\\-Wdangling[^\\]]*\\]",
		[a]={{nil,t,n}},
		[i]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a","Warn if a local variable\'s initializer retains a pointer/reference to a\nnon-lifetime-extended temporary object.\n\nllvm-svn: 337790"},
		[h]={{sb,8143,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Extended: {\n      // ...\n      case PathLifetimeKind::ShouldExtend:\n        // ...\n        Diag(DiagLoc, diag::warn_unsupported_lifetime_extension) << RK << DiagRange;"}},
		[m]={
			["clang/test/SemaCXX/eval-crashes.cpp"]={"clang/test/SemaCXX/eval-crashes.cpp:32:10: warning: sorry, lifetime extension of temporary created by aggregate initialization using default member initializer is not supported; lifetime of temporary will end at the end of the full-expression [-Wdangling]","clang/test/SemaCXX/eval-crashes.cpp:32:10: warning: sorry, lifetime extension of temporary created by aggregate initialization using default member initializer is not supported; lifetime of temporary will end at the end of the full-expression [-Wdangling]"}
		}
	},
	["warn_unsupported_target_attribute"]={
		[l]={R,H},
		[k]=H,
		[b]="warn_unsupported_target_attribute",
		[c]={{nil,B,"%select{unsupported|duplicate|unknown}0%select{| CPU| tune CPU}1 \'%2\' in the \'%select{target|target_clones|target_version}3\' attribute string; \'%select{target|target_clones|target_version}3\' attribute ignored"},{D,u,"%select{unsupported|duplicate|unknown}0%select{| architecture| tune CPU}1 \'%2\' in the \'%select{target|target_clones}3\' attribute string; \'%select{target|target_clones}3\' attribute ignored"},{C,J,"%select{unsupported|duplicate|unknown}0%select{| architecture| tune CPU}1 \'%2\' in the \'target\' attribute string; \'target\' attribute ignored"},{"11.1",t,"%select{unsupported|duplicate}0%select{| architecture}1 \'%2\' in the \'target\' attribute string; \'target\' attribute ignored"},{p,p,"ignoring %select{unsupported|duplicate}0%select{| architecture}1 \'%2\' in the target attribute string"},{w,nil,"Ignoring unsupported \'%0\' in the target attribute string"}},
		[d]={{nil,B,{{ec,ac,"unknown"},{F," CPU"," tune CPU"}," \'C\' in the \'",{"target","target_clones","target_version"},"\' attribute string; \'",{"target","target_clones","target_version"},"\' attribute ignored"}},{D,u,{{ec,ac,"unknown"},{F," architecture"," tune CPU"}," \'C\' in the \'",{"target","target_clones"},"\' attribute string; \'",{"target","target_clones"},"\' attribute ignored"}},{C,J,{{ec,ac,"unknown"},{F," architecture"," tune CPU"}," \'C\' in the \'target\' attribute string; \'target\' attribute ignored"}},{"11.1",t,{{ec,ac},{F," architecture"}," \'C\' in the \'target\' attribute string; \'target\' attribute ignored"}},{p,p,{"ignoring ",{ec,ac},{F," architecture"}," \'C\' in the target attribute string"}},{w,nil,"Ignoring unsupported \'A\' in the target attribute string"}},
		[e]=j,
		[f]="(?:unsupported|duplicate|unknown)(?:| CPU| tune CPU) \'(.*?)\' in the \'(?:target|target_clones|target_version)\' attribute string; \'(?:target|target_clones|target_version)\' attribute ignored",
		[g]=V,
		[a]=n,
		[i]={"789a7ad1a855",1434072965,"Add a warning for unsupported elements of the target attribute.","Add a warning for unsupported elements of the target attribute.\n\nSince we\'re ignoring the tune= and fpmath= attributes go ahead\nand add a warning alerting people to the fact that we\'re going\nto ignore that part of it during code generation and tie it to\nthe attribute warning set.\n\nllvm-svn: 239583"},
		[h]={{x,3417,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (AttrStr.contains(\"fpmath=\"))\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"fpmath=\" << Target;"},{x,3423,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  // Diagnose use of tune if target doesn\'t support it.\n  if (!Context.getTargetInfo().supportsTargetAttributeTune() && AttrStr.contains(\"tune=\"))\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"tune=\" << Target;"},{x,3431,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (!ParsedAttrs.CPU.empty() && !Context.getTargetInfo().isValidCPUName(ParsedAttrs.CPU))\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unknown << CPU << ParsedAttrs.CPU << Target;"},{x,3436,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (!ParsedAttrs.Tune.empty() && !Context.getTargetInfo().isValidCPUName(ParsedAttrs.Tune))\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unknown << Tune << ParsedAttrs.Tune << Target;"},{x,3440,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (ParsedAttrs.Duplicate != \"\")\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Duplicate << None << ParsedAttrs.Duplicate << Target;"},{x,3446,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  for (const auto &Feature : ParsedAttrs.Features) {\n    // ...\n    if (!Context.getTargetInfo().isValidFeatureName(CurFeature))\n      return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << CurFeature << Target;"},{x,3457,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (!Context.getTargetInfo().validateBranchProtection(ParsedAttrs.BranchProtection, ParsedAttrs.CPU, BPI, DiagMsg)) {\n    if (DiagMsg.empty())\n      return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"branch-protection\" << Target;"},{x,3483,"// Check Target Version attrs\nbool Sema::checkTargetVersionAttr(SourceLocation LiteralLoc, StringRef &AttrStr, bool &isDefault) {\n  // ...\n  for (auto &CurFeature : Features) {\n    // ...\n    if (!Context.getTargetInfo().validateCpuSupports(CurFeature))\n      return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << CurFeature << TargetVersion;"},{x,3526,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  // Warn on empty at the beginning of a string.\n  if (Str.size() == 0)\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"\" << TargetClones;"},{x,3540,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (Cur.empty())\n      return Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"\" << TargetClones;"},{x,3559,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n      // AArch64 target clones specific\n      if (Cur == \"default\") {\n      // ...\n      } else {\n        // ...\n        while (!CurParts.second.empty()) {\n          // ...\n          if (!TInfo.validateCpuSupports(CurFeature)) {\n            Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << CurFeature << TargetClones;"},{x,3591,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n    // ...\n    } else {\n      // Other targets ( currently X86 )\n      if (Cur.startswith(\"arch=\")) {\n        if (!Context.getTargetInfo().isValidCPUName(Cur.drop_front(sizeof(\"arch=\") - 1)))\n          return Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << CPU << Cur.drop_front(sizeof(\"arch=\") - 1) << TargetClones;"},{x,3598,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  while (!Parts.second.empty()) {\n    // ...\n    if (TInfo.getTriple().isAArch64()) {\n    // ...\n    } else {\n      // Other targets ( currently X86 )\n      if (Cur.startswith(\"arch=\")) {\n      // ...\n      } else if (Cur == \"default\") {\n      // ...\n      } else if (!Context.getTargetInfo().isValidFeatureName(Cur))\n        return Diag(CurLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << Cur << TargetClones;"},{x,3607,"bool Sema::checkTargetClonesAttrString(SourceLocation LiteralLoc, StringRef Str, const StringLiteral *Literal, bool &HasDefault, bool &HasCommas, bool &HasNotDefault, SmallVectorImpl<SmallString<64>> &StringsBuffer) {\n  // ...\n  if (Str.rtrim().endswith(\",\"))\n    return Diag(LiteralLoc, diag::warn_unsupported_target_attribute) << Unsupported << None << \"\" << TargetClones;"}},
		[m]={
			["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:6:36: warning: unsupported \'default\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:55:35: warning: unsupported \'\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:59:36: warning: unsupported \'default\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:59:36: warning: unsupported \'default\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:61:36: warning: unsupported \'\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:64:36: warning: unsupported \'bs\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]","clang/test/Sema/attr-target-clones-aarch64.c:68:46: warning: unsupported \'\' in the \'target_clones\' attribute string; \'target_clones\' attribute ignored [-Wignored-attributes]"}
		}
	},
	["warn_unused_but_set_parameter"]={
		[l]={F,o,Cb,"unused-but-set-parameter"},
		[k]="unused-but-set-parameter",
		[b]={{nil,C,"warn_unused_but_set_parameter"}},
		[c]={{nil,C,"parameter %0 set but not used"}},
		[d]={{nil,C,"parameter A set but not used"}},
		[e]=j,
		[f]="parameter (.*?) set but not used",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-but\\-set\\-parameter[^\\]]*\\]",
		[a]={{nil,C,n}},
		[i]={Lb,1615397021,Kb,Mb},
		[h]={{G,2205,"void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver) {\n  // ...\n  unsigned DiagID = isa<ParmVarDecl>(VD) ? diag::warn_unused_but_set_parameter : diag::warn_unused_but_set_variable;"}},
		[m]={
			["clang/test/SemaCXX/warn-unused-but-set-parameters-cpp.cpp"]={"clang/test/SemaCXX/warn-unused-but-set-parameters-cpp.cpp:4:12: warning: parameter \'y\' set but not used [-Wunused-but-set-parameter]","clang/test/SemaCXX/warn-unused-but-set-parameters-cpp.cpp:12:15: warning: parameter \'y\' set but not used [-Wunused-but-set-parameter]"}
		}
	},
	["warn_unused_but_set_variable"]={
		[l]={o,q,r,K,"unused-but-set-variable"},
		[k]="unused-but-set-variable",
		[b]={{nil,C,"warn_unused_but_set_variable"}},
		[c]={{nil,C,"variable %0 set but not used"}},
		[d]={{nil,C,"variable A set but not used"}},
		[e]=j,
		[f]="variable (.*?) set but not used",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-but\\-set\\-variable[^\\]]*\\]",
		[a]={{nil,C,L}},
		[i]={Lb,1615397021,Kb,Mb},
		[h]={{G,2206,"void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver) {\n  // ...\n  unsigned DiagID = isa<ParmVarDecl>(VD) ? diag::warn_unused_but_set_parameter : diag::warn_unused_but_set_variable;"}},
		[m]={
			["clang/test/SemaObjC/objc-precise-lifetime-unused-variable.m"]={"clang/test/SemaObjC/objc-precise-lifetime-unused-variable.m:17:8: warning: variable \'y2\' set but not used [-Wunused-but-set-variable]","clang/test/SemaObjC/objc-precise-lifetime-unused-variable.m:10:6: warning: variable \'x2\' set but not used [-Wunused-but-set-variable]"}
		}
	},
	["warn_unused_call"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]="warn_unused_call",
		[c]="ignoring return value of function declared with %0 attribute",
		[d]="ignoring return value of function declared with A attribute",
		[e]=j,
		[f]="ignoring return value of function declared with (.*?) attribute",
		[g]=tb,
		[a]=L,
		[i]={"1a6babf1f41c",1255409628,"make the diagnostic in the \'unused result\' warning more precise","make the diagnostic in the \'unused result\' warning more precise\nabout the reason, rdar://7186119.\n\nllvm-svn: 83940"},
		[h]={{P,300,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    // ...\n    // If the callee has attribute pure, const, or warn_unused_result, warn with\n    // a more specific message to make it clear what is happening. If the call\n    // is written in a macro body, only warn if it has the warn_unused_result\n    // attribute.\n    if (const Decl *FD = CE->getCalleeDecl()) {\n      // ...\n      if (FD->hasAttr<PureAttr>()) {\n        Diag(Loc, diag::warn_unused_call) << R1 << R2 << \"pure\";"},{P,304,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    // ...\n    // If the callee has attribute pure, const, or warn_unused_result, warn with\n    // a more specific message to make it clear what is happening. If the call\n    // is written in a macro body, only warn if it has the warn_unused_result\n    // attribute.\n    if (const Decl *FD = CE->getCalleeDecl()) {\n      // ...\n      if (FD->hasAttr<ConstAttr>()) {\n        Diag(Loc, diag::warn_unused_call) << R1 << R2 << \"const\";"}},
		[m]={
			["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:28:3: warning: ignoring return value of function declared with const attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:92:3: warning: ignoring return value of function declared with pure attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:93:3: warning: ignoring return value of function declared with const attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:94:3: warning: ignoring return value of function declared with const attribute [-Wunused-value]","clang/test/Sema/unused-expr.c:143:15: warning: ignoring return value of function declared with pure attribute [-Wunused-value]"}
		}
	},
	["warn_unused_comma_left_operand"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]={{nil,u,"warn_unused_comma_left_operand"}},
		[c]={{nil,u,"left operand of comma operator has no effect"}},
		[d]={{nil,u,"left operand of comma operator has no effect"}},
		[e]=j,
		[f]="left operand of comma operator has no effect",
		[g]=tb,
		[a]={{nil,u,L}},
		[i]={Lb,1615397021,Kb,Mb},
		[h]={{A,14667,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // ...\n  S.DiagnoseUnusedExprResult(LHS.get(), diag::warn_unused_comma_left_operand);"},{P,386,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (DiagID != diag::warn_unused_comma_left_operand || !isSFINAEContext())"}},
		[m]={
			["clang/test/Parser/objc-messaging-1.m"]={"clang/test/Parser/objc-messaging-1.m:9:26: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:9:28: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:11:26: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:11:28: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:26: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:28: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:35: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:13:37: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:15:34: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:15:37: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:17:33: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:17:36: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:19:37: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:19:40: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:23:3: warning: left operand of comma operator has no effect [-Wunused-value]","clang/test/Parser/objc-messaging-1.m:23:6: warning: left operand of comma operator has no effect [-Wunused-value]"}
		}
	},
	["warn_unused_comparison"]={
		[l]={o,q,r,K,"unused-comparison",O},
		[k]="unused-comparison",
		[b]="warn_unused_comparison",
		[c]={{nil,p,"%select{equality|inequality|relational|three-way}0 comparison result unused"},{w,nil,"%select{%select{|in}1equality|relational}0 comparison result unused"}},
		[d]={{nil,p,{{"equality","inequality","relational","three-way"}," comparison result unused"}},{w,nil,{{{{F,"in"},"equality"},"relational"}," comparison result unused"}}},
		[e]=j,
		[f]="(?:equality|inequality|relational|three\\-way) comparison result unused",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-comparison[^\\]]*\\]",
		[a]=L,
		[i]={"e2669397f1cf",1313573677,"Treating the unused equality comparisons as something other than part of","Treating the unused equality comparisons as something other than part of\n-Wunused was a mistake. It resulted in duplicate warnings and lots of\nother hacks. Instead, this should be a special sub-category to\n-Wunused-value, much like -Wunused-result is.\n\nMoved to -Wunused-comparison, moved the implementation to piggy back on\nthe -Wunused-value implementation instead of rolling its own, different\nmechanism for catching all of the \"interesting\" statements.\n\nI like the unused-value mechanism for this better, but its currently\nmissing several top-level statements. For now, I\'ve FIXME-ed out those\ntest cases. I\'ll enhance the generic infrastructure to catch these\nstatements in a subsequent patch.\n\nThis patch also removes the cast-to-void fixit hint. This hint isn\'t\navailable on any of the other -Wunused-value diagnostics, and if we want\nit to be, we should add it generically rather than in one specific case.\n\nllvm-svn: 137822"},
		[h]={{P,185,"/// Diagnose unused comparisons, both builtin and overloaded operators.\n/// For \'==\' and \'!=\', suggest fixits for \'=\' or \'|=\'.\n///\n/// Adding a cast to void (or other expression wrappers) will prevent the\n/// warning from firing.\nstatic bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {\n  // ...\n  S.Diag(Loc, diag::warn_unused_comparison) << (unsigned)Kind << E->getSourceRange();"}},
		[m]={
			["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:10:6: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:14:5: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:57:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:59:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:62:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:65:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:69:7: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:71:10: warning: relational comparison result unused [-Wunused-comparison]","clang/test/Sema/unused-expr.c:73:12: warning: relational comparison result unused [-Wunused-comparison]"}
		}
	},
	["warn_unused_const_variable"]={
		[l]={o,q,r,K,"unused-const-variable","unused-variable"},
		[k]="unused-const-variable",
		[b]="warn_unused_const_variable",
		[c]="unused variable %0",
		[d]="unused variable A",
		[e]=j,
		[f]="unused variable (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-const\\-variable[^\\]]*\\]",
		[a]=L,
		[i]={"c531daefd9cc",1378895855,"Split -Wunused-variable warning.","Split -Wunused-variable warning.\n\nWith r190382, -Wunused-variable warns about unused const variables when\nappropriate. For codebases that use -Werror, this poses a problem as\nexisting unused const variables need to be cleaned up first. To make the\ntransistion easier, this patch splits -Wunused-variable by pulling out\nan additional -Wunused-const-variable (by default activated along with\n-Wunused-variable).\n\nllvm-svn: 190508"},
		[h]={{M,1401,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n      // ...\n      } else {\n        // ...\n        if (DiagD->isReferenced()) {\n        // ...\n        } else if (DiagD->getDescribedVarTemplate()) {\n        // ...\n        } else if (DiagD->getType().isConstQualified()) {\n          // ...\n          if (SM.getMainFileID() != SM.getFileID(DiagD->getLocation()) || !PP.getLangOpts().IsHeaderFile)\n            Diag(DiagD->getLocation(), diag::warn_unused_const_variable) << DiagD << DiagRange;"}},
		[m]={
			["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:124:15:{124:15-124:27}: warning: unused variable \'const_unused\' [-Wunused-const-variable]"}
		}
	},
	["warn_unused_constructor"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]={{nil,s,"warn_unused_constructor"}},
		[c]={{nil,s,"ignoring temporary created by a constructor declared with %0 attribute"}},
		[d]={{nil,s,"ignoring temporary created by a constructor declared with A attribute"}},
		[e]=j,
		[f]="ignoring temporary created by a constructor declared with (.*?) attribute",
		[g]=tb,
		[a]={{nil,s,L}},
		[i]={"46441fdb3c1d",1564067456,"Implement P1771","Implement P1771\n\nAs passed in the Cologne meeting and treated by Core as a DR,\n[[nodiscard]] was applied to constructors so that they can be diagnosed\nin cases where the user forgets a variable name for a type.\n\nThe intent is to enable the library to start using this on the\nconstructors of scope_guard/lock_guard.\n\nDifferential Revision: https://reviews.llvm.org/D64914\n\nllvm-svn: 367027"},
		[h]={{P,211,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n  // ...\n  if (Msg.empty()) {\n    if (IsCtor)\n      return S.Diag(Loc, diag::warn_unused_constructor) << A << R1 << R2;"}},
		[m]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:98:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute [-Wunused-value]"}
		}
	},
	["warn_unused_constructor_msg"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]={{nil,s,"warn_unused_constructor_msg"}},
		[c]={{nil,s,"ignoring temporary created by a constructor declared with %0 attribute: %1"}},
		[d]={{nil,s,"ignoring temporary created by a constructor declared with A attribute: B"}},
		[e]=j,
		[f]="ignoring temporary created by a constructor declared with (.*?) attribute\\: (.*?)",
		[g]=tb,
		[a]={{nil,s,L}},
		[i]={"46441fdb3c1d",1564067456,"Implement P1771","Implement P1771\n\nAs passed in the Cologne meeting and treated by Core as a DR,\n[[nodiscard]] was applied to constructors so that they can be diagnosed\nin cases where the user forgets a variable name for a type.\n\nThe intent is to enable the library to start using this on the\nconstructors of scope_guard/lock_guard.\n\nDifferential Revision: https://reviews.llvm.org/D64914\n\nllvm-svn: 367027"},
		[h]={{P,216,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n  // ...\n  if (IsCtor)\n    return S.Diag(Loc, diag::warn_unused_constructor_msg) << A << Msg << R1 << R2;"}},
		[m]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:99:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t let that S-Char go! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:102:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t throw me away either! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:113:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t throw me away! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:115:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t let that S-Char go! [-Wunused-value]","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp:121:3: warning: ignoring temporary created by a constructor declared with \'nodiscard\' attribute: Don\'t throw me away! [-Wunused-value]"}
		}
	},
	["warn_unused_container_subscript_expr"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]="warn_unused_container_subscript_expr",
		[c]="container access result unused - container access should not be used for side effects",
		[d]="container access result unused - container access should not be used for side effects",
		[e]=j,
		[f]="container access result unused \\- container access should not be used for side effects",
		[g]=tb,
		[a]=L,
		[i]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137"},
		[h]={{P,345,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n  // ...\n  } else if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E)) {\n    // ...\n    if (isa<ObjCSubscriptRefExpr>(Source))\n      DiagID = diag::warn_unused_container_subscript_expr;"}},
		[m]={
			["clang/test/SemaObjC/objc-container-subscripting-2.m"]={"clang/test/SemaObjC/objc-container-subscripting-2.m:25:3: warning: container access result unused - container access should not be used for side effects [-Wunused-value]","clang/test/SemaObjC/objc-container-subscripting-2.m:28:3: warning: container access result unused - container access should not be used for side effects [-Wunused-value]"}
		}
	},
	["warn_unused_exception_param"]={
		[l]={"unused-exception-parameter"},
		[k]="unused-exception-parameter",
		[b]="warn_unused_exception_param",
		[c]="unused exception parameter %0",
		[d]="unused exception parameter A",
		[e]=j,
		[f]="unused exception parameter (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-exception\\-parameter[^\\]]*\\]",
		[a]=n,
		[i]={"3f324d569bfc",1272912674,"Diagnose unused exception parameters under a different warning group","Diagnose unused exception parameters under a different warning group\n(-Wunused-exception-parameter) than normal variables, since it\'s more\ncommon to name and then ignore an exception parameter. This warning is\nneither enabled by default nor by -Wall. Fixes <rdar://problem/7931045>.\n\nllvm-svn: 102931"},
		[h]={{G,2150,"/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used\n/// unless they are marked attr(unused).\nvoid Sema::DiagnoseUnusedDecl(const NamedDecl *D, DiagReceiverTy DiagReceiver) {\n  // ...\n  if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())\n    DiagID = diag::warn_unused_exception_param;"}},
		[m]={
			["clang/test/SemaObjC/warn-unused-exception-param.m"]={"clang/test/SemaObjC/warn-unused-exception-param.m:3:21: warning: unused exception parameter \'a\' [-Wunused-exception-parameter]"}
		}
	},
	["warn_unused_expr"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]="warn_unused_expr",
		[c]="expression result unused",
		[d]="expression result unused",
		[e]=j,
		[f]="expression result unused",
		[g]=tb,
		[a]=L,
		[i]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files.","Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"},
		[h]={{"clang/lib/Interpreter/Interpreter.cpp",360,"llvm::Expected<PartialTranslationUnit &> Interpreter::Parse(llvm::StringRef Code) {\n  // ...\n  getCompilerInstance()->getDiagnostics().setSeverity(clang::diag::warn_unused_expr, diag::Severity::Ignored, SourceLocation());"},{yb,8843,"ExprResult Sema::ActOnFinishFullExpr(Expr *FE, SourceLocation CC, bool DiscardedValue, bool IsConstexpr, bool IsTemplateArgument) {\n  // ...\n  if (DiscardedValue) {\n    // ...\n    DiagnoseUnusedExprResult(FullExpr.get(), diag::warn_unused_expr);"}},
		[m]={
			["clang/test/CodeGen/2004-06-08-OpaqueStructArg.c"]={"clang/test/CodeGen/2004-06-08-OpaqueStructArg.c:6:7: warning: expression result unused [-Wunused-value]"}
		}
	},
	["warn_unused_function"]={
		[l]={o,q,r,K,"unused-function"},
		[k]="unused-function",
		[b]="warn_unused_function",
		[c]="unused function %0",
		[d]="unused function A",
		[e]=j,
		[f]="unused function (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-function[^\\]]*\\]",
		[a]=L,
		[i]={"90073804fb1c",1265933250,"Implementing unused function warning.","Implementing unused function warning.\n\nllvm-svn: 95940"},
		[h]={{M,1378,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n        // ...\n        if (DiagD->isReferenced()) {\n        // ...\n        } else {\n          if (FD->getDescribedFunctionTemplate())\n          // ...\n          else\n            Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function : diag::warn_unused_function) << DiagD << DiagRange;"}},
		[m]={
			["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:52:12:{52:12-52:23}: warning: unused function \'unused_func\' [-Wunused-function]","clang/test/Misc/diag-unused-source-ranges.cpp:69:6:{69:6-69:21}: warning: unused function \'arrow_decl<int>\' [-Wunused-function]"}
		}
	},
	["warn_unused_label"]={
		[l]={o,q,r,K,"unused-label"},
		[k]="unused-label",
		[b]="warn_unused_label",
		[c]="unused label %0",
		[d]="unused label A",
		[e]=j,
		[f]="unused label (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-label[^\\]]*\\]",
		[a]=L,
		[i]={"72664df10386",1284931285,"Implement -Wunused-label.","Implement -Wunused-label.\n\nllvm-svn: 114315"},
		[h]={{G,2152,"/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used\n/// unless they are marked attr(unused).\nvoid Sema::DiagnoseUnusedDecl(const NamedDecl *D, DiagReceiverTy DiagReceiver) {\n  // ...\n  if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())\n  // ...\n  else if (isa<LabelDecl>(D))\n    DiagID = diag::warn_unused_label;"}},
		[m]={
			["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:7:5: warning: unused label \'A\' [-Wunused-label]"}
		}
	},
	["warn_unused_lambda_capture"]={
		[l]={o,q,r,K,"unused-lambda-capture"},
		[k]="unused-lambda-capture",
		[b]={{nil,w,"warn_unused_lambda_capture"}},
		[c]={{nil,w,"lambda capture %0 is not %select{used|required to be captured for this use}1"}},
		[d]={{nil,w,{"lambda capture A is not ",{"used","required to be captured for this use"}}}},
		[e]=j,
		[f]="lambda capture (.*?) is not (?:used|required to be captured for this use)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-lambda\\-capture[^\\]]*\\]",
		[a]={{nil,w,L}},
		[i]={"87a036259bb4",1484319666,"[Sema] Add warning for unused lambda captures","[Sema] Add warning for unused lambda captures\n\nSummary:\nWarn when a lambda explicitly captures something that is not used in its body.\n\nThe warning is part of -Wunused and can be enabled with -Wunused-lambda-capture.\n\nReviewers: rsmith, arphaman, jbcoe, aaron.ballman\n\nSubscribers: Quuxplusone, arphaman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D28467\n\nllvm-svn: 291905"},
		[h]={{"clang/lib/Sema/SemaLambda.cpp",1879,"bool Sema::DiagnoseUnusedLambdaCapture(SourceRange CaptureRange, const Capture &From) {\n  // ...\n  auto diag = Diag(From.getLocation(), diag::warn_unused_lambda_capture);"}},
		[m]={
			["clang/test/SemaCXX/warn-unused-lambda-capture.cpp"]={"clang/test/SemaCXX/warn-unused-lambda-capture.cpp:43:36: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:44:43: warning: lambda capture \'i\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:45:45: warning: lambda capture \'i\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:46:42: warning: lambda capture \'k\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:49:41: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:52:50: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:55:45: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:58:51: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:64:38: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:68:37: warning: lambda capture \'trivial\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:71:53: warning: lambda capture \'cons\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:87:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:90:39: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:99:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:102:39: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:111:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:123:34: warning: lambda capture \'this\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:200:23: warning: lambda capture \'c\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:148:36: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:149:43: warning: lambda capture \'i\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:150:45: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:151:42: warning: lambda capture \'k\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:152:50: warning: lambda capture \'k\' is not required to be captured for this use [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:155:41: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:158:50: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:161:45: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:164:51: warning: lambda capture \'j\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:168:53: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:172:38: warning: lambda capture \'i\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:176:37: warning: lambda capture \'trivial\' is not used [-Wunused-lambda-capture]","clang/test/SemaCXX/warn-unused-lambda-capture.cpp:179:53: warning: lambda capture \'cons\' is not used [-Wunused-lambda-capture]"}
		}
	},
	["warn_unused_local_typedef"]={
		[l]={o,q,r,K,"unused-local-typedef","unused-local-typedefs"},
		[k]="unused-local-typedef",
		[b]="warn_unused_local_typedef",
		[c]="unused %select{typedef|type alias}0 %1",
		[d]={{nil,nil,{"unused ",{"typedef","type alias"}," B"}}},
		[e]=j,
		[f]="unused (?:typedef|type alias) (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-local\\-typedef[^\\]]*\\]",
		[a]=L,
		[i]={"728894340f2a",1409966755,"Add -Wunused-local-typedef, a warning that finds unused local typedefs.","Add -Wunused-local-typedef, a warning that finds unused local typedefs.\n\nThe warning warns on TypedefNameDecls -- typedefs and C++11 using aliases --\nthat are !isReferenced(). Since the isReferenced() bit on TypedefNameDecls\nwasn\'t used for anything before this warning it wasn\'t always set correctly,\nso this patch also adds a few missing MarkAnyDeclReferenced() calls in\nvarious places for TypedefNameDecls.\n\nThis is made a bit complicated due to local typedefs possibly being used only\nafter their local scope has closed. Consider:\n\n    template <class T>\n    void template_fun(T t) {\n      typename T::Foo s3foo;  // YYY\n      (void)s3foo;\n    }\n    void template_fun_user() {\n      struct Local {\n        typedef int Foo;  // XXX\n      } p;\n      template_fun(p);\n    }\n\nHere the typedef in XXX is only used at end-of-translation unit, when YYY in\ntemplate_fun() gets instantiated. To handle this, typedefs that are unused when\ntheir scope exits are added to a set of potentially unused typedefs, and that\nset gets checked at end-of-TU. Typedefs that are still unused at that point then\nget warned on. There\'s also serialization code for this set, so that the\nwarning works with precompiled headers and modules. For modules, the warning\nis emitted when the module is built, for precompiled headers each time the\nheader gets used.\n\nFinally, consider a function using C++14 auto return types to return a local\ntype defined in a header:\n\n    auto f() {\n      struct S { typedef int a; };\n      return S();\n    }\n\nHere, the typedef escapes its local scope and could be used by only some\ntranslation units including the header. To not warn on this, add a\nRecursiveASTVisitor that marks all delcs on local types returned from auto\nfunctions as referenced. (Except if it\'s a function with internal linkage, or\nthe decls are private and the local type has no friends -- in these cases, it\n_is_ safe to warn.)\n\nSeveral of the included testcases (most of the interesting ones) were provided\nby Richard Smith.\n\n(gcc\'s spelling -Wunused-local-typedefs is supported as an alias for this\nwarning.)\n\nllvm-svn: 217298"},
		[h]={{M,1022,"void Sema::emitAndClearUnusedLocalTypedefWarnings() {\n  // ...\n  for (const TypedefNameDecl *TD : UnusedLocalTypedefNameCandidates) {\n    // ...\n    Diag(TD->getLocation(), diag::warn_unused_local_typedef) << isa<TypeAliasDecl>(TD) << TD->getDeclName();"}},
		[m]={
			["clang/test/Sema/c2x-maybe_unused.c"]={"clang/test/Sema/c2x-maybe_unused.c:21:15: warning: unused typedef \'I\' [-Wunused-local-typedef]"}
		}
	},
	["warn_unused_member_function"]={
		[l]={"unused-member-function"},
		[k]="unused-member-function",
		[b]="warn_unused_member_function",
		[c]="unused member function %0",
		[d]="unused member function A",
		[e]=j,
		[f]="unused member function (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-member\\-function[^\\]]*\\]",
		[a]=n,
		[i]={"beb71b315a89",1282082804,"Rename -Wunused-method -> -Wunused-member-function.","Rename -Wunused-method -> -Wunused-member-function.\n\nllvm-svn: 111305"},
		[h]={{M,1377,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n        // ...\n        if (DiagD->isReferenced()) {\n        // ...\n        } else {\n          if (FD->getDescribedFunctionTemplate())\n          // ...\n          else\n            Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD) ? diag::warn_unused_member_function : diag::warn_unused_function) << DiagD << DiagRange;"}},
		[m]={
			["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:106:8:{106:8-106:11}: warning: unused member function \'fun\' [-Wunused-member-function]"}
		}
	},
	["warn_unused_parameter"]={
		[l]={F,o,Cb,"unused-parameter"},
		[k]="unused-parameter",
		[b]="warn_unused_parameter",
		[c]="unused parameter %0",
		[d]="unused parameter A",
		[e]=j,
		[f]="unused parameter (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-parameter[^\\]]*\\]",
		[a]=n,
		[i]={"c9c02ed8f499",1245455562,"Keep track of when declarations are \"used\" according to C and","Keep track of when declarations are \"used\" according to C and\nC++. This logic is required to trigger implicit instantiation of\nfunction templates and member functions of class templates, which will\nbe implemented separately.\n\nThis commit includes support for -Wunused-parameter, printing warnings\nfor named parameters that are not used within a function/Objective-C\nmethod/block. Fixes <rdar://problem/6505209>.\n\nllvm-svn: 73797"},
		[h]={{G,14854,"void Sema::DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters) {\n  // ...\n  for (const ParmVarDecl *Parameter : Parameters) {\n    if (!Parameter->isReferenced() && Parameter->getDeclName() && !Parameter->hasAttr<UnusedAttr>()) {\n      Diag(Parameter->getLocation(), diag::warn_unused_parameter) << Parameter->getDeclName();"}},
		[m]={
			["clang/test/Sema/attr-unused.c"]={"clang/test/Sema/attr-unused.c:29:12: warning: unused parameter \'x\' [-Wunused-parameter]"}
		}
	},
	["warn_unused_private_field"]={
		[l]={o,q,r,K,"unused-private-field"},
		[k]="unused-private-field",
		[b]="warn_unused_private_field",
		[c]="private field %0 is not used",
		[d]="private field A is not used",
		[e]=j,
		[f]="private field (.*?) is not used",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-private\\-field[^\\]]*\\]",
		[a]=L,
		[i]={"0baec549a3f4",1338971524,"Introduce -Wunused-private-field. If enabled, this warning detects","Introduce -Wunused-private-field. If enabled, this warning detects\nunused private fields of classes that are fully defined in the current\ntranslation unit.\n\nllvm-svn: 158054"},
		[h]={{M,1413,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {"},{M,1422,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!Diags.isIgnored(diag::warn_unused_private_field, SourceLocation())) {\n    // ...\n    for (const NamedDecl *D : UnusedPrivateFields) {\n      // ...\n      if (RD && !RD->isUnion() && IsRecordFullyDefined(RD, RecordsComplete, MNCComplete)) {\n        Diag(D->getLocation(), diag::warn_unused_private_field) << D->getDeclName();"},{T,3704,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (!Diags.isIgnored(diag::warn_unused_private_field, FD->getLocation())) {"}},
		[m]={
			["clang/test/SemaCXX/warn-unused-private-field.cpp"]={"clang/test/SemaCXX/warn-unused-private-field.cpp:45:7: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:63:7: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:124:7: warning: private field \'primitive_type_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:125:6: warning: private field \'pointer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:126:7: warning: private field \'no_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:127:7: warning: private field \'default_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:128:7: warning: private field \'other_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:129:14: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:130:7: warning: private field \'in_class_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:132:11: warning: private field \'trivial_initializer_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:137:11: warning: private field \'trivial_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:173:7: warning: private field \'unused_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:205:7: warning: private field \'d\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:240:9: warning: private field \'p_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:241:8: warning: private field \'b_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:242:6: warning: private field \'a_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:243:9: warning: private field \'p2_\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:253:12: warning: private field \'p\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:262:7: warning: private field \'a\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:277:7: warning: private field \'n\' is not used [-Wunused-private-field]","clang/test/SemaCXX/warn-unused-private-field.cpp:285:7: warning: private field \'n\' is not used [-Wunused-private-field]"}
		}
	},
	["warn_unused_property_backing_ivar"]={
		[l]={o,q,r,K,"unused-property-ivar"},
		[k]="unused-property-ivar",
		[b]="warn_unused_property_backing_ivar",
		[c]="ivar %0 which backs the property is not referenced in this property\'s accessor",
		[d]="ivar A which backs the property is not referenced in this property\'s accessor",
		[e]=j,
		[f]="ivar (.*?) which backs the property is not referenced in this property\'s accessor",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-property\\-ivar[^\\]]*\\]",
		[a]=L,
		[i]={"5e3429c39583",1382737490,"ObjectiveC: under -Wunused-property-ivar warn if property\'s","ObjectiveC: under -Wunused-property-ivar warn if property\'s\nbacking warning is not used in one of its accessor methods.\n// rdar://14989999\n\nllvm-svn: 193439"},
		[h]={{N,5346,"void Sema::DiagnoseUnusedBackingIvarInAccessor(Scope *S, const ObjCImplementationDecl *ImplD) {\n  // ...\n  for (const auto *CurMethod : ImplD->instance_methods()) {\n    unsigned DIAG = diag::warn_unused_property_backing_ivar;"}},
		[m]={
			["clang/test/SemaObjC/unused-backing-ivar-warning.m"]={"clang/test/SemaObjC/unused-backing-ivar-warning.m:18:1: warning: ivar \'_x\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:21:1: warning: ivar \'_y\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:25:1: warning: ivar \'_v\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:38:1: warning: ivar \'_u\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:48:1: warning: ivar \'tIvar\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:122:1: warning: ivar \'q\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:123:1: warning: ivar \'q\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:124:1: warning: ivar \'r\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:145:1: warning: ivar \'_p2\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]","clang/test/SemaObjC/unused-backing-ivar-warning.m:200:1: warning: ivar \'_cidURL1\' which backs the property is not referenced in this property\'s accessor [-Wunused-property-ivar]"}
		}
	},
	["warn_unused_property_expr"]={
		[l]={"unused-getter-return-value"},
		[k]="unused-getter-return-value",
		[b]="warn_unused_property_expr",
		[c]="property access result unused - getters should not be used for side effects",
		[d]="property access result unused - getters should not be used for side effects",
		[e]=j,
		[f]="property access result unused \\- getters should not be used for side effects",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-getter\\-return\\-value[^\\]]*\\]",
		[a]=n,
		[i]={"2ba5ca9d4fd5",1250441847,"Improve the diagnostic emitted when an unused ObjC property getter","Improve the diagnostic emitted when an unused ObjC property getter\nis found.  Instead of complaining about a generic \"unused expr\",\nemit:\nt.m:7:3: warning: property access result unused - getters should not have side effects\n\nWhile objc property getters *could* have side effects, according to\nthe language best practices, they *shouldn\'t*.  Hopefully the\ndiagnostic now gets this across.\n\nllvm-svn: 79192"},
		[h]={{P,347,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(E)) {\n  // ...\n  } else if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E)) {\n    // ...\n    if (isa<ObjCSubscriptRefExpr>(Source))\n    // ...\n    else if (isa<ObjCPropertyRefExpr>(Source))\n      DiagID = diag::warn_unused_property_expr;"}},
		[m]={
			["clang/test/SemaObjC/access-property-getter.m"]={"clang/test/SemaObjC/access-property-getter.m:8:5: warning: property access result unused - getters should not be used for side effects [-Wunused-getter-return-value]"}
		}
	},
	["warn_unused_result"]={
		[l]={o,q,r,K,"unused-result",O},
		[k]="unused-result",
		[b]="warn_unused_result",
		[c]="ignoring return value of function declared with %0 attribute",
		[d]="ignoring return value of function declared with A attribute",
		[e]=j,
		[f]="ignoring return value of function declared with (.*?) attribute",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-result[^\\]]*\\]",
		[a]=L,
		[i]={"a17cf6330fb7",1312499464,"Specialize diag::warn_unused_call for the \"warn_unused_result\" attribute, so","Specialize diag::warn_unused_call for the \"warn_unused_result\" attribute, so\nit can be controlled with a distinct flag.\n\nllvm-svn: 136941"},
		[h]={{P,212,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n  // ...\n  if (Msg.empty()) {\n    // ...\n    return S.Diag(Loc, diag::warn_unused_result) << A << R1 << R2;"}},
		[m]={
			["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:79:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:91:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:95:12: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:104:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]","clang/test/Sema/unused-expr.c:148:3: warning: ignoring return value of function declared with \'warn_unused_result\' attribute [-Wunused-result]"}
		}
	},
	["warn_unused_result_msg"]={
		[l]={o,q,r,K,"unused-result",O},
		[k]="unused-result",
		[b]={{nil,s,"warn_unused_result_msg"}},
		[c]={{nil,s,"ignoring return value of function declared with %0 attribute: %1"}},
		[d]={{nil,s,"ignoring return value of function declared with A attribute: B"}},
		[e]=j,
		[f]="ignoring return value of function declared with (.*?) attribute\\: (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-result[^\\]]*\\]",
		[a]={{nil,s,L}},
		[i]={"3bef014e7d79",1563609394,"Implement P1301R4, which allows specifying an optional message on the [[nodiscard]] attribute.","Implement P1301R4, which allows specifying an optional message on the [[nodiscard]] attribute.\n\nThis also bumps the attribute feature test value and introduces the notion of a C++2a extension warning.\n\nllvm-svn: 366626"},
		[h]={{P,218,"static bool DiagnoseNoDiscard(Sema &S, const WarnUnusedResultAttr *A, SourceLocation Loc, SourceRange R1, SourceRange R2, bool IsCtor) {\n  // ...\n  return S.Diag(Loc, diag::warn_unused_result_msg) << A << Msg << R1 << R2;"}},
		[m]={
			["clang/test/Sema/c2x-nodiscard.c"]={"clang/test/Sema/c2x-nodiscard.c:35:3: warning: ignoring return value of function declared with \'nodiscard\' attribute: Wrong [-Wunused-result]"}
		}
	},
	["warn_unused_result_typedef_unsupported_spelling"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,D,"warn_unused_result_typedef_unsupported_spelling"}},
		[c]={{nil,D,"\'[[%select{nodiscard|gnu::warn_unused_result}0]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead"}},
		[d]={{nil,D,{"\'[[",{"nodiscard","gnu::warn_unused_result"},"]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead"}}},
		[e]=j,
		[f]="\'\\[\\[(?:nodiscard|gnu\\:\\:warn_unused_result)\\]\\]\' attribute ignored when applied to a typedef; consider using \'__attribute__\\(\\(warn_unused_result\\)\\)\' or \'\\[\\[clang\\:\\:warn_unused_result\\]\\]\' instead",
		[g]=V,
		[a]={{nil,D,n}},
		[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
		[h]={{x,3182,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if ((!AL.isGNUAttribute() && !(AL.isStandardAttributeSyntax() && AL.isClangScope())) && isa<TypedefNameDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::warn_unused_result_typedef_unsupported_spelling) << AL.isGNUScope();"}},
		[m]={
			["clang/test/SemaCXX/warn-unused-result.cpp"]={"clang/test/SemaCXX/warn-unused-result.cpp:271:3: warning: \'[[nodiscard]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead [-Wignored-attributes]","clang/test/SemaCXX/warn-unused-result.cpp:272:3: warning: \'[[gnu::warn_unused_result]]\' attribute ignored when applied to a typedef; consider using \'__attribute__((warn_unused_result))\' or \'[[clang::warn_unused_result]]\' instead [-Wignored-attributes]"}
		}
	},
	["warn_unused_template"]={
		[l]={"unused-template"},
		[k]="unused-template",
		[b]={{nil,w,"warn_unused_template"}},
		[c]={{nil,w,"unused %select{function|variable}0 template %1"}},
		[d]={{nil,w,{"unused ",{nb,Ob}," template B"}}},
		[e]=j,
		[f]="unused (?:function|variable) template (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-template[^\\]]*\\]",
		[a]={{nil,w,n}},
		[i]={"64e1e1ea0a27",1494329141,"Reland \"Warn about unused static file scope function template declarations.\"","Reland \"Warn about unused static file scope function template declarations.\"\n\nThis patch reinstates r299930, reverted in r299956, as a separate diagnostic\noption (-Wunused-template). \n\nllvm-svn: 302518"},
		[h]={{M,1373,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n        // ...\n        if (DiagD->isReferenced()) {\n        // ...\n        } else {\n          if (FD->getDescribedFunctionTemplate())\n            Diag(DiagD->getLocation(), diag::warn_unused_template) << /*function=*/0 << DiagD << DiagRange;"},{M,1395,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n      // ...\n      } else {\n        // ...\n        if (DiagD->isReferenced()) {\n        // ...\n        } else if (DiagD->getDescribedVarTemplate()) {\n          Diag(DiagD->getLocation(), diag::warn_unused_template) << /*variable=*/1 << DiagD << DiagRange;"}},
		[m]={
			["clang/test/Misc/diag-unused-source-ranges.cpp"]={"clang/test/Misc/diag-unused-source-ranges.cpp:28:32:{28:32-28:37}: warning: unused function template \'templ\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:42:10:{42:10-42:13}: warning: unused function template \'foo\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:63:6:{63:6-63:16}: warning: unused function template \'arrow_decl\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:76:10:{76:10-76:20}: warning: unused function template \'func_templ\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:90:35:{90:35-90:47}: warning: unused function template \'never_called\' [-Wunused-template]","clang/test/Misc/diag-unused-source-ranges.cpp:97:22:{97:22-97:31}: warning: unused variable template \'var_templ\' [-Wunused-template]"}
		}
	},
	["warn_unused_variable"]={
		[l]={o,q,r,K,"unused-variable"},
		[k]="unused-variable",
		[b]="warn_unused_variable",
		[c]="unused variable %0",
		[d]="unused variable A",
		[e]=j,
		[f]="unused variable (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-variable[^\\]]*\\]",
		[a]=L,
		[i]={"3beaf9bbcdb3",1255037742,"Implement support for -Wunused-variable, from Oscar Bonilla!","Implement support for -Wunused-variable, from Oscar Bonilla!\n\nllvm-svn: 83577"},
		[h]={{M,1404,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  // If there were errors, disable \'unused\' warnings since they will mostly be\n  // noise. Don\'t warn for a use from a module: either we should warn on all\n  // file-scope declarations in modules or not at all, but whether the\n  // declaration is used is immaterial.\n  if (!Diags.hasErrorOccurred() && TUKind != TU_Module) {\n    // Output warning for unused file scoped decls.\n    for (UnusedFileScopedDeclsType::iterator I = UnusedFileScopedDecls.begin(ExternalSource.get()), E = UnusedFileScopedDecls.end(); I != E; ++I) {\n      // ...\n      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I)) {\n      // ...\n      } else {\n        // ...\n        if (DiagD->isReferenced()) {\n        // ...\n        } else if (DiagD->getDescribedVarTemplate()) {\n        // ...\n        } else if (DiagD->getType().isConstQualified()) {\n        // ...\n        } else {\n          Diag(DiagD->getLocation(), diag::warn_unused_variable) << DiagD << DiagRange;"},{G,2154,"/// DiagnoseUnusedDecl - Emit warnings about declarations that are not used\n/// unless they are marked attr(unused).\nvoid Sema::DiagnoseUnusedDecl(const NamedDecl *D, DiagReceiverTy DiagReceiver) {\n  // ...\n  if (isa<VarDecl>(D) && cast<VarDecl>(D)->isExceptionVariable())\n  // ...\n  else if (isa<LabelDecl>(D))\n  // ...\n  else\n    DiagID = diag::warn_unused_variable;"}},
		[m]={
			["clang/test/SemaTemplate/unused-variables.cpp"]={"clang/test/SemaTemplate/unused-variables.cpp:12:6: warning: unused variable \'x1\' [-Wunused-variable]","clang/test/SemaTemplate/unused-variables.cpp:18:5: warning: unused variable \'u\' [-Wunused-variable]"}
		}
	},
	["warn_unused_voidptr"]={
		[l]={o,q,r,K,O},
		[k]=O,
		[b]="warn_unused_voidptr",
		[c]="expression result unused; should this cast be to \'void\'?",
		[d]="expression result unused; should this cast be to \'void\'?",
		[e]=j,
		[f]="expression result unused; should this cast be to \'void\'\\?",
		[g]=tb,
		[a]=L,
		[i]={"2351cb9139a4",1270592654,"Devote a special diagnostic to the typo","Devote a special diagnostic to the typo\n  (void*) someFunction(5, 10, 15, 20);\nwhere the cast is presumably meant to be to \'void\'.\n\nllvm-svn: 100574"},
		[h]={{P,369,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  }\n  // Diagnose \"(void*) blah\" as a typo for \"(void) blah\".\n  else if (const CStyleCastExpr *CE = dyn_cast<CStyleCastExpr>(E)) {\n    // ...\n    // We really do want to use the non-canonical type here.\n    if (T == Context.VoidPtrTy) {\n      // ...\n      Diag(Loc, diag::warn_unused_voidptr) << FixItHint::CreateRemoval(TL.getStarLoc());"}},
		[m]={
			["clang/test/Sema/unused-expr.c"]={"clang/test/Sema/unused-expr.c:112:3: warning: expression result unused; should this cast be to \'void\'? [-Wunused-value]"}
		}
	},
	["warn_unused_volatile"]={
		[l]={"unused-volatile-lvalue"},
		[k]="unused-volatile-lvalue",
		[b]="warn_unused_volatile",
		[c]="expression result unused; assign into a variable to force a volatile load",
		[d]="expression result unused; assign into a variable to force a volatile load",
		[e]=j,
		[f]="expression result unused; assign into a variable to force a volatile load",
		[g]=" \\[(?:\\-Werror,)?\\-Wunused\\-volatile\\-lvalue[^\\]]*\\]",
		[a]=n,
		[i]={"c11535c248cf",1337820425,"Add a warning to diagnose statements in C++ like \"*(volatile int*)x;\".  Conceptually, this is part o...","Add a warning to diagnose statements in C++ like \"*(volatile int*)x;\".  Conceptually, this is part of -Wunused-value, but I added a separate flag -Wunused-volatile-lvalue so it doesn\'t get turned off by accident with -Wno-unused-value.  I also made a few minor improvements to existing unused value warnings in the process.  <rdar://problem/11516811>.\n\nllvm-svn: 157362"},
		[h]={{P,379,"void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) {\n  // ...\n  // Tell the user to assign it into a variable to force a volatile load if this\n  // isn\'t an array.\n  if (E->isGLValue() && E->getType().isVolatileQualified() && !E->getType()->isArrayType()) {\n    Diag(Loc, diag::warn_unused_volatile) << R1 << R2;"}},
		[m]={
			["clang/test/CodeGen/exprs.c"]={"clang/test/CodeGen/exprs.c:166:3: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]","clang/test/CodeGen/exprs.c:166:14: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]","clang/test/CodeGen/exprs.c:166:25: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]","clang/test/CodeGen/exprs.c:166:59: warning: expression result unused; assign into a variable to force a volatile load [-Wunused-volatile-lvalue]"}
		}
	},
	["warn_use_in_invalid_state"]={
		[l]={qb},
		[k]=qb,
		[b]="warn_use_in_invalid_state",
		[c]="invalid invocation of method \'%0\' on object \'%1\' while it is in the \'%2\' state",
		[d]="invalid invocation of method \'A\' on object \'B\' while it is in the \'C\' state",
		[e]=j,
		[f]="invalid invocation of method \'(.*?)\' on object \'(.*?)\' while it is in the \'(.*?)\' state",
		[g]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
		[a]=n,
		[i]={"210791a021a1",1380922086,"Consumed Analysis:  Change callable_when so that it can take a list of states","Consumed Analysis:  Change callable_when so that it can take a list of states\nthat a function can be called in.  This reduced the total number of annotations\nneeded and makes writing more complicated behaviour less burdensome.\nPatch by chriswails@gmail.com.\n\nllvm-svn: 191983"},
		[h]={{v,2148,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  // ...\n  void warnUseInInvalidState(StringRef MethodName, StringRef VariableName, StringRef State, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_use_in_invalid_state) << MethodName << VariableName << State);"}},
		[m]={
			["clang/test/SemaCXX/warn-consumed-analysis.cpp"]={
				[1]="clang/test/SemaCXX/warn-consumed-analysis.cpp:95:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[2]="clang/test/SemaCXX/warn-consumed-analysis.cpp:96:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[3]="clang/test/SemaCXX/warn-consumed-analysis.cpp:99:3: warning: invalid invocation of method \'operator*\' on object \'var4\' while it is in the \'consumed\' state [-Wconsumed]",
				[4]="clang/test/SemaCXX/warn-consumed-analysis.cpp:105:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[5]="clang/test/SemaCXX/warn-consumed-analysis.cpp:112:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[6]="clang/test/SemaCXX/warn-consumed-analysis.cpp:121:3: warning: invalid invocation of method \'operator*\' on object \'D2\' while it is in the \'consumed\' state [-Wconsumed]",
				[7]="clang/test/SemaCXX/warn-consumed-analysis.cpp:123:6: warning: invalid invocation of method \'~DestructorTester\' on object \'D0\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[8]="clang/test/SemaCXX/warn-consumed-analysis.cpp:125:3: warning: invalid invocation of method \'~DestructorTester\' on object \'D1\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[9]="clang/test/SemaCXX/warn-consumed-analysis.cpp:125:3: warning: invalid invocation of method \'~DestructorTester\' on object \'D0\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[10]="clang/test/SemaCXX/warn-consumed-analysis.cpp:150:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[11]="clang/test/SemaCXX/warn-consumed-analysis.cpp:156:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[12]="clang/test/SemaCXX/warn-consumed-analysis.cpp:165:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[13]="clang/test/SemaCXX/warn-consumed-analysis.cpp:169:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[14]="clang/test/SemaCXX/warn-consumed-analysis.cpp:177:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[15]="clang/test/SemaCXX/warn-consumed-analysis.cpp:183:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[16]="clang/test/SemaCXX/warn-consumed-analysis.cpp:187:5: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[17]="clang/test/SemaCXX/warn-consumed-analysis.cpp:201:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[18]="clang/test/SemaCXX/warn-consumed-analysis.cpp:202:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[19]="clang/test/SemaCXX/warn-consumed-analysis.cpp:210:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[20]="clang/test/SemaCXX/warn-consumed-analysis.cpp:211:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[21]="clang/test/SemaCXX/warn-consumed-analysis.cpp:219:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[22]="clang/test/SemaCXX/warn-consumed-analysis.cpp:220:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[23]="clang/test/SemaCXX/warn-consumed-analysis.cpp:224:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[24]="clang/test/SemaCXX/warn-consumed-analysis.cpp:225:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[25]="clang/test/SemaCXX/warn-consumed-analysis.cpp:233:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[26]="clang/test/SemaCXX/warn-consumed-analysis.cpp:234:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[27]="clang/test/SemaCXX/warn-consumed-analysis.cpp:242:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[28]="clang/test/SemaCXX/warn-consumed-analysis.cpp:243:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[29]="clang/test/SemaCXX/warn-consumed-analysis.cpp:251:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[30]="clang/test/SemaCXX/warn-consumed-analysis.cpp:252:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[31]="clang/test/SemaCXX/warn-consumed-analysis.cpp:260:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[32]="clang/test/SemaCXX/warn-consumed-analysis.cpp:261:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[33]="clang/test/SemaCXX/warn-consumed-analysis.cpp:274:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[34]="clang/test/SemaCXX/warn-consumed-analysis.cpp:275:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[35]="clang/test/SemaCXX/warn-consumed-analysis.cpp:276:5: warning: invalid invocation of method \'operator*\' on object \'var2\' while it is in the \'consumed\' state [-Wconsumed]",
				[36]="clang/test/SemaCXX/warn-consumed-analysis.cpp:307:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[37]="clang/test/SemaCXX/warn-consumed-analysis.cpp:308:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[38]="clang/test/SemaCXX/warn-consumed-analysis.cpp:312:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[39]="clang/test/SemaCXX/warn-consumed-analysis.cpp:313:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[40]="clang/test/SemaCXX/warn-consumed-analysis.cpp:316:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[41]="clang/test/SemaCXX/warn-consumed-analysis.cpp:317:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[42]="clang/test/SemaCXX/warn-consumed-analysis.cpp:322:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[43]="clang/test/SemaCXX/warn-consumed-analysis.cpp:325:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[44]="clang/test/SemaCXX/warn-consumed-analysis.cpp:326:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[45]="clang/test/SemaCXX/warn-consumed-analysis.cpp:330:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[46]="clang/test/SemaCXX/warn-consumed-analysis.cpp:331:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[47]="clang/test/SemaCXX/warn-consumed-analysis.cpp:334:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[48]="clang/test/SemaCXX/warn-consumed-analysis.cpp:339:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[49]="clang/test/SemaCXX/warn-consumed-analysis.cpp:340:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[50]="clang/test/SemaCXX/warn-consumed-analysis.cpp:343:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[51]="clang/test/SemaCXX/warn-consumed-analysis.cpp:344:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[52]="clang/test/SemaCXX/warn-consumed-analysis.cpp:348:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[53]="clang/test/SemaCXX/warn-consumed-analysis.cpp:349:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[54]="clang/test/SemaCXX/warn-consumed-analysis.cpp:352:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[55]="clang/test/SemaCXX/warn-consumed-analysis.cpp:353:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[56]="clang/test/SemaCXX/warn-consumed-analysis.cpp:357:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[57]="clang/test/SemaCXX/warn-consumed-analysis.cpp:358:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[58]="clang/test/SemaCXX/warn-consumed-analysis.cpp:366:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[59]="clang/test/SemaCXX/warn-consumed-analysis.cpp:367:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[60]="clang/test/SemaCXX/warn-consumed-analysis.cpp:380:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'unknown\' state [-Wconsumed]",
				[61]="clang/test/SemaCXX/warn-consumed-analysis.cpp:381:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'unknown\' state [-Wconsumed]",
				[62]="clang/test/SemaCXX/warn-consumed-analysis.cpp:382:5: warning: invalid invocation of method \'operator*\' on object \'var2\' while it is in the \'unknown\' state [-Wconsumed]",
				[63]="clang/test/SemaCXX/warn-consumed-analysis.cpp:422:3: warning: invalid invocation of method \'operator*\' on object \'param\' while it is in the \'consumed\' state [-Wconsumed]",
				[64]="clang/test/SemaCXX/warn-consumed-analysis.cpp:451:3: warning: invalid invocation of method \'operator*\' on object \'Param0\' while it is in the \'consumed\' state [-Wconsumed]",
				[65]="clang/test/SemaCXX/warn-consumed-analysis.cpp:452:3: warning: invalid invocation of method \'operator*\' on object \'Param1\' while it is in the \'consumed\' state [-Wconsumed]",
				[66]="clang/test/SemaCXX/warn-consumed-analysis.cpp:489:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'unknown\' state [-Wconsumed]",
				[67]="clang/test/SemaCXX/warn-consumed-analysis.cpp:512:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'unknown\' state [-Wconsumed]",
				[68]="clang/test/SemaCXX/warn-consumed-analysis.cpp:516:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'unknown\' state [-Wconsumed]",
				[69]="clang/test/SemaCXX/warn-consumed-analysis.cpp:520:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[70]="clang/test/SemaCXX/warn-consumed-analysis.cpp:538:3: warning: invalid invocation of method \'operator*\' on object \'param\' while it is in the \'unknown\' state [-Wconsumed]",
				[71]="clang/test/SemaCXX/warn-consumed-analysis.cpp:548:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[72]="clang/test/SemaCXX/warn-consumed-analysis.cpp:565:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[73]="clang/test/SemaCXX/warn-consumed-analysis.cpp:571:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[74]="clang/test/SemaCXX/warn-consumed-analysis.cpp:575:3: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[75]="clang/test/SemaCXX/warn-consumed-analysis.cpp:585:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[76]="clang/test/SemaCXX/warn-consumed-analysis.cpp:593:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[77]="clang/test/SemaCXX/warn-consumed-analysis.cpp:603:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[78]="clang/test/SemaCXX/warn-consumed-analysis.cpp:613:3: warning: invalid invocation of method \'operator*\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[79]="clang/test/SemaCXX/warn-consumed-analysis.cpp:622:7: warning: invalid invocation of method \'unconsumedCall\' on object \'var\' while it is in the \'consumed\' state [-Wconsumed]",
				[80]="clang/test/SemaCXX/warn-consumed-analysis.cpp:642:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[81]="clang/test/SemaCXX/warn-consumed-analysis.cpp:646:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[82]="clang/test/SemaCXX/warn-consumed-analysis.cpp:649:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[83]="clang/test/SemaCXX/warn-consumed-analysis.cpp:658:5: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[84]="clang/test/SemaCXX/warn-consumed-analysis.cpp:662:5: warning: invalid invocation of method \'operator*\' on object \'var1\' while it is in the \'consumed\' state [-Wconsumed]",
				[85]="clang/test/SemaCXX/warn-consumed-analysis.cpp:665:3: warning: invalid invocation of method \'operator*\' on object \'var0\' while it is in the \'consumed\' state [-Wconsumed]",
				[86]="clang/test/SemaCXX/warn-consumed-analysis.cpp:777:1: warning: invalid invocation of method \'~Status\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[87]="clang/test/SemaCXX/warn-consumed-analysis.cpp:799:5: warning: invalid invocation of method \'clear\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[88]="clang/test/SemaCXX/warn-consumed-analysis.cpp:819:1: warning: invalid invocation of method \'~Status\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[89]="clang/test/SemaCXX/warn-consumed-analysis.cpp:827:1: warning: invalid invocation of method \'~Status\' on object \'s\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[90]="clang/test/SemaCXX/warn-consumed-analysis.cpp:862:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[91]="clang/test/SemaCXX/warn-consumed-analysis.cpp:874:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[92]="clang/test/SemaCXX/warn-consumed-analysis.cpp:888:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[93]="clang/test/SemaCXX/warn-consumed-analysis.cpp:903:1: warning: invalid invocation of method \'~Status\' on object \'s2\' while it is in the \'unconsumed\' state [-Wconsumed]",
				[94]="clang/test/SemaCXX/warn-consumed-analysis.cpp:916:6: warning: invalid invocation of method \'operator=\' on object \'s1\' while it is in the \'unconsumed\' state [-Wconsumed]"
			}
		}
	},
	["warn_use_of_private_header_outside_module"]={
		[l]={"private-header"},
		[k]="private-header",
		[b]="warn_use_of_private_header_outside_module",
		[c]="use of private header from outside its module: \'%0\'",
		[d]="use of private header from outside its module: \'A\'",
		[e]=Jb,
		[f]="use of private header from outside its module\\: \'(.*?)\'",
		[g]=" \\[[^\\]]*\\-Wprivate\\-header[^\\]]*\\]",
		[a]=cb,
		[i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit...","Allow errors on use of a private module header to be disabled, to better support incremental transition to modules.\n\nllvm-svn: 229788"},
		[h]={{"clang/lib/Lex/ModuleMap.cpp",521,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n  // ...\n  // We have found a header, but it is private.\n  if (Private) {\n    Diags.Report(FilenameLoc, diag::warn_use_of_private_header_outside_module) << Filename;"}},
		[m]={
			["clang/test/Modules/modulemaps-nomodules.cpp"]={"clang/test/Modules/modulemaps-nomodules.cpp:7:10: error: use of private header from outside its module: \'header.h\' [-Wprivate-header]"}
		}
	},
	["warn_use_of_temp_in_invalid_state"]={
		[l]={qb},
		[k]=qb,
		[b]="warn_use_of_temp_in_invalid_state",
		[c]="invalid invocation of method \'%0\' on a temporary object while it is in the \'%1\' state",
		[d]="invalid invocation of method \'A\' on a temporary object while it is in the \'B\' state",
		[e]=j,
		[f]="invalid invocation of method \'(.*?)\' on a temporary object while it is in the \'(.*?)\' state",
		[g]=" \\[(?:\\-Werror,)?\\-Wconsumed[^\\]]*\\]",
		[a]=n,
		[i]={"210791a021a1",1380922086,"Consumed Analysis:  Change callable_when so that it can take a list of states","Consumed Analysis:  Change callable_when so that it can take a list of states\nthat a function can be called in.  This reduced the total number of annotations\nneeded and makes writing more complicated behaviour less burdensome.\nPatch by chriswails@gmail.com.\n\nllvm-svn: 191983"},
		[h]={{v,2140,"class ConsumedWarningsHandler : public ConsumedWarningsHandlerBase {\n  // ...\n  void warnUseOfTempInInvalidState(StringRef MethodName, StringRef State, SourceLocation Loc) override {\n    PartialDiagnosticAt Warning(Loc, S.PDiag(diag::warn_use_of_temp_in_invalid_state) << MethodName << State);"}},
		[m]={
			["clang/test/SemaCXX/warn-consumed-analysis.cpp"]={"clang/test/SemaCXX/warn-consumed-analysis.cpp:138:27: warning: invalid invocation of method \'~DestructorTester\' on a temporary object while it is in the \'unconsumed\' state [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:143:3: warning: invalid invocation of method \'operator*\' on a temporary object while it is in the \'consumed\' state [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:764:3: warning: invalid invocation of method \'~Status\' on a temporary object while it is in the \'unconsumed\' state [-Wconsumed]","clang/test/SemaCXX/warn-consumed-analysis.cpp:780:21: warning: invalid invocation of method \'~Status\' on a temporary object while it is in the \'unconsumed\' state [-Wconsumed]"}
		}
	},
	["warn_used_but_marked_unused"]={
		[l]={"used-but-marked-unused"},
		[k]="used-but-marked-unused",
		[b]="warn_used_but_marked_unused",
		[c]="%0 was marked unused but was used",
		[d]="A was marked unused but was used",
		[e]=j,
		[f]="(.*?) was marked unused but was used",
		[g]=" \\[(?:\\-Werror,)?\\-Wused\\-but\\-marked\\-unused[^\\]]*\\]",
		[a]=n,
		[i]={"73067a02db9a",1287790628,"Warn if a variable marked with the \"unused\" attribute is used. Patch by Darin Adler!","Warn if a variable marked with the \"unused\" attribute is used. Patch by Darin Adler!\n\nllvm-svn: 117184"},
		[h]={{"clang/lib/Sema/SemaAttr.cpp",846,"void Sema::ActOnPragmaUnused(const Token &IdTok, Scope *curScope, SourceLocation PragmaLoc) {\n  // ...\n  // Warn if this was used before being marked unused.\n  if (VD->isUsed())\n    Diag(PragmaLoc, diag::warn_used_but_marked_unused) << Name;"},{A,111,"static void DiagnoseUnusedOfDecl(Sema &S, NamedDecl *D, SourceLocation Loc) {\n  // Warn if this is used but marked unused.\n  if (const auto *A = D->getAttr<UnusedAttr>()) {\n    // [[maybe_unused]] should not diagnose uses, but __attribute__((unused))\n    // should diagnose them.\n    if (A->getSemanticSpelling() != UnusedAttr::CXX11_maybe_unused && A->getSemanticSpelling() != UnusedAttr::C2x_maybe_unused) {\n      // ...\n      if (DC && !DC->hasAttr<UnusedAttr>())\n        S.Diag(Loc, diag::warn_used_but_marked_unused) << D;"}},
		[m]={
			["clang/test/Sema/attr-unused.c"]={"clang/test/Sema/attr-unused.c:23:3: warning: \'Int_unused\' was marked unused but was used [-Wused-but-marked-unused]","clang/test/Sema/attr-unused.c:26:10: warning: \'Test0_unused\' was marked unused but was used [-Wused-but-marked-unused]","clang/test/Sema/attr-unused.c:42:10: warning: \'x\' was marked unused but was used [-Wused-but-marked-unused]"}
		}
	},
	["warn_user_literal_reserved"]={
		[l]={"reserved-identifier","user-defined-literals"},
		[k]="user-defined-literals",
		[b]="warn_user_literal_reserved",
		[c]="user-defined literal suffixes %select{<ERROR>|not starting with \'_\'|containing \'__\'}0 are reserved%select{; no literal will invoke this operator|}1",
		[d]={{nil,nil,{"user-defined literal suffixes ",{"not starting with \'_\'","containing \'__\'"}," are reserved",{"; no literal will invoke this operator",F}}},{B,nil,{"user-defined literal suffixes not starting with \'_\' are reserved",{"; no literal will invoke this operator",F}}}},
		[e]=j,
		[f]="user\\-defined literal suffixes (?:not starting with \'_\'|containing \'__\') are reserved(?:; no literal will invoke this operator|)",
		[g]=" \\[(?:\\-Werror,)?\\-Wuser\\-defined\\-literals[^\\]]*\\]",
		[a]=n,
		[i]={"86325ad2b521",1314744035,"Allow C99 hexfloats in C++0x mode. This change resolves the standards","Allow C99 hexfloats in C++0x mode. This change resolves the standards\ncollision between C99 hexfloats and C++0x user-defined literals by\ngiving C99 hexfloats precedence. Also, warning about user-defined\nliterals that conflict with hexfloats and those that have names that\nare reserved by the implementation. Fixes <rdar://problem/9940194>.\n\nllvm-svn: 138839"},
		[h]={{T,16507,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  if (Status != ReservedLiteralSuffixIdStatus::NotReserved && !getSourceManager().isInSystemHeader(FnDecl->getLocation())) {\n    // ...\n    Diag(FnDecl->getLocation(), diag::warn_user_literal_reserved) << static_cast<int>(Status) << StringLiteralParser::isValidUDSuffix(getLangOpts(), II->getName());"}},
		[m]={
			["clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp:4:6: warning: user-defined literal suffixes not starting with \'_\' are reserved; no literal will invoke this operator [-Wuser-defined-literals]","clang/test/CXX/lex/lex.literal/lex.ext/p10.cpp:5:6: warning: user-defined literal suffixes not starting with \'_\' are reserved; no literal will invoke this operator [-Wuser-defined-literals]"}
		}
	},
	["warn_using_directive_in_header"]={
		[l]={"header-hygiene"},
		[k]="header-hygiene",
		[b]="warn_using_directive_in_header",
		[c]="using namespace directive in global context in header",
		[d]="using namespace directive in global context in header",
		[e]=j,
		[f]="using namespace directive in global context in header",
		[g]=" \\[(?:\\-Werror,)?\\-Wheader\\-hygiene[^\\]]*\\]",
		[a]=n,
		[i]={"96a4bddefbfc",1300464652,"Add an opt-in -Wheader-hygiene, which current diagnoses the use of","Add an opt-in -Wheader-hygiene, which current diagnoses the use of\nglobal using directives in C++ headers, from Elliot Glaysher!\n\nllvm-svn: 127881"},
		[h]={{T,11986,"Decl *Sema::ActOnUsingDirective(Scope *S, SourceLocation UsingLoc, SourceLocation NamespcLoc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *NamespcName, const ParsedAttributesView &AttrList) {\n  // ...\n  if (!R.empty()) {\n    // ...\n    if (IsUsingDirectiveInToplevelContext(CurContext) && !SourceMgr.isInMainFile(SourceMgr.getExpansionLoc(IdentLoc))) {\n      Diag(IdentLoc, diag::warn_using_directive_in_header);"}}
	},
	["warn_utf8_symbol_homoglyph"]={
		[l]={"unicode-homoglyph"},
		[k]="unicode-homoglyph",
		[b]={{nil,p,"warn_utf8_symbol_homoglyph"}},
		[c]={{nil,B,"treating Unicode character <U+%0> as an identifier character rather than as \'%1\' symbol"},{D,p,"treating Unicode character <U+%0> as identifier character rather than as \'%1\' symbol"}},
		[d]={{nil,B,"treating Unicode character <U+A> as an identifier character rather than as \'B\' symbol"},{D,p,"treating Unicode character <U+A> as identifier character rather than as \'B\' symbol"}},
		[e]=j,
		[f]="treating Unicode character \\<U\\+(.*?)\\> as an identifier character rather than as \'(.*?)\' symbol",
		[g]=" \\[(?:\\-Werror,)?\\-Wunicode\\-homoglyph[^\\]]*\\]",
		[a]={{nil,p,cb}},
		[i]={"77091b167fd9",1513257308,"Warn if we find a Unicode homoglyph for a symbol in an identifier.","Warn if we find a Unicode homoglyph for a symbol in an identifier.\n\nSpecifically, warn if:\n * we find a character that the language standard says we must treat as an\n   identifier, and\n * that character is not reasonably an identifier character (it\'s a punctuation\n   character or similar), and \n * it renders identically to a valid non-identifier character in common\n   fixed-width fonts.\n\nSome tools \"helpfully\" substitute the surprising characters for the expected\ncharacters, and replacing semicolons with Greek question marks is a common\n\"prank\".\n\nllvm-svn: 320697"},
		[h]={{ub,1661,"/// After encountering UTF-8 character C and interpreting it as an identifier\n/// character, check whether it\'s a homoglyph for a common non-identifier\n/// source character that is unlikely to be an intentional identifier\n/// character and warn if so.\nstatic void maybeDiagnoseUTF8Homoglyph(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n  // ...\n  if (Homoglyph->Character == C) {\n    if (Homoglyph->LooksLike) {\n      // ...\n      Diags.Report(Range.getBegin(), diag::warn_utf8_symbol_homoglyph) << Range << codepointAsHexString(C) << LooksLikeStr;"}},
		[m]={
			["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:89:6: warning: treating Unicode character <U+037E> as an identifier character rather than as \';\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:90:7: warning: treating Unicode character <U+A789> as an identifier character rather than as \':\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:90:10: warning: treating Unicode character <U+A789> as an identifier character rather than as \':\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:90:19: warning: treating Unicode character <U+037E> as an identifier character rather than as \';\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:6: warning: treating Unicode character <U+FF1D> as an identifier character rather than as \'=\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:9: warning: treating Unicode character <U+FF3B> as an identifier character rather than as \'[\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:12: warning: treating Unicode character <U+FF1D> as an identifier character rather than as \'=\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:15: warning: treating Unicode character <U+FF3D> as an identifier character rather than as \']\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:18: warning: treating Unicode character <U+FF08> as an identifier character rather than as \'(\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:25: warning: treating Unicode character <U+FF09> as an identifier character rather than as \')\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:28: warning: treating Unicode character <U+FF5B> as an identifier character rather than as \'{\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:37: warning: treating Unicode character <U+FF5E> as an identifier character rather than as \'~\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:41: warning: treating Unicode character <U+FF1B> as an identifier character rather than as \';\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:44: warning: treating Unicode character <U+FF5D> as an identifier character rather than as \'}\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:47: warning: treating Unicode character <U+FF08> as an identifier character rather than as \'(\' symbol [-Wunicode-homoglyph]","clang/test/Lexer/unicode.c:92:50: warning: treating Unicode character <U+FF09> as an identifier character rather than as \')\' symbol [-Wunicode-homoglyph]"}
		}
	},
	["warn_utf8_symbol_zero_width"]={
		[l]={"unicode-zero-width"},
		[k]="unicode-zero-width",
		[b]={{nil,I,"warn_utf8_symbol_zero_width"}},
		[c]={{nil,I,"identifier contains Unicode character <U+%0> that is invisible in some environments"}},
		[d]={{nil,I,"identifier contains Unicode character <U+A> that is invisible in some environments"}},
		[e]=j,
		[f]="identifier contains Unicode character \\<U\\+(.*?)\\> that is invisible in some environments",
		[g]=" \\[(?:\\-Werror,)?\\-Wunicode\\-zero\\-width[^\\]]*\\]",
		[a]={{nil,I,cb}},
		[i]={"8ed7776bc404",1536348339,"PR38870: Add warning for zero-width unicode characters appearing in","PR38870: Add warning for zero-width unicode characters appearing in\nidentifiers.\n\nllvm-svn: 341700"},
		[h]={{ub,1664,"/// After encountering UTF-8 character C and interpreting it as an identifier\n/// character, check whether it\'s a homoglyph for a common non-identifier\n/// source character that is unlikely to be an intentional identifier\n/// character and warn if so.\nstatic void maybeDiagnoseUTF8Homoglyph(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n  // ...\n  if (Homoglyph->Character == C) {\n    if (Homoglyph->LooksLike) {\n    // ...\n    } else {\n      Diags.Report(Range.getBegin(), diag::warn_utf8_symbol_zero_width) << Range << codepointAsHexString(C);"}},
		[m]={
			["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:94:9: warning: identifier contains Unicode character <U+FEFF> that is invisible in some environments [-Wunicode-zero-width]","clang/test/Lexer/unicode.c:94:13: warning: identifier contains Unicode character <U+200D> that is invisible in some environments [-Wunicode-zero-width]","clang/test/Lexer/unicode.c:98:8: warning: identifier contains Unicode character <U+200B> that is invisible in some environments [-Wunicode-zero-width]"}
		}
	},
	["warn_va_start_type_is_undefined"]={
		[l]={Ab},
		[k]=Ab,
		[b]="warn_va_start_type_is_undefined",
		[c]="passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the \'register\' keyword}0 to \'va_start\' has undefined behavior",
		[d]={{nil,nil,{"passing ",{"an object that undergoes default argument promotion","an object of reference type","a parameter declared with the \'register\' keyword"}," to \'va_start\' has undefined behavior"}}},
		[e]=j,
		[f]="passing (?:an object that undergoes default argument promotion|an object of reference type|a parameter declared with the \'register\' keyword) to \'va_start\' has undefined behavior",
		[g]=" \\[(?:\\-Werror,)?\\-Wvarargs[^\\]]*\\]",
		[a]=n,
		[i]={"1de59c5d92b9",1461504621,"Improve diagnostic checking for va_start to also warn on other instances of undefined behavior, such...","Improve diagnostic checking for va_start to also warn on other instances of undefined behavior, such as a parameter declared with the register keyword in C, or a parameter of a type that undergoes default argument promotion.\n\nThis helps cover some more of the CERT secure coding rule EXP58-CPP. Pass an object of the correct type to va_start (https://www.securecoding.cert.org/confluence/display/cplusplus/EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start).\n\nllvm-svn: 267338"},
		[h]={{y,8171,"/// Check the arguments to \'__builtin_va_start\' or \'__builtin_ms_va_start\'\n/// for validity.  Emit an error and return true on failure; return false\n/// on success.\nbool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!SecondArgIsLastNamedArgument)\n  // ...\n  else if (IsCRegister || Type->isReferenceType() || Type->isSpecificBuiltinType(BuiltinType::Float) || [=] {\n    // ...\n    Diag(Arg->getBeginLoc(), diag::warn_va_start_type_is_undefined) << Reason;"}},
		[m]={
			["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:32:29: warning: passing an object that undergoes default argument promotion to \'va_start\' has undefined behavior [-Wvarargs]","clang/test/Sema/varargs-x86-64.c:33:30: warning: passing an object that undergoes default argument promotion to \'va_start\' has undefined behavior [-Wvarargs]"}
		}
	},
	["warn_var_decl_not_read_only"]={
		[l]={"read-only-types"},
		[k]="read-only-types",
		[b]={{nil,B,"warn_var_decl_not_read_only"}},
		[c]={{nil,B,"object of type %0 cannot be placed in read-only memory"}},
		[d]={{nil,B,"object of type A cannot be placed in read-only memory"}},
		[e]=j,
		[f]="object of type (.*?) cannot be placed in read\\-only memory",
		[g]=" \\[(?:\\-Werror,)?\\-Wread\\-only\\-types[^\\]]*\\]",
		[a]={{nil,B,n}},
		[i]={eb,1625925174,fb,ob},
		[h]={{G,7438,"// This function emits warning and a corresponding note based on the\n// ReadOnlyPlacementAttr attribute. The warning checks that all global variable\n// declarations of an annotated type must be const qualified.\nvoid emitReadOnlyPlacementAttrWarning(Sema &S, const VarDecl *VD) {\n  // ...\n  if (const auto *ConstDecl = RD->getAttr<ReadOnlyPlacementAttr>()) {\n    S.Diag(VD->getLocation(), diag::warn_var_decl_not_read_only) << RD;"}},
		[m]={
			["clang/test/Sema/attr-read-only-placement.cpp"]={"clang/test/Sema/attr-read-only-placement.cpp:8:3: warning: object of type \'A\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:11:3: warning: object of type \'A\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:20:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:24:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:26:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:28:3: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:33:14: warning: object of type \'B\' cannot be placed in read-only memory [-Wread-only-types]","clang/test/Sema/attr-read-only-placement.cpp:44:3: warning: object of type \'C\' cannot be placed in read-only memory [-Wread-only-types]"}
		}
	},
	["warn_var_deref_requires_any_lock"]={
		[l]={X,Z},
		[k]=Z,
		[b]="warn_var_deref_requires_any_lock",
		[c]={{nil,t,"%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1"},{p,nil,"%select{reading|writing}1 the value pointed to by \'%0\' requires holding %select{any mutex|any mutex exclusively}1"}},
		[d]={{nil,t,{{Y,ab}," the value pointed to by A requires holding ",{"any mutex","any mutex exclusively"}}},{p,nil,{{Y,ab}," the value pointed to by \'A\' requires holding ",{"any mutex","any mutex exclusively"}}}},
		[e]=j,
		[f]="(?:reading|writing) the value pointed to by (.*?) requires holding (?:any mutex|any mutex exclusively)",
		[g]=vb,
		[a]=n,
		[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif...","Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identify situations where we are accessing (reading or writing) guarded variables, and report an error if the appropriate locks are not held.\n\nllvm-svn: 138774"},
		[h]={{v,1947,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleNoMutexHeld(const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc) override {\n    // ...\n    unsigned DiagID = POK == POK_VarAccess ? diag::warn_variable_requires_any_lock : diag::warn_var_deref_requires_any_lock;"}},
		[m]={
			["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:114:11: warning: reading the value pointed to by \'d_\' requires holding any mutex [-Wthread-safety-analysis]"}
		}
	},
	["warn_var_deref_requires_lock"]={
		[l]={X,Z},
		[k]=Z,
		[b]="warn_var_deref_requires_lock",
		[c]={{nil,t,"%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{p,nil,"%select{reading|writing}3 the value pointed to by \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
		[d]={{nil,t,{{Y,ab}," the value pointed to by B requires holding A ",{hb,ib}}},{p,nil,{{Y,ab}," the value pointed to by \'B\' requires holding A ",{hb,ib}}}},
		[e]=j,
		[f]="(?:reading|writing) the value pointed to by (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
		[g]=vb,
		[a]=n,
		[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif...","Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identify situations where we are accessing (reading or writing) guarded variables, and report an error if the appropriate locks are not held.\n\nllvm-svn: 138774"},
		[h]={{v,1994,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n    // ...\n    } else {\n      // ...\n      case POK_VarDereference:\n        DiagID = diag::warn_var_deref_requires_lock;"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={
				[1]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:422:6: warning: writing the value pointed to by \'pgb_field\' requires holding mutex \'sls_mu\' exclusively [-Wthread-safety-analysis]",
				[2]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:424:10: warning: reading the value pointed to by \'pgb_field\' requires holding mutex \'sls_mu\' [-Wthread-safety-analysis]",
				[3]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:426:7: warning: writing the value pointed to by \'pgb_field\' requires holding mutex \'sls_mu\' exclusively [-Wthread-safety-analysis]",
				[4]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:499:4: warning: writing the value pointed to by \'pgb_var\' requires holding mutex \'sls_mu\' exclusively [-Wthread-safety-analysis]",
				[5]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:504:12: warning: reading the value pointed to by \'pgb_var\' requires holding mutex \'sls_mu\' [-Wthread-safety-analysis]",
				[6]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:594:16: warning: reading the value pointed to by \'q\' requires holding mutex \'b1.mu\' [-Wthread-safety-analysis]",
				[7]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1372:4: warning: writing the value pointed to by \'p\' requires holding mutex \'mu\' exclusively [-Wthread-safety-analysis]",
				[8]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1377:16: warning: reading the value pointed to by \'q\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[9]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4328:4: warning: writing the value pointed to by \'d\' requires holding mutex \'mu2_\' exclusively [-Wthread-safety-analysis]",
				[10]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4334:12: warning: reading the value pointed to by \'d\' requires holding mutex \'mu2_\' [-Wthread-safety-analysis]",
				[11]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4458:5: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[12]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4460:9: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[13]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4463:7: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[14]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4465:11: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[15]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4487:6: warning: writing the value pointed to by \'datap2_\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]",
				[16]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4491:14: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[17]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4509:7: warning: reading the value pointed to by \'datap2_\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[18]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4571:10: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[19]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4572:5: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]",
				[20]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4574:12: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[21]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4575:7: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]",
				[22]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4582:5: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]",
				[23]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4584:5: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[24]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4587:7: warning: writing the value pointed to by \'foop\' requires holding mutex \'mu_\' exclusively [-Wthread-safety-analysis]",
				[25]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4589:7: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu_\' [-Wthread-safety-analysis]",
				[26]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4957:10: warning: reading the value pointed to by \'a\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[27]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4958:6: warning: writing the value pointed to by \'a\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[28]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4960:9: warning: reading the value pointed to by \'c\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[29]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4961:5: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[30]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4962:5: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[31]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4964:11: warning: reading the value pointed to by \'c\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[32]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4965:7: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[33]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4966:7: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[34]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4968:9: warning: reading the value pointed to by \'a\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[35]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4969:5: warning: writing the value pointed to by \'a\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[36]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4970:9: warning: reading the value pointed to by \'c\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[37]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4971:5: warning: writing the value pointed to by \'c\' requires holding mutex \'mu2\' exclusively [-Wthread-safety-analysis]",
				[38]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5071:10: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[39]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5072:6: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[40]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5073:5: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[41]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5074:5: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[42]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5076:9: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[43]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5077:5: warning: reading the value pointed to by \'sp\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[44]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5078:9: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[45]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5079:5: warning: reading the value pointed to by \'sq\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[46]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5559:11: warning: reading the value pointed to by \'foop\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[47]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5566:11: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[48]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5567:13: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[49]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5568:17: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[50]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5569:12: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[51]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5570:16: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[52]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5571:21: warning: reading the value pointed to by \'foosp\' requires holding mutex \'mu\' [-Wthread-safety-analysis]",
				[53]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:6092:6: warning: reading the value pointed to by \'i\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]",
				[54]="clang/test/SemaCXX/warn-thread-safety-analysis.cpp:6101:6: warning: reading the value pointed to by \'i\' requires holding mutex \'mu2\' [-Wthread-safety-analysis]"
			}
		}
	},
	["warn_var_deref_requires_lock_precise"]={
		[l]={X,"thread-safety-precise"},
		[k]="thread-safety-precise",
		[b]="warn_var_deref_requires_lock_precise",
		[c]={{nil,t,"%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{p,nil,"%select{reading|writing}3 the value pointed to by \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
		[d]={{nil,t,{{Y,ab}," the value pointed to by B requires holding A ",{hb,ib}}},{p,nil,{{Y,ab}," the value pointed to by \'B\' requires holding A ",{hb,ib}}}},
		[e]=j,
		[f]="(?:reading|writing) the value pointed to by (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
		[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]",
		[a]=n,
		[i]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise","Thread-safety analysis: differentiate between two forms of analysis; a precise\nanalysis that may give false positives because it is confused by aliasing, and\na less precise analysis that has fewer false positives, but may have false\nnegatives.  The more precise warnings are enabled by -Wthread-safety-precise.\nAn additional note clarify the warnings in the precise case.\n\nllvm-svn: 163537"},
		[h]={{v,1964,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n      // ...\n      case POK_VarDereference:\n        DiagID = diag::warn_var_deref_requires_lock_precise;"}}
	},
	["warn_var_template_missing"]={
		[l]={"undefined-var-template"},
		[k]="undefined-var-template",
		[b]="warn_var_template_missing",
		[c]="instantiation of variable %q0 required here, but no definition is available",
		[d]="instantiation of variable A required here, but no definition is available",
		[e]=j,
		[f]="instantiation of variable (.*?) required here, but no definition is available",
		[g]=" \\[(?:\\-Werror,)?\\-Wundefined\\-var\\-template[^\\]]*\\]",
		[a]=n,
		[i]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated","Warn if function or variable cannot be implicitly instantiated\n\nWith this patch compiler emits warning if it tries to make implicit instantiation\nof a template but cannot find the template definition. The warning can be suppressed\nby explicit instantiation declaration or by command line options\n-Wundefined-var-template and -Wundefined-func-template. The implementation follows\nthe discussion of http://reviews.llvm.org/D12326.\n\nDifferential Revision: http://reviews.llvm.org/D16396\n\nllvm-svn: 266719"},
		[h]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",5527,"/// Instantiate the definition of the given variable from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the variable, but it\'s close.\n///\n/// \\param Var the already-instantiated declaration of a templated variable.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where a definition of the variable is required. Complain\n/// if there is no such definition.\nvoid Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation, VarDecl *Var, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // ...\n  // If we don\'t have a definition of the variable template, we won\'t perform\n  // any instantiation. Rather, we rely on the user to instantiate this\n  // definition (or provide a specialization for it) in another translation\n  // unit.\n  if (!Def && !DefinitionRequired) {\n    if (TSK == TSK_ExplicitInstantiationDefinition) {\n    // ...\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      // Warn about missing definition at the end of translation unit.\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PointOfInstantiation, diag::warn_var_template_missing) << Var;"}},
		[m]={
			["clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp:28:26: warning: instantiation of variable \'X<long>::member3\' required here, but no definition is available [-Wundefined-var-template]"}
		}
	},
	["warn_variable_requires_any_lock"]={
		[l]={X,Z},
		[k]=Z,
		[b]="warn_variable_requires_any_lock",
		[c]={{nil,t,"%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1"},{p,nil,"%select{reading|writing}1 variable \'%0\' requires holding %select{any mutex|any mutex exclusively}1"}},
		[d]={{nil,t,{{Y,ab}," variable A requires holding ",{"any mutex","any mutex exclusively"}}},{p,nil,{{Y,ab}," variable \'A\' requires holding ",{"any mutex","any mutex exclusively"}}}},
		[e]=j,
		[f]="(?:reading|writing) variable (.*?) requires holding (?:any mutex|any mutex exclusively)",
		[g]=vb,
		[a]=n,
		[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif...","Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identify situations where we are accessing (reading or writing) guarded variables, and report an error if the appropriate locks are not held.\n\nllvm-svn: 138774"},
		[h]={{v,1946,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleNoMutexHeld(const NamedDecl *D, ProtectedOperationKind POK, AccessKind AK, SourceLocation Loc) override {\n    // ...\n    unsigned DiagID = POK == POK_VarAccess ? diag::warn_variable_requires_any_lock : diag::warn_var_deref_requires_any_lock;"}},
		[m]={
			["clang/test/Sema/warn-thread-safety-analysis.c"]={"clang/test/Sema/warn-thread-safety-analysis.c:113:3: warning: writing variable \'c_\' requires holding any mutex exclusively [-Wthread-safety-analysis]"}
		}
	},
	["warn_variable_requires_lock"]={
		[l]={X,Z},
		[k]=Z,
		[b]="warn_variable_requires_lock",
		[c]={{nil,t,"%select{reading|writing}3 variable %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{p,nil,"%select{reading|writing}3 variable \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
		[d]={{nil,t,{{Y,ab}," variable B requires holding A ",{hb,ib}}},{p,nil,{{Y,ab}," variable \'B\' requires holding A ",{hb,ib}}}},
		[e]=j,
		[f]="(?:reading|writing) variable (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
		[g]=vb,
		[a]=n,
		[i]={"dd5fd87a6dfe",1314656871,"Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identif...","Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identify situations where we are accessing (reading or writing) guarded variables, and report an error if the appropriate locks are not held.\n\nllvm-svn: 138774"},
		[h]={{v,1991,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n    // ...\n    } else {\n      // ...\n      case POK_VarAccess:\n        DiagID = diag::warn_variable_requires_lock;"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-verbose.cpp"]={"clang/test/SemaCXX/warn-thread-safety-verbose.cpp:31:5: warning: writing variable \'a\' requires holding mutex \'mu\' exclusively [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:35:13: warning: reading variable \'a\' requires holding mutex \'mu\' [-Wthread-safety-analysis]","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:54:5: warning: writing variable \'a\' requires holding mutex \'mu\' exclusively [-Wthread-safety-analysis]"}
		}
	},
	["warn_variable_requires_lock_precise"]={
		[l]={X,"thread-safety-precise"},
		[k]="thread-safety-precise",
		[b]="warn_variable_requires_lock_precise",
		[c]={{nil,t,"%select{reading|writing}3 variable %1 requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"},{p,nil,"%select{reading|writing}3 variable \'%1\' requires holding %0 %select{\'%2\'|\'%2\' exclusively}3"}},
		[d]={{nil,t,{{Y,ab}," variable B requires holding A ",{hb,ib}}},{p,nil,{{Y,ab}," variable \'B\' requires holding A ",{hb,ib}}}},
		[e]=j,
		[f]="(?:reading|writing) variable (.*?) requires holding (.*?) (?:\'(.*?)\'|\'(.*?)\' exclusively)",
		[g]=" \\[(?:\\-Werror,)?\\-Wthread\\-safety\\-precise[^\\]]*\\]",
		[a]=n,
		[i]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise","Thread-safety analysis: differentiate between two forms of analysis; a precise\nanalysis that may give false positives because it is confused by aliasing, and\na less precise analysis that has fewer false positives, but may have false\nnegatives.  The more precise warnings are enabled by -Wthread-safety-precise.\nAn additional note clarify the warnings in the precise case.\n\nllvm-svn: 163537"},
		[h]={{v,1961,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  // ...\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    // ...\n    if (PossibleMatch) {\n      // ...\n      case POK_VarAccess:\n        DiagID = diag::warn_variable_requires_lock_precise;"}},
		[m]={
			["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:583:8: warning: writing variable \'a\' requires holding mutex \'fooB.mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:604:12: warning: writing variable \'a\' requires holding mutex \'BarA.Foo.mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:613:20: warning: writing variable \'a\' requires holding mutex \'BarA.FooPointer->mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:622:13: warning: writing variable \'a\' requires holding mutex \'BarA.Foo2.mu\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1338:7: warning: writing variable \'a_\' requires holding mutex \'b2->mu1_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1369:12: warning: reading variable \'a_\' requires holding mutex \'b1.mu1_\' [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1374:6: warning: writing variable \'a_\' requires holding mutex \'b1.mu1_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1404:13: warning: writing variable \'a_\' requires holding mutex \'child->lock_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2461:18: warning: writing variable \'a\' requires holding mutex \'bar.getFooey().mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2467:18: warning: writing variable \'a\' requires holding mutex \'bar.getFoo2(b).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2473:21: warning: writing variable \'a\' requires holding mutex \'bar.getFoo3(a, c).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2479:21: warning: writing variable \'a\' requires holding mutex \'getBarFoo(bar, b).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2485:39: warning: writing variable \'a\' requires holding mutex \'((0 < a) ? fooArray[b] : fooArray[c]).mu_\' exclusively [-Wthread-safety-precise]","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5200:31: warning: reading variable \'val\' requires holding mutex \'b.mu\' [-Wthread-safety-precise]"}
		}
	},
	["warn_variable_sized_ivar_visibility"]={
		[l]={o,q,r,"objc-flexible-array"},
		[k]="objc-flexible-array",
		[b]={{nil,p,"warn_variable_sized_ivar_visibility"}},
		[c]={{nil,p,"field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables"}},
		[d]={{nil,p,"field A with variable sized type B is not visible to subclasses and can conflict with their instance variables"}},
		[e]=j,
		[f]="field (.*?) with variable sized type (.*?) is not visible to subclasses and can conflict with their instance variables",
		[g]=" \\[(?:\\-Werror,)?\\-Wobjc\\-flexible\\-array[^\\]]*\\]",
		[a]={{nil,p,n}},
		[i]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C.\n\nAllow Obj-C ivars with incomplete array type but only as the last ivar.\nAlso add a requirement for ivars that contain a flexible array member to\nbe at the end of class too. It is possible to add in a subclass another\nivar at the end but we\'ll emit a warning in this case. Also we\'ll emit a\nwarning if a variable sized ivar is declared in class extension or in\nimplementation because subclasses won\'t know they should avoid adding\nnew ivars.\n\nIn ARC incomplete array objects are treated as __unsafe_unretained so\nrequire them to be marked as such.\n\nProhibit synthesizing ivars with flexible array members because order of\nsynthesized ivars is not obvious and tricky to control. Spelling out\nivar explicitly gives control to developers and helps to avoid surprises\nwith unexpected ivar ordering.\n\nFor C and C++ changed diagnostic to tell explicitly a field is not the\nlast one and point to the next field. It is not as useful as in Obj-C\nbut it is an improvement and it is consistent with Obj-C. For C for\nunions emit more specific err_flexible_array_union instead of generic\nerr_field_incomplete.\n\nrdar://problem/21054495\n\nReviewers: rjmccall, theraven\n\nReviewed By: rjmccall\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D38773\n\nllvm-svn: 316381"},
		[h]={{N,3869,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n  // ...\n  // Check if variable sized ivar is in interface and visible to subclasses.\n  if (!isa<ObjCInterfaceDecl>(OCD)) {\n    for (auto *ivar : Ivars) {\n      if (!ivar->isInvalidDecl() && IsVariableSizedType(ivar->getType())) {\n        S.Diag(ivar->getLocation(), diag::warn_variable_sized_ivar_visibility) << ivar->getDeclName() << ivar->getType();"}},
		[m]={
			["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:20:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:27:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:34:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:62:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:69:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:94:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:102:8: warning: field \'flexible\' with variable sized type \'char[]\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:189:17: warning: field \'flexible\' with variable sized type \'struct Packet\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]","clang/test/SemaObjC/flexible-array.m:196:17: warning: field \'flexible\' with variable sized type \'struct Packet\' is not visible to subclasses and can conflict with their instance variables [-Wobjc-flexible-array]"}
		}
	},
	["warn_variables_not_in_loop_body"]={
		[l]={o,q,"for-loop-analysis","loop-analysis",r},
		[k]="for-loop-analysis",
		[b]="warn_variables_not_in_loop_body",
		[c]="variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body",
		[d]={{nil,nil,{Ob,{"s"," B","s B and C","s B, C, and D","s B, C, D, and E"}," used in loop condition not modified in loop body"}}},
		[e]=j,
		[f]="variable(?:s| (.*?)|s (.*?) and (.*?)|s (.*?), (.*?), and (.*?)|s (.*?), (.*?), (.*?), and (.*?)) used in loop condition not modified in loop body",
		[g]=" \\[(?:\\-Werror,)?\\-Wfor\\-loop\\-analysis[^\\]]*\\]",
		[a]=n,
		[i]={"451a5db01baf",1335808890,"Add -Wloop-analysis.  This warning will fire on for loops which the variables","Add -Wloop-analysis.  This warning will fire on for loops which the variables\nin the loop conditional do not change.\n\nllvm-svn: 155835"},
		[h]={{P,1904,"void CheckForLoopConditionalStatement(Sema &S, Expr *Second, Expr *Third, Stmt *Body) {\n  // ...\n  if (S.Diags.isIgnored(diag::warn_variables_not_in_loop_body, Second->getBeginLoc()))"},{P,1908,"void CheckForLoopConditionalStatement(Sema &S, Expr *Second, Expr *Third, Stmt *Body) {\n  // ...\n  PartialDiagnostic PDiag = S.PDiag(diag::warn_variables_not_in_loop_body);"}},
		[m]={
			["clang/test/SemaCXX/warn-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-loop-analysis.cpp:17:15: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:24:15: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:31:17: warning: variable \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:34:17: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:38:20: warning: variables \'i\' and \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:49:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:53:10: warning: variables \'i\' and \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:58:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:62:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:66:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:70:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:74:10: warning: variable \'ptr\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:78:11: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:82:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:86:10: warning: variables \'i\', \'j\', and \'k\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:90:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:95:10: warning: variables \'i\' and \'j\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:98:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:101:11: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:105:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:106:10: warning: variable \'i\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:114:9: warning: variable \'x\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:125:10: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:126:10: warning: variables \'a\' and \'b\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:127:10: warning: variables \'a\', \'b\', and \'c\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:128:10: warning: variables \'a\', \'b\', \'c\', and \'d\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:129:10: warning: variables used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:130:10: warning: variables used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:131:10: warning: variables \'a\', \'c\', \'d\', and \'b\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:132:10: warning: variables \'d\', \'c\', \'b\', and \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:138:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:140:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:142:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:144:15: warning: variable \'a\' used in loop condition not modified in loop body [-Wfor-loop-analysis]","clang/test/SemaCXX/warn-loop-analysis.cpp:294:29: warning: variables \'a\' and \'b\' used in loop condition not modified in loop body [-Wfor-loop-analysis]"}
		}
	},
	["warn_vbase_moved_multiple_times"]={
		[l]={"multiple-move-vbase"},
		[k]="multiple-move-vbase",
		[b]="warn_vbase_moved_multiple_times",
		[c]="defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times",
		[d]="defaulted move assignment operator of A will move assign virtual base class B multiple times",
		[e]=j,
		[f]="defaulted move assignment operator of (.*?) will move assign virtual base class (.*?) multiple times",
		[g]=" \\[(?:\\-Werror,)?\\-Wmultiple\\-move\\-vbase[^\\]]*\\]",
		[a]=n,
		[i]={"b2504bdc0d0e",1383539174,"Issue a diagnostic if an implicitly-defined move assignment operator would move","Issue a diagnostic if an implicitly-defined move assignment operator would move\nthe same virtual base class multiple times (and the move assignment is used,\nand the move assignment for the virtual base is not trivial).\n\nllvm-svn: 193977"},
		[h]={{T,15083,"/// Check if we\'re implicitly defining a move assignment operator for a class\n/// with virtual bases. Such a move assignment might move-assign the virtual\n/// base multiple times.\nstatic void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation) {\n  // ...\n  for (auto &BI : Class->bases()) {\n    // ...\n    while (!Worklist.empty()) {\n      // ...\n      if (BaseSpec->isVirtual()) {\n        // ...\n        if (Existing && Existing != &BI) {\n          S.Diag(CurrentLocation, diag::warn_vbase_moved_multiple_times) << Class << Base;"}},
		[m]={
			["clang/test/CXX/special/class.copy/implicit-move.cpp"]={"clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'F<DR1402::VbaseMove::B>\' will move assign virtual base class \'B\' multiple times [-Wmultiple-move-vbase]","clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'F<DR1402::VbaseMove::D>\' will move assign virtual base class \'D\' multiple times [-Wmultiple-move-vbase]","clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'J<DR1402::VbaseMove::B>\' will move assign virtual base class \'B\' multiple times [-Wmultiple-move-vbase]","clang/test/CXX/special/class.copy/implicit-move.cpp:278:45: warning: defaulted move assignment operator of \'J<DR1402::VbaseMove::D>\' will move assign virtual base class \'D\' multiple times [-Wmultiple-move-vbase]"}
		}
	},
	["warn_vector_long_decl_spec_combination"]={
		[l]={"deprecated"},
		[k]="deprecated",
		[b]="warn_vector_long_decl_spec_combination",
		[c]="Use of \'long\' with \'__vector\' is deprecated",
		[d]="Use of \'long\' with \'__vector\' is deprecated",
		[e]=j,
		[f]="Use of \'long\' with \'__vector\' is deprecated",
		[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated[^\\]]*\\]",
		[a]="Deprecations",
		[i]={"2233460de6ed",1265328742,"First stage of adding AltiVec support","First stage of adding AltiVec support\n\nllvm-svn: 95335"},
		[h]={{"clang/lib/Sema/DeclSpec.cpp",1241,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n    // ...\n    } else if (TypeSpecType == TST_float) {\n    // ...\n    } else if (getTypeSpecWidth() == TypeSpecifierWidth::Long) {\n      // Vector long is unsupported for ZVector, or without VSX, and deprecated\n      // for AltiVec.\n      // It has also been historically deprecated on AIX (as an alias for\n      // \"vector int\" in both 32-bit and 64-bit modes). It was then made\n      // unsupported in the Clang-based XL compiler since the deprecated type\n      // has a number of conflicting semantics and continuing to support it\n      // is a disservice to users.\n      if (S.getLangOpts().ZVector || !S.Context.getTargetInfo().hasFeature(\"vsx\") || S.Context.getTargetInfo().getTriple().isOSAIX())\n      // ...\n      else\n        S.Diag(TSWRange.getBegin(), diag::warn_vector_long_decl_spec_combination) << getSpecifierName((TST)TypeSpecType, Policy);"}},
		[m]={
			["clang/test/Parser/altivec.c"]={"clang/test/Parser/altivec.c:59:10: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:62:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:65:19: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:68:10: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:71:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:74:19: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:77:8: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:80:15: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:83:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:86:8: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:89:15: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]","clang/test/Parser/altivec.c:92:17: warning: Use of \'long\' with \'__vector\' is deprecated [-Wdeprecated]"}
		}
	},
	["warn_vector_mode_deprecated"]={
		[l]={"deprecated","deprecated-attributes"},
		[k]="deprecated-attributes",
		[b]="warn_vector_mode_deprecated",
		[c]="specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead",
		[d]="specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead",
		[e]=j,
		[f]="specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead",
		[g]=" \\[(?:\\-Werror,)?\\-Wdeprecated\\-attributes[^\\]]*\\]",
		[a]="Deprecations",
		[i]={"f278eb10b7da",1447927991,"PR10235: support for vector mode attributes + warning, by Dmitry Polukhin.","PR10235: support for vector mode attributes + warning, by Dmitry Polukhin.\nAdd support for vector mode attributes like \"attribute((mode(V4SF)))\". Also add warning about deprecated vector modes like GCC does.\nDifferential Revision: http://reviews.llvm.org/D14744\n\nllvm-svn: 253551"},
		[h]={{x,4761,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (Str.size() >= 4 && Str[0] == \'V\') {\n    // ...\n    if (VectorStringLength && !Str.substr(1, VectorStringLength).getAsInteger(10, VectorSize) && VectorSize.isPowerOf2()) {\n      // ...\n      // Avoid duplicate warning from template instantiation.\n      if (!InInstantiation)\n        Diag(AttrLoc, diag::warn_vector_mode_deprecated);"}},
		[m]={
			["clang/test/Sema/attr-mode-enums.c"]={"clang/test/Sema/attr-mode-enums.c:12:38: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:14:31: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:16:34: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:18:35: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:20:30: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]","clang/test/Sema/attr-mode-enums.c:22:23: warning: specifying vector types with the \'mode\' attribute is deprecated; use the \'vector_size\' attribute instead [-Wdeprecated-attributes]"}
		}
	},
	["warn_verbatim_block_end_without_start"]={
		[l]={"documentation"},
		[k]="documentation",
		[b]="warn_verbatim_block_end_without_start",
		[c]="\'%select{\\|@}0%1\' command does not terminate a verbatim text block",
		[d]={{nil,nil,{"\'",{"\\","@"},"B\' command does not terminate a verbatim text block"}}},
		[e]=j,
		[f]="\'(?:\\\\|@)(.*?)\' command does not terminate a verbatim text block",
		[g]=" \\[(?:\\-Werror,)?\\-Wdocumentation[^\\]]*\\]",
		[a]="Documentation Issue",
		[i]={"76b91c343111",1353198631,"Documentation parsing: propely handle a lone \'\\endverbatim\' and emit a warning.","Documentation parsing: propely handle a lone \'\\endverbatim\' and emit a warning.\n\nWe actually used to assert on this.\n\nThanks to NAKAMURA Takumi for noticing this!\n\nllvm-svn: 168277"},
		[h]={{"clang/lib/AST/CommentParser.cpp",571,"BlockContentComment *Parser::parseParagraphOrBlockCommand() {\n  // ...\n  while (true) {\n    // ...\n    case tok::backslash_command:\n    case tok::at_command: {\n      // ...\n      if (Info->IsVerbatimBlockEndCommand) {\n        Diag(Tok.getLocation(), diag::warn_verbatim_block_end_without_start) << Tok.is(tok::at_command) << Info->Name << SourceRange(Tok.getLocation(), Tok.getEndLocation());"}},
		[m]={
			["clang/test/Sema/warn-documentation-fixits.cpp"]={"clang/test/Sema/warn-documentation-fixits.cpp:123:5: warning: \'\\endcode\' command does not terminate a verbatim text block [-Wdocumentation]"}
		}
	},
	["warn_vla_used"]={
		[l]={"vla"},
		[k]="vla",
		[b]="warn_vla_used",
		[c]="variable length array used",
		[d]="variable length array used",
		[e]=j,
		[f]="variable length array used",
		[g]=" \\[(?:\\-Werror,)?\\-Wvla[^\\]]*\\]",
		[a]=n,
		[i]={"6c926ccbd2bd",1358971371,"Implement -Wvla correctly","Implement -Wvla correctly\n\nGCC implements -Wvla as \"warn on every VLA\" (this is useful to find every VLA,\nfor example, if they are forbidden by coding guidelines).  Currently Clang\nimplements -Wvla as \"warn on VLA when it is an extension\".\n\nThe attached patch makes our behavior match GCC.  The existing vla extwarn is\nmoved under -Wvla-extension and is still included into -Wgnu.\n\nThis fixes PR5953.\n\nllvm-svn: 173286"},
		[h]={{U,2583,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().OpenCL) {\n  // ...\n  } else if (getLangOpts().C99) {\n    VLADiag = diag::warn_vla_used;"}},
		[m]={
			["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:3:11: warning: variable length array used [-Wvla]"}
		}
	},
	["warn_void_pointer_to_enum_cast"]={
		[l]={"pointer-to-enum-cast","pointer-to-int-cast","pointer-to-int-cast","void-pointer-to-enum-cast","void-pointer-to-int-cast"},
		[k]="void-pointer-to-enum-cast",
		[b]={{nil,z,"warn_void_pointer_to_enum_cast"}},
		[c]={{nil,z,"cast to smaller integer type %1 from %0"}},
		[d]={{nil,z,"cast to smaller integer type B from A"}},
		[e]=j,
		[f]="cast to smaller integer type (.*?) from (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wvoid\\-pointer\\-to\\-enum\\-cast[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n   turned out to be ineffective anyway since functions can be defined later\n   in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
		[h]={{Xb,3171,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  // ...\n  } else if (!SrcType->isArithmeticType()) {\n    // ...\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) && !DestType->isBooleanType()) {\n      // ...\n      if (SrcType->isVoidPointerType())\n        Diag = DestType->isEnumeralType() ? diag::warn_void_pointer_to_enum_cast : diag::warn_void_pointer_to_int_cast;"}},
		[m]={
			["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:195:9: warning: cast to smaller integer type \'X\' from \'VoidPtr\' (aka \'void *\') [-Wvoid-pointer-to-enum-cast]"}
		}
	},
	["warn_void_pointer_to_int_cast"]={
		[l]={"pointer-to-int-cast","void-pointer-to-int-cast"},
		[k]="void-pointer-to-int-cast",
		[b]={{nil,z,"warn_void_pointer_to_int_cast"}},
		[c]={{nil,z,"cast to smaller integer type %1 from %0"}},
		[d]={{nil,z,"cast to smaller integer type B from A"}},
		[e]=j,
		[f]="cast to smaller integer type (.*?) from (.*?)",
		[g]=" \\[(?:\\-Werror,)?\\-Wvoid\\-pointer\\-to\\-int\\-cast[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n   turned out to be ineffective anyway since functions can be defined later\n   in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
		[h]={{Xb,2467,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestType->isIntegralType(Self.Context)) {\n    // ...\n    // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n    //   type large enough to hold it; except in Microsoft mode, where the\n    //   integral type size doesn\'t matter (except we don\'t allow bool).\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n      // ...\n      if (MicrosoftException) {\n        unsigned Diag = SrcType->isVoidPointerType() ? diag::warn_void_pointer_to_int_cast : diag::warn_pointer_to_int_cast;"},{Xb,3172,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  // ...\n  } else if (!SrcType->isArithmeticType()) {\n    // ...\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) && !DestType->isBooleanType()) {\n      // ...\n      if (SrcType->isVoidPointerType())\n        Diag = DestType->isEnumeralType() ? diag::warn_void_pointer_to_enum_cast : diag::warn_void_pointer_to_int_cast;"}},
		[m]={
			["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:159:10: warning: cast to smaller integer type \'Int\' (aka \'int\') from \'VoidPtr\' (aka \'void *\') [-Wvoid-pointer-to-int-cast]"}
		}
	},
	["warn_wasm_dynamic_exception_spec_ignored"]={
		[l]={"wasm-exception-spec"},
		[k]="wasm-exception-spec",
		[b]={{nil,z,"warn_wasm_dynamic_exception_spec_ignored"}},
		[c]={{nil,z,"dynamic exception specifications with types are currently ignored in wasm"}},
		[d]={{nil,z,"dynamic exception specifications with types are currently ignored in wasm"}},
		[e]=j,
		[f]="dynamic exception specifications with types are currently ignored in wasm",
		[g]=" \\[(?:\\-Werror,)?\\-Wwasm\\-exception\\-spec[^\\]]*\\]",
		[a]={{nil,z,n}},
		[i]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n   turned out to be ineffective anyway since functions can be defined later\n   in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520"},
		[h]={{"clang/lib/CodeGen/CGException.cpp",498,"void CodeGenFunction::EmitStartEHSpec(const Decl *D) {\n  // ...\n  // In C++17 and later, \'throw()\' aka EST_DynamicNone is treated the same way\n  // as noexcept. In earlier standards, it is handled in this block, along with\n  // \'throw(X...)\'.\n  if (EST == EST_Dynamic || (EST == EST_DynamicNone && !getLangOpts().CPlusPlus17)) {\n    // ...\n    // In Wasm EH we currently treat \'throw()\' in the same way as \'noexcept\'. In\n    // case of throw with types, we ignore it and print a warning for now.\n    // TODO Correctly handle exception specification in Wasm EH\n    if (CGM.getLangOpts().hasWasmExceptions()) {\n      if (EST == EST_DynamicNone)\n      // ...\n      else\n        CGM.getDiags().Report(D->getLocation(), diag::warn_wasm_dynamic_exception_spec_ignored) << FD->getExceptionSpecSourceRange();"},{"clang/lib/CodeGen/CGException.cpp",512,"void CodeGenFunction::EmitStartEHSpec(const Decl *D) {\n  // ...\n  // In C++17 and later, \'throw()\' aka EST_DynamicNone is treated the same way\n  // as noexcept. In earlier standards, it is handled in this block, along with\n  // \'throw(X...)\'.\n  if (EST == EST_Dynamic || (EST == EST_DynamicNone && !getLangOpts().CPlusPlus17)) {\n    // ...\n    // Currently Emscripten EH only handles \'throw()\' but not \'throw\' with\n    // types. \'throw()\' handling will be done in JS glue code so we don\'t need\n    // to do anything in that case. Just print a warning message in case of\n    // throw with types.\n    // TODO Correctly handle exception specification in Emscripten EH\n    if (getTarget().getCXXABI() == TargetCXXABI::WebAssembly && CGM.getLangOpts().getExceptionHandling() == LangOptions::ExceptionHandlingKind::None && EST == EST_Dynamic)\n      CGM.getDiags().Report(D->getLocation(), diag::warn_wasm_dynamic_exception_spec_ignored) << FD->getExceptionSpecSourceRange();"}},
		[m]={
			["clang/test/CodeGenCXX/wasm-eh.cpp"]={"clang/test/CodeGenCXX/wasm-eh.cpp:389:6: warning: dynamic exception specifications with types are currently ignored in wasm [-Wwasm-exception-spec]"}
		}
	},
	["warn_weak_identifier_undeclared"]={
		[b]="warn_weak_identifier_undeclared",
		[c]="weak identifier %0 never declared",
		[d]="weak identifier A never declared",
		[e]=j,
		[f]="weak identifier (.*?) never declared",
		[g]=Q,
		[a]=n,
		[i]={"7d470f3466c0",1248923739,"PR3679 - handle #pragma weak","PR3679 - handle #pragma weak\n\nllvm-svn: 77573"},
		[h]={{M,1190,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  for (const auto &WeakIDs : WeakUndeclaredIdentifiers) {\n    // ...\n    if (PrevDecl != nullptr && !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl)))\n    // ...\n    else\n      for (const auto &WI : WeakIDs.second)\n        Diag(WI.getLocation(), diag::warn_weak_identifier_undeclared) << WeakIDs.first;"}},
		[m]={
			["clang/test/Parser/pragma-weak.c"]={"clang/test/Parser/pragma-weak.c:13:76: warning: weak identifier \'y\' never declared"}
		}
	},
	["warn_weak_import"]={
		[b]="warn_weak_import",
		[c]="an already-declared variable is made a weak_import declaration %0",
		[d]="an already-declared variable is made a weak_import declaration A",
		[e]=j,
		[f]="an already\\-declared variable is made a weak_import declaration (.*?)",
		[g]=Q,
		[a]=n,
		[i]={"33e022650ade",1308780530,"Issue warning if weak_import attribute is added to an already","Issue warning if weak_import attribute is added to an already\ndeclared variable and ignore it. // rdar://9538608\n\nllvm-svn: 133654"},
		[h]={{G,4592,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // Warn if an already-declared variable is made a weak_import in a subsequent\n  // declaration\n  if (New->hasAttr<WeakImportAttr>() && Old->getStorageClass() == SC_None && !Old->hasAttr<WeakImportAttr>()) {\n    Diag(New->getLocation(), diag::warn_weak_import) << New->getDeclName();"}},
		[m]={
			["clang/test/Sema/attr-weak.c"]={"clang/test/Sema/attr-weak.c:21:12: warning: an already-declared variable is made a weak_import declaration \'C\'"}
		}
	},
	["warn_weak_template_vtable"]={
		[l]={"weak-template-vtables"},
		[k]="weak-template-vtables",
		[b]="warn_weak_template_vtable",
		[c]={{nil,u,"this warning is no longer in use and will be removed in the next release"},{C,nil,"explicit template instantiation %0 will emit a vtable in every translation unit"}},
		[d]={{nil,u,"this warning is no longer in use and will be removed in the next release"},{C,nil,"explicit template instantiation A will emit a vtable in every translation unit"}},
		[e]=j,
		[f]="this warning is no longer in use and will be removed in the next release",
		[g]=" \\[(?:\\-Werror,)?\\-Wweak\\-template\\-vtables[^\\]]*\\]",
		[a]=n,
		[i]={"72b61203f447",1323455570,"Provide a separate warning for weak vtables in explicit template instantiations. There\'s no (current...","Provide a separate warning for weak vtables in explicit template instantiations. There\'s no (current) way to fix such templates to emit strong symbols/vtables, but perhaps users want to know about the cost being incurred anyway.\n\nllvm-svn: 146265"}
	},
	["warn_weak_vtable"]={
		[l]={"weak-vtables"},
		[k]="weak-vtables",
		[b]="warn_weak_vtable",
		[c]="%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit",
		[d]="A has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit",
		[e]=j,
		[f]="(.*?) has no out\\-of\\-line virtual method definitions; its vtable will be emitted in every translation unit",
		[g]=" \\[(?:\\-Werror,)?\\-Wweak\\-vtables[^\\]]*\\]",
		[a]=n,
		[i]={"0da714a3e216",1265423230,"Implement a warning diagnostic for weak vtables. Fixes PR6116.","Implement a warning diagnostic for weak vtables. Fixes PR6116.\n\nllvm-svn: 95472"},
		[h]={{T,18396,"bool Sema::DefineUsedVTables() {\n  // ...\n  for (unsigned I = 0; I != VTableUses.size(); ++I) {\n    // ...\n    // Warn if we\'re emitting a weak vtable. The vtable will be weak if there is\n    // no key function or the key function is inlined. Don\'t warn in C++ ABIs\n    // that lack key functions, since the user won\'t be able to make one.\n    if (Context.getTargetInfo().getCXXABI().hasKeyFunctions() && Class->isExternallyVisible() && ClassTSK != TSK_ImplicitInstantiation && ClassTSK != TSK_ExplicitInstantiationDefinition) {\n      // ...\n      if (!KeyFunction || (KeyFunction->hasBody(KeyFunctionDef) && KeyFunctionDef->isInlined()))\n        Diag(Class->getLocation(), diag::warn_weak_vtable) << Class;"}},
		[m]={
			["clang/test/SemaCXX/warn-weak-vtables.cpp"]={"clang/test/SemaCXX/warn-weak-vtables.cpp:10:8: warning: \'A\' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]","clang/test/SemaCXX/warn-weak-vtables.cpp:53:7: warning: \'VeryDerived\' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]","clang/test/SemaCXX/warn-weak-vtables.cpp:75:19: warning: \'TemplVirt<long>\' has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit [-Wweak-vtables]"}
		}
	},
	["warn_wrong_absolute_value_type"]={
		[l]={"absolute-value"},
		[k]="absolute-value",
		[b]="warn_wrong_absolute_value_type",
		[c]="using %select{integer|floating point|complex}1 absolute value function %0 when argument is of %select{integer|floating point|complex}2 type",
		[d]={{nil,nil,{"using ",{"integer","floating point","complex"}," absolute value function A when argument is of ",{"integer","floating point","complex"}," type"}}},
		[e]=j,
		[f]="using (?:integer|floating point|complex) absolute value function (.*?) when argument is of (?:integer|floating point|complex) type",
		[g]=" \\[(?:\\-Werror,)?\\-Wabsolute\\-value[^\\]]*\\]",
		[a]=n,
		[i]={"7eb0b2c1819c",1393377448,"Add -Wabsolute-value, warnings about absolute value functions.","Add -Wabsolute-value, warnings about absolute value functions.\n\nThe warnings fall into three groups.\n1) Using an absolute value function of the wrong type, for instance, using the\nint absolute value function when the argument is a floating point type.\n2) Using the improper sized absolute value function, for instance, using abs\nwhen the argument is a long long.  llabs should be used instead.\n\nFrom these two cases, an implicit conversion will occur which may cause\nunexpected behavior.  Where possible, suggest the proper absolute value\nfunction to use, and which header to include if the function is not available.\n\n3) Taking the absolute value of an unsigned value.  In addition to this warning,\nsuggest to remove the function call.  This usually indicates a logic error\nsince the programmer assumed negative values would have been possible.\n\nllvm-svn: 202211"},
		[h]={{y,12079,"// Warn when using the wrong abs() function.\nvoid Sema::CheckAbsoluteValueFunction(const CallExpr *Call, const FunctionDecl *FDecl) {\n  // ...\n  Diag(Call->getExprLoc(), diag::warn_wrong_absolute_value_type) << FDecl << ParamValueKind << ArgValueKind;"},{"clang/utils/TableGen/ClangDiagnosticsEmitter.cpp",1411,"///                      diag::warn_wrong_absolute_value_type,"}},
		[m]={
			["clang/test/Sema/warn-absolute-value-header.c"]={"clang/test/Sema/warn-absolute-value-header.c:27:9: warning: using integer absolute value function \'abs\' when argument is of floating point type [-Wabsolute-value]","clang/test/Sema/warn-absolute-value-header.c:31:9: warning: using integer absolute value function \'abs\' when argument is of floating point type [-Wabsolute-value]"}
		}
	},
	["warn_wrong_clang_attr_namespace"]={
		[l]={R,H},
		[k]=H,
		[b]={{nil,I,"warn_wrong_clang_attr_namespace"}},
		[c]={{nil,I,"\'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead?"}},
		[d]={{nil,I,"\'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead?"}},
		[e]=j,
		[f]="\'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead\\?",
		[g]=V,
		[a]={{nil,I,Eb}},
		[i]={"c44c17424628",1541783985,"Introduce the _Clang scoped attribute token.","Introduce the _Clang scoped attribute token.\n\nCurrently, we only accept clang as the scoped attribute identifier for double square bracket attributes provided by Clang, but this has the potential to conflict with user-defined macros. To help alleviate these concerns, this introduces the _Clang scoped attribute identifier as an alias for clang. It also introduces a warning with a fixit on the off chance someone attempts to use __clang__ as the scoped attribute (which is a predefined compiler identification macro).\n\nllvm-svn: 346521"},
		[h]={{"clang/lib/Parse/ParseDeclCXX.cpp",4257,"/// Try to parse an \'identifier\' which appears within an attribute-token.\n///\n/// \\return the parsed identifier on success, and 0 if the next token is not an\n/// attribute-token.\n///\n/// C++11 [dcl.attr.grammar]p3:\n///   If a keyword or an alternative token that satisfies the syntactic\n///   requirements of an identifier is contained in an attribute-token,\n///   it is considered an identifier.\nIdentifierInfo *Parser::TryParseCXX11AttributeIdentifier(SourceLocation &Loc, Sema::AttributeCompletion Completion, const IdentifierInfo *Scope) {\n  // ...\n  case tok::numeric_constant: {\n    // If we got a numeric constant, check to see if it comes from a macro that\n    // corresponds to the predefined __clang__ macro. If it does, warn the user\n    // and recover by pretending they said _Clang instead.\n    if (Tok.getLocation().isMacroID()) {\n      // ...\n      if (Spelling == \"__clang__\") {\n        // ...\n        Diag(Tok, diag::warn_wrong_clang_attr_namespace) << FixItHint::CreateReplacement(TokRange, \"_Clang\");"}},
		[m]={
			["clang/test/SemaCXX/attr-optnone.cpp"]={"clang/test/SemaCXX/attr-optnone.cpp:77:3: warning: \'__clang__\' is a predefined macro name, not an attribute scope specifier; did you mean \'_Clang\' instead? [-Wignored-attributes]"}
		}
	},
	["warn_xor_used_as_pow"]={
		[l]={Hb},
		[k]=Hb,
		[b]={{nil,s,"warn_xor_used_as_pow"}},
		[c]={{nil,s,"result of \'%0\' is %1; did you mean exponentiation?"}},
		[d]={{nil,s,"result of \'A\' is B; did you mean exponentiation?"}},
		[e]=j,
		[f]="result of \'(.*?)\' is (.*?); did you mean exponentiation\\?",
		[g]=" \\[(?:\\-Werror,)?\\-Wxor\\-used\\-as\\-pow[^\\]]*\\]",
		[a]={{nil,s,n}},
		[i]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
		[h]={{A,13680,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  // ...\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    // ...\n    if (Overflow) {\n      if (RightSideIntValue < 64)\n      // ...\n      else if (RightSideIntValue == 64)\n        S.Diag(Loc, diag::warn_xor_used_as_pow) << ExprStr << toString(XorValue, 10, true);"}},
		[m]={
			["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:83:11: warning: result of \'2 ^ 64\' is 66; did you mean exponentiation? [-Wxor-used-as-pow]"}
		}
	},
	["warn_xor_used_as_pow_base"]={
		[l]={Hb},
		[k]=Hb,
		[b]={{nil,s,"warn_xor_used_as_pow_base"}},
		[c]={{nil,s,"result of \'%0\' is %1; did you mean \'%2\'?"}},
		[d]={{nil,s,"result of \'A\' is B; did you mean \'C\'?"}},
		[e]=j,
		[f]="result of \'(.*?)\' is (.*?); did you mean \'(.*?)\'\\?",
		[g]=" \\[(?:\\-Werror,)?\\-Wxor\\-used\\-as\\-pow[^\\]]*\\]",
		[a]={{nil,s,n}},
		[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow","[Diagnostics] Diagnose misused xor as pow\n\nSummary:\nMotivation:\nhttps://twitter.com/jfbastien/status/1139298419988549632\nhttps://twitter.com/mikemx7f/status/1139335901790625793\nhttps://codesearch.isocpp.org/cgi-bin/cgi_ppsearch?q=10+%5E&search=Search\n\nReviewers: jfb, rsmith, regehr, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, Quuxplusone, erik.pilkington, riccibruno, dexonsmith, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D63423\n\nllvm-svn: 369217"},
		[h]={{A,13675,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  // ...\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    // ...\n    if (Overflow) {\n      if (RightSideIntValue < 64)\n        S.Diag(Loc, diag::warn_xor_used_as_pow_base) << ExprStr << toString(XorValue, 10, true) << (\"1LL << \" + RHSStr) << FixItHint::CreateReplacement(ExprRange, \"1LL << \" + RHSStr);"},{A,13694,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  // ...\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n  // ...\n  } else if (LeftSideValue == 10) {\n    // ...\n    S.Diag(Loc, diag::warn_xor_used_as_pow_base) << ExprStr << toString(XorValue, 10, true) << SuggestedValue << FixItHint::CreateReplacement(ExprRange, SuggestedValue);"}},
		[m]={
			["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:80:11: warning: result of \'2 ^ 32\' is 34; did you mean \'1LL << 32\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:88:12: warning: result of \'10 ^ 0\' is 10; did you mean \'1e0\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:91:12: warning: result of \'10 ^ 1\' is 11; did you mean \'1e1\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:94:12: warning: result of \'10 ^ 2\' is 8; did you mean \'1e2\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:97:12: warning: result of \'10 ^ 4\' is 14; did you mean \'1e4\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:100:12: warning: result of \'10 ^ +4\' is 14; did you mean \'1e4\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:103:12: warning: result of \'10 ^ 10\' is 0; did you mean \'1e10\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:106:13: warning: result of \'TEN ^ 10\' is 0; did you mean \'1e10\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:109:12: warning: result of \'10 ^ TEN\' is 0; did you mean \'1e10\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:112:12: warning: result of \'10 ^ 100\' is 110; did you mean \'1e100\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:116:12: warning: result of \'10 ^ -EXP\' is -9; did you mean \'1e-3\'? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:119:12: warning: result of \'10 ^ +EXP\' is 9; did you mean \'1e3\'? [-Wxor-used-as-pow]"}
		}
	},
	["warn_xor_used_as_pow_base_extra"]={
		[l]={Hb},
		[k]=Hb,
		[b]={{nil,s,"warn_xor_used_as_pow_base_extra"}},
		[c]={{nil,s,"result of \'%0\' is %1; did you mean \'%2\' (%3)?"}},
		[d]={{nil,s,"result of \'A\' is B; did you mean \'C\' (D)?"}},
		[e]=j,
		[f]="result of \'(.*?)\' is (.*?); did you mean \'(.*?)\' \\((.*?)\\)\\?",
		[g]=" \\[(?:\\-Werror,)?\\-Wxor\\-used\\-as\\-pow[^\\]]*\\]",
		[a]={{nil,s,n}},
		[i]={"920890e26812",1566155654,"[Diagnostics] Diagnose misused xor as pow","[Diagnostics] Diagnose misused xor as pow\n\nSummary:\nMotivation:\nhttps://twitter.com/jfbastien/status/1139298419988549632\nhttps://twitter.com/mikemx7f/status/1139335901790625793\nhttps://codesearch.isocpp.org/cgi-bin/cgi_ppsearch?q=10+%5E&search=Search\n\nReviewers: jfb, rsmith, regehr, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, Quuxplusone, erik.pilkington, riccibruno, dexonsmith, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D63423\n\nllvm-svn: 369217"},
		[h]={{A,13687,"static void diagnoseXorMisusedAsPow(Sema &S, const ExprResult &XorLHS, const ExprResult &XorRHS, const SourceLocation Loc) {\n  // ...\n  if (LeftSideValue == 2 && RightSideIntValue >= 0) {\n    // ...\n    if (Overflow) {\n    // ...\n    } else {\n      S.Diag(Loc, diag::warn_xor_used_as_pow_base_extra) << ExprStr << toString(XorValue, 10, true) << SuggestedExpr << toString(PowValue, 10, true) << FixItHint::CreateReplacement(ExprRange, (RightSideIntValue == 0) ? \"1\" : SuggestedExpr);"}},
		[m]={
			["clang/test/SemaCXX/warn-xor-as-pow.cpp"]={"clang/test/SemaCXX/warn-xor-as-pow.cpp:36:11: warning: result of \'2 ^ 0\' is 2; did you mean \'1 << 0\' (1)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:39:11: warning: result of \'2 ^ 1\' is 3; did you mean \'1 << 1\' (2)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:42:11: warning: result of \'2 ^ 2\' is 0; did you mean \'1 << 2\' (4)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:45:11: warning: result of \'2 ^ 8\' is 10; did you mean \'1 << 8\' (256)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:48:11: warning: result of \'2 ^ +8\' is 10; did you mean \'1 << +8\' (256)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:51:13: warning: result of \'TWO ^ 8\' is 10; did you mean \'1 << 8\' (256)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:54:11: warning: result of \'2 ^ 16\' is 18; did you mean \'1 << 16\' (65536)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:57:11: warning: result of \'2 ^ TEN\' is 8; did you mean \'1 << TEN\' (1024)? [-Wxor-used-as-pow]","clang/test/SemaCXX/warn-xor-as-pow.cpp:60:18: warning: result of \'2 ^ ALPHA_OFFSET\' is 1; did you mean \'1 << ALPHA_OFFSET\' (8)? [-Wxor-used-as-pow]"}
		}
	},
	["warn_zero_as_null_pointer_constant"]={
		[l]={"zero-as-null-pointer-constant"},
		[k]="zero-as-null-pointer-constant",
		[b]={{nil,w,"warn_zero_as_null_pointer_constant"}},
		[c]={{nil,w,"zero as null pointer constant"}},
		[d]={{nil,w,"zero as null pointer constant"}},
		[e]=j,
		[f]="zero as null pointer constant",
		[g]=" \\[(?:\\-Werror,)?\\-Wzero\\-as\\-null\\-pointer\\-constant[^\\]]*\\]",
		[a]={{nil,w,"Nullability Issue"}},
		[i]={"d7ba86b6bf54",1494000668,"Introduce Wzero-as-null-pointer-constant.","Introduce Wzero-as-null-pointer-constant.\n\nAdd an opt-in warning that fires when 0 is used as a null pointer. \ngcc has this warning, and there\'s some demand for it.\n\nhttps://reviews.llvm.org/D32914\n\nllvm-svn: 302247"},
		[h]={{M,598,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n  // ...\n  if (Diags.isIgnored(diag::warn_zero_as_null_pointer_constant, E->getBeginLoc()))"},{M,623,"void Sema::diagnoseZeroToNullptrConversion(CastKind Kind, const Expr *E) {\n  // ...\n  Diag(E->getBeginLoc(), diag::warn_zero_as_null_pointer_constant) << FixItHint::CreateReplacement(E->getSourceRange(), \"nullptr\");"}},
		[m]={
			["clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp"]={"clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp:48:14: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]","clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp:49:26: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]","clang/test/SemaCXX/warn-zero-nullptr-cxx20.cpp:50:33: warning: zero as null pointer constant [-Wzero-as-null-pointer-constant]"}
		}
	},
	["warn_zero_size_struct_union_compat"]={
		[l]={"c++-compat"},
		[k]="c++-compat",
		[b]="warn_zero_size_struct_union_compat",
		[c]="%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++",
		[d]={{nil,nil,{{F,"empty "},{xb,"union"}," has size 0 in C, ",{"size 1","non-zero size"}," in C++"}}},
		[e]=j,
		[f]="(?:|empty )(?:struct|union) has size 0 in C, (?:size 1|non\\-zero size) in C\\+\\+",
		[g]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+\\-compat[^\\]]*\\]",
		[a]=n,
		[i]={"89578fd43981",1370698198,"Recognition of empty structures and unions is moved to semantic stage","Recognition of empty structures and unions is moved to semantic stage\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D586\n\nllvm-svn: 183609"},
		[h]={{G,19128,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // ...\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    // ...\n    if (CheckForZeroSize) {\n      // ...\n      // Empty structs are an extension in C (C99 6.7.2.1p7). They are\n      // allowed in C++, but warn if its declaration is inside\n      // extern \"C\" block.\n      if (ZeroSize) {\n        Diag(RecLoc, getLangOpts().CPlusPlus ? diag::warn_zero_size_struct_union_in_extern_c : diag::warn_zero_size_struct_union_compat) << IsEmpty << Record->isUnion() << (NonBitFields > 1);"}},
		[m]={
			["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:5:1: warning: empty struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:8:1: warning: empty union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:11:1: warning: struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:15:1: warning: union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:19:1: warning: struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:24:1: warning: union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:29:1: warning: struct has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:33:1: warning: union has size 0 in C, size 1 in C++ [-Wc++-compat]","clang/test/Sema/empty1.c:37:1: warning: struct has size 0 in C, non-zero size in C++ [-Wc++-compat]"}
		}
	},
	["warn_zero_size_struct_union_in_extern_c"]={
		[l]={o,q,"extern-c-compat",r},
		[k]="extern-c-compat",
		[b]="warn_zero_size_struct_union_in_extern_c",
		[c]="%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++",
		[d]={{nil,nil,{{F,"empty "},{xb,"union"}," has size 0 in C, ",{"size 1","non-zero size"}," in C++"}}},
		[e]=j,
		[f]="(?:|empty )(?:struct|union) has size 0 in C, (?:size 1|non\\-zero size) in C\\+\\+",
		[g]=" \\[(?:\\-Werror,)?\\-Wextern\\-c\\-compat[^\\]]*\\]",
		[a]=n,
		[i]={"3cb8022849b9",1384395183,"Added warning on structures/unions that are empty or contain only","Added warning on structures/unions that are empty or contain only\nbit fields of zero size. Warnings are generated in C++ mode and if\nonly such type is defined inside extern \"C\" block.\nThe patch fixed PR5065.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2151\n\nllvm-svn: 194653"},
		[h]={{G,19127,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // ...\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    // ...\n    if (CheckForZeroSize) {\n      // ...\n      // Empty structs are an extension in C (C99 6.7.2.1p7). They are\n      // allowed in C++, but warn if its declaration is inside\n      // extern \"C\" block.\n      if (ZeroSize) {\n        Diag(RecLoc, getLangOpts().CPlusPlus ? diag::warn_zero_size_struct_union_in_extern_c : diag::warn_zero_size_struct_union_compat) << IsEmpty << Record->isUnion() << (NonBitFields > 1);"}},
		[m]={
			["clang/test/CodeGenCXX/c-linkage.cpp"]={"clang/test/CodeGenCXX/c-linkage.cpp:29:3: warning: empty struct has size 0 in C, size 1 in C++ [-Wextern-c-compat]"}
		}
	}
};