Module:ClangDiags/DiagsLongData5

From emmtrix Wiki
Jump to navigation Jump to search

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

local a="";
local b="regex3";
local c="id_hist";
local d="message_hist";
local e="commit";
local f="category_hist";
local g="hierarchical_hist";
local h="regex1";
local i="regex2";
local j="source";
local k="(?:error|fatal error)\\: ";
local l="tests2";
local m="Semantic Issue";
local n="clang/lib/Sema/SemaDecl.cpp";
local o="7.0";
local p="16.0";
local q="15.0";
local r="6.0";
local s="5.0";
local t="13.0";
local u="clang/lib/Lex/ModuleMap.cpp";
local v="10.0";
local w="None";
local x="9.0";
local y="Lexical or Preprocessor Issue";
local z="constructor";
local A="destructor";
local B="method F";
local C="11.0";
local D="Parse Issue";
local E="12.0";
local F="defined here";
local G="clang/lib/Sema/SemaStmt.cpp";
local H="Modules Issue";
local I="clang/lib/Sema/SemaDeclCXX.cpp";
local J="definition in module \'C\'";
local K="14.0";
local L="clang/lib/AST/ODRDiagsEmitter.cpp";
local M="fatal error\\: ";
local N="clang/lib/Sema/SemaChecking.cpp";
local O="clang/lib/Sema/SemaTemplate.cpp";
local P="A has different definitions in different modules; first difference is ";
local Q=" found ";
local R="AST Deserialization Issue";
local S="clang/lib/Sema/SemaExpr.cpp";
local T="clang/lib/Sema/SemaDeclAttr.cpp";
local U="b1c4d5507fad";
local V="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local W=" is ";
local X="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 Y="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local Z="Update tablegen diagnostic files to be in sync with the def files.";
local ab="5a8987ca5113";
local bb="clang/lib/Parse/ParseDecl.cpp";
local cb="clang/lib/Sema/SemaModule.cpp";
local db="class";
local eb="clang/lib/Sema/SemaExprCXX.cpp";
local fb="clang/lib/Frontend/CompilerInstance.cpp";
local gb="8.0";
local hb="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";
local ib="Introduce -Wreserved-identifier";
local jb="b83b23275b74";
local kb="typedef";
local lb="no ";
local mb="clang/lib/Sema/SemaExprObjC.cpp";
local nb="Introduce basic support for parsing module map files.";
local ob="clang/lib/Serialization/ASTReader.cpp";
local pb="718292f260bf";
local qb="Basic support for Microsoft property declarations and";
local rb="type alias";
local sb="clang/test/Parser/MicrosoftExtensions.cpp";
local tb="Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585";
local ub="method";
local vb="5e77d76c953d";
local wb="clang/lib/Parse/Parser.cpp";
local xb="clang/lib/Frontend/FrontendAction.cpp";
local yb="Introduce basic support for parsing module map files.\n\nModule map files provide a way to map between headers and modules, so\nthat we can layer a module system on top of existing headers without\nchanging those headers at all.\n\nThis commit introduces the module map file parser and the module map\nthat it generates, and wires up the module map file parser so that\nwe\'ll automatically find module map files as part of header\nsearch. Note that we don\'t yet use the information stored in the\nmodule map.\n\nllvm-svn: 144402";
local zb="target";
local Ab="cpu_specific";
local Bb="clang/test/SemaCXX/attr-musttail.cpp";
local Cb="clang/lib/Sema/SemaExprMember.cpp";
local Db="clang/lib/Sema/SemaCXXScopeSpec.cpp";
local Eb="cpu_dispatch";
local Fb="Add a warning for not packing non-POD members in packed structs\n\nDifferential Revision: https://reviews.llvm.org/D118511";
local Gb="ec273d3e3a8c";
local Hb="281d20b601c8";
local Ib="Add a warning for not packing non-POD members in packed structs";
local Jb="attribute \'";
local Kb="Implement Attribute Target MultiVersioning\n\nGCC\'s attribute \'target\', in addition to being an optimization hint,\nalso allows function multiversioning. We currently have the former\nimplemented, this is the latter\'s implementation.\n\nThis works by enabling functions with the same name/signature to coexist,\nso that they can all be emitted. Multiversion state is stored in the\nFunctionDecl itself, and SemaDecl manages the definitions.\nNote that it ends up having to permit redefinition of functions so\nthat they can all be emitted. Additionally, all versions of the function\nmust be emitted, so this also manages that.\n\nNote that this includes some additional rules that GCC does not, since\ndefining something as a MultiVersion function after a usage has been made illegal.\n\nThe only \'history rewriting\' that happens is if a function is emitted before\nit has been converted to a multiversion\'ed function, at which point its name\nneeds to be changed.\n\nFunction templates and virtual functions are NOT yet supported (not supported\nin GCC either).\n\nAdditionally, constructors/destructors are disallowed, but the former is \nplanned.\n\nllvm-svn: 322028";
local Lb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local Mb="Implement Attribute Target MultiVersioning";
local Nb="f881267db9a9";
local Ob="default argument";
local Pb="Mass-rename the handful of error_* diagnostics to err_*.";
local Qb="static assert";
local Rb="clang/test/Modules/odr_hash.cpp";
local Sb="definition";
local Tb="[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>";
local Ub="clang/lib/Sema/SemaPseudoObject.cpp";
local Vb="field";
local Wb="[SYCL] Add sycl_kernel attribute for accelerated code outlining";
local Xb="friend declaration";
local Yb="data member";
local Zb="c094e7dc4b3f";
local ac="[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";
local bc="declaration";
local cc="Parse inferred submodules in module maps, track their contents in\nModule, and (de-)serialize this information. Semantics of inferred\nsubmodules to follow.\n\nllvm-svn: 145864";
local dc="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local ec="[WebAssembly] Improve clang diagnostics for wasm attributes";
local fc="931fcd3ba011";
local gc="no";
local hc="clang/lib/Sema/SemaOverload.cpp";
local ic="clang/test/Sema/attr-target-mv.c";
local jc="clang/lib/Parse/ParseStmtAsm.cpp";
local kc="Parse inferred submodules in module maps, track their contents in";
local lc="clang/lib/Sema/SemaType.cpp";
local mc="734410916a6d";

return {
	["err_matrix_index_outside_range"]={
		[c]={{nil,C,"err_matrix_index_outside_range"}},
		[d]={{nil,C,"matrix %select{row|column}0 index is outside the allowed range [0, %1)"}},
		[g]={{nil,C,{"matrix ",{"row","column"}," index is outside the allowed range [0, B)"}}},
		[h]=k,
		[i]="matrix (?:row|column) index is outside the allowed range \\[0, (.*?)\\)",
		[b]=a,
		[f]={{nil,C,w}},
		[e]={fc,1576908663,ec,ac},
		[j]={{S,5303,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    // ...\n    if (std::optional<llvm::APSInt> Idx = IndexExpr->getIntegerConstantExpr(Context)) {\n      if ((*Idx < 0 || *Idx >= Dim)) {\n        Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_outside_range) << IsColumnIdx << Dim;"}},
		[l]={
			["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:154:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:156:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:158:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:160:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:162:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:164:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:166:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:179:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:210:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:212:19: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:214:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:216:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:218:20: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:220:17: error: matrix row index is outside the allowed range [0, 5)"}
		}
	},
	["err_matrix_separate_incomplete_index"]={
		[c]={{nil,C,"err_matrix_separate_incomplete_index"}},
		[d]={{nil,C,"matrix row and column subscripts cannot be separated by any expression"}},
		[g]={{nil,C,"matrix row and column subscripts cannot be separated by any expression"}},
		[h]=k,
		[i]="matrix row and column subscripts cannot be separated by any expression",
		[b]=a,
		[f]={{nil,C,w}},
		[e]={fc,1576908663,ec,ac},
		[j]={{S,5016,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // The matrix subscript operator ([][])is considered a single operator.\n  // Separating the index expressions by parenthesis is not allowed.\n  if (base && !base->getType().isNull() && base->hasPlaceholderType(BuiltinType::IncompleteMatrixIdx) && !isa<MatrixSubscriptExpr>(base)) {\n    Diag(base->getExprLoc(), diag::err_matrix_separate_incomplete_index) << SourceRange(base->getBeginLoc(), rbLoc);"}},
		[l]={
			["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:168:3: error: matrix row and column subscripts cannot be separated by any expression","clang/test/Sema/matrix-type-operators.c:184:3: error: matrix row and column subscripts cannot be separated by any expression"}
		}
	},
	["err_matrix_subscript_comma"]={
		[c]={{nil,C,"err_matrix_subscript_comma"}},
		[d]={{nil,C,"comma expressions are not allowed as indices in matrix subscript expressions"}},
		[g]={{nil,C,"comma expressions are not allowed as indices in matrix subscript expressions"}},
		[h]=k,
		[i]="comma expressions are not allowed as indices in matrix subscript expressions",
		[b]=a,
		[f]={{nil,C,w}},
		[e]={fc,1576908663,ec,ac},
		[j]={{S,4997,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // Check if base and idx form a MatrixSubscriptExpr.\n  //\n  // Helper to check for comma expressions, which are not allowed as indices for\n  // matrix subscript expressions.\n  auto CheckAndReportCommaError = [this, base, rbLoc](Expr *E) {\n    if (isa<BinaryOperator>(E) && cast<BinaryOperator>(E)->isCommaOp()) {\n      Diag(E->getExprLoc(), diag::err_matrix_subscript_comma) << SourceRange(base->getBeginLoc(), rbLoc);"}},
		[l]={
			["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:180:6: error: comma expressions are not allowed as indices in matrix subscript expressions","clang/test/SemaCXX/matrix-type-operators.cpp:184:9: error: comma expressions are not allowed as indices in matrix subscript expressions"}
		}
	},
	["err_maybe_falloff_nonvoid_block"]={
		[c]="err_maybe_falloff_nonvoid_block",
		[d]={{nil,v,"non-void block does not return a value in all control paths"},{x,nil,"control may reach end of non-void block"}},
		[g]={{nil,v,"non-void block does not return a value in all control paths"},{x,nil,"control may reach end of non-void block"}},
		[h]=k,
		[i]="non\\-void block does not return a value in all control paths",
		[b]=a,
		[f]=m,
		[e]={"3bf1ab48d304",1248818641,"Add noreturn support for blocks.","Add noreturn support for blocks.\n\nllvm-svn: 77377"},
		[j]={{dc,599,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::err_maybe_falloff_nonvoid_block;"}},
		[l]={
			["clang/test/Sema/block-return-1.c"]={"clang/test/Sema/block-return-1.c:5:31: error: non-void block does not return a value in all control paths"}
		}
	},
	["err_mem_init_not_member_or_class"]={
		[c]="err_mem_init_not_member_or_class",
		[d]="member initializer %0 does not name a non-static data member or base class",
		[g]="member initializer A does not name a non-static data member or base class",
		[h]=k,
		[i]="member initializer (.*?) does not name a non\\-static data member or base class",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{I,4509,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\n      if (!TyD && BaseType.isNull()) {\n        Diag(IdLoc, diag::err_mem_init_not_member_or_class) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
		[l]={
			["clang/test/SemaCXX/constexpr-subobj-initialization.cpp"]={"clang/test/SemaCXX/constexpr-subobj-initialization.cpp:19:19: error: member initializer \'value\' does not name a non-static data member or base class"}
		}
	},
	["err_mem_init_not_member_or_class_suggest"]={
		[c]="err_mem_init_not_member_or_class_suggest",
		[d]="initializer %0 does not name a non-static data member or base class; did you mean the %select{base class|member}1 %2?",
		[g]={{nil,nil,{"initializer A does not name a non-static data member or base class; did you mean the ",{"base class","member"}," C?"}}},
		[h]=k,
		[i]="initializer (.*?) does not name a non\\-static data member or base class; did you mean the (?:base class|member) (.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={"15e77a2fd305",1262250624,"Typo correction for C++ base and member initializers, e.g.,","Typo correction for C++ base and member initializers, e.g.,\n\ntest/FixIt/typo.cpp:41:15: error: initializer \'base\' does not name a non-static\n      data member or base class; did you mean the base class \'Base\'?\n  Derived() : base(),\n              ^~~~\n              Base\ntest/FixIt/typo.cpp:42:15: error: initializer \'ember\' does not name a non-static\n      data member or base class; did you mean the member \'member\'?\n              ember() { }\n              ^~~~~\n              member\n\nllvm-svn: 92355"},
		[j]={{I,4481,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\n      if (R.empty() && BaseType.isNull() && (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, ClassDecl))) {\n        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {\n          // ...\n          diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << true);"},{I,4494,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  // ...\n  } else {\n    // ...\n    if (!TyD) {\n      // ...\n      if (R.empty() && BaseType.isNull() && (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, ClassDecl))) {\n        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {\n        // ...\n        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {\n          // ...\n          if (FindBaseInitializer(*this, ClassDecl, Context.getTypeDeclType(Type), DirectBaseSpec, VirtualBaseSpec)) {\n            // ...\n            diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << false, PDiag() /*Suppress note, we provide our own.*/);"}},
		[l]={
			["clang/test/FixIt/typo.cpp"]={"clang/test/FixIt/typo.cpp:55:15: error: initializer \'base\' does not name a non-static data member or base class; did you mean the base class \'Base\'?","clang/test/FixIt/typo.cpp:56:15: error: initializer \'ember\' does not name a non-static data member or base class; did you mean the member \'member\'?"}
		}
	},
	["err_member_call_without_object"]={
		[c]="err_member_call_without_object",
		[d]="call to non-static member function without an object argument",
		[g]="call to non-static member function without an object argument",
		[h]=k,
		[i]="call to non\\-static member function without an object argument",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{S,2359,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n  // ...\n  // Return true if we are inside a default argument instantiation\n  // and the found name refers to an instance member function, otherwise\n  // the caller will try to create an implicit member call and this is wrong\n  // for default arguments.\n  //\n  // FIXME: Is this special case necessary? We could allow the caller to\n  // diagnose this.\n  if (isDefaultArgument && ((*R.begin())->isCXXInstanceMember())) {\n    Diag(R.getNameLoc(), diag::err_member_call_without_object);"},{S,7607,"/// 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 (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))\n    if (!Method->isStatic())\n      return ExprError(Diag(LParenLoc, diag::err_member_call_without_object) << Fn->getSourceRange());"},{Cb,234,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n  // ...\n  else if (IsField)\n  // ...\n  else\n    SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range;"}},
		[l]={
			["clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp"]={"clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:52:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:53:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:69:18: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:77:13: error: call to non-static member function without an object argument"}
		}
	},
	["err_member_decl_does_not_match"]={
		[c]="err_member_decl_does_not_match",
		[d]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1",
		[g]={{nil,nil,{"out-of-line ",{bc,Sb}," of A does not match any declaration in B"}}},
		[h]=k,
		[i]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?)",
		[b]=a,
		[f]=m,
		[e]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations","Implement [class.friend]p11\'s special name lookup rules for friend declarations\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
		[j]={{n,8958,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{O,2069,"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.isSet()) {\n    // If the name of the template was qualified, we must be defining the\n    // template out-of-line.\n    if (!SS.isInvalid() && !Invalid && !PrevClassTemplate) {\n      Diag(NameLoc, TUK == TUK_Friend ? diag::err_friend_decl_does_not_match : diag::err_member_decl_does_not_match) << Name << SemanticContext << /*IsDefinition*/ true << SS.getRange();"}},
		[l]={
			["clang/test/CXX/special/class.inhctor/p8.cpp"]={"clang/test/CXX/special/class.inhctor/p8.cpp:32:35: error: out-of-line definition of \'D\' does not match any declaration in \'D\'"}
		}
	},
	["err_member_decl_does_not_match_suggest"]={
		[c]="err_member_decl_does_not_match_suggest",
		[d]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1; did you mean %3?",
		[g]={{nil,nil,{"out-of-line ",{bc,Sb}," of A does not match any declaration in B; did you mean D?"}}},
		[h]=k,
		[i]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?); did you mean (.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations","Implement [class.friend]p11\'s special name lookup rules for friend declarations\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
		[j]={{n,9042,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
		[l]={
			["clang/test/FixIt/typo-crash.cpp"]={"clang/test/FixIt/typo-crash.cpp:23:5: error: out-of-line declaration of \'global\' does not match any declaration in namespace \'PR12297::A\'; did you mean \'::PR12297::global\'?"}
		}
	},
	["err_member_def_does_not_match_ret_type"]={
		[c]="err_member_def_does_not_match_ret_type",
		[d]="return type of out-of-line definition of %q0 differs from that in the declaration",
		[g]="return type of out-of-line definition of A differs from that in the declaration",
		[h]=k,
		[i]="return type of out\\-of\\-line definition of (.*?) differs from that in the declaration",
		[b]=a,
		[f]=m,
		[e]={"3d3208675f79",1296885289,"When the out-of-line definition differs from the declaration in the return type,","When the out-of-line definition differs from the declaration in the return type,\nsay \"out-of-line definition differ from the declaration in the return type\" instead of\nthe silly \"functions that differ only in their return type cannot be overloaded\".\n\nAddresses rdar://7980179.\n\nllvm-svn: 124939"},
		[j]={{n,3936,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) && canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, OldDeclaredReturnType)) {\n      // ...\n      if (ResQT.isNull()) {\n        if (New->isCXXClassMember() && New->isOutOfLine())\n          Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) << New << New->getReturnTypeSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:271:10: error: return type of out-of-line definition of \'rdar7980179::A::f0\' differs from that in the declaration"}
		}
	},
	["err_member_def_undefined_record"]={
		[c]="err_member_def_undefined_record",
		[d]="out-of-line definition of %0 from class %1 without definition",
		[g]="out-of-line definition of A from class B without definition",
		[h]=k,
		[i]="out\\-of\\-line definition of (.*?) from class (.*?) without definition",
		[b]=a,
		[f]=m,
		[e]={"67da35c832e6",1265322386,"Extract a common structure for holding information about the definition","Extract a common structure for holding information about the definition\nof a C++ record.  Exposed a lot of problems where various routines were\nsilently doing The Wrong Thing (or The Acceptable Thing in The Wrong Order)\nwhen presented with a non-definition.  Also cuts down on memory usage.\n\nllvm-svn: 95330"},
		[j]={{n,6303,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  if (D.getCXXScopeSpec().isInvalid())\n  // ...\n  else if (D.getCXXScopeSpec().isSet()) {\n    // ...\n    // If a class is incomplete, do not parse entities inside it.\n    if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {\n      Diag(D.getIdentifierLoc(), diag::err_member_def_undefined_record) << Name << DC << D.getCXXScopeSpec().getRange();"}},
		[l]={
			["clang/test/CXX/temp/temp.decls/temp.class.spec/temp.class.spec.mfunc/p1-neg.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/temp.class.spec.mfunc/p1-neg.cpp:24:15: error: out-of-line definition of \'f1\' from class \'A<T, N>\' without definition"}
		}
	},
	["err_member_extra_qualification"]={
		[c]="err_member_extra_qualification",
		[d]="extra qualification on member %0",
		[g]="extra qualification on member A",
		[h]=k,
		[i]="extra qualification on member (.*?)",
		[b]=a,
		[f]=m,
		[e]={"43bc036e8ae3",1347567380,"Promote the warning about extra qualification on a declaration from a","Promote the warning about extra qualification on a declaration from a\nwarning to an error. C++ bans it, and both GCC and EDG diagnose it as\nan error. Microsoft allows it, so we still warn in Microsoft\nmode. Fixes <rdar://problem/11135644>.\n\nllvm-svn: 163831"},
		[j]={{n,6177,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n  // class X {\n  //   void X::f();\n  // };\n  //\n  // Note, it was once ill-formed to give redundant qualification in all\n  // contexts, but that rule was removed by DR482.\n  if (Cur->Equals(DC)) {\n    if (Cur->isRecord()) {\n      Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}},
		[l]={
			["clang/test/CXX/special/class.ctor/p1.cpp"]={"clang/test/CXX/special/class.ctor/p1.cpp:46:7: error: extra qualification on member \'X2\'","clang/test/CXX/special/class.ctor/p1.cpp:53:7: error: extra qualification on member \'X3\'"}
		}
	},
	["err_member_function_call_bad_cvr"]={
		[c]="err_member_function_call_bad_cvr",
		[d]={{nil,r,"\'this\' argument to member function %0 has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"},{s,nil,"member function %0 not viable: \'this\' argument has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"}},
		[g]={{nil,r,{"\'this\' argument to member function A has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}},{s,nil,{"member function A not viable: \'this\' argument has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}}},
		[h]=k,
		[i]="\'this\' argument to member function (.*?) has type (.*?), but function is not marked (?:const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict)",
		[b]=a,
		[f]=m,
		[e]={"9813d3221d7d",1289894685,"Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000","Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000\n\nllvm-svn: 119336"},
		[j]={{hc,5651,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    case BadConversionSequence::bad_qualifiers: {\n      // ...\n      if (CVR) {\n        Diag(From->getBeginLoc(), diag::err_member_function_call_bad_cvr) << Method->getDeclName() << FromRecordType << (CVR - 1) << From->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:109:21: error: \'this\' argument to member function \'val\' has type \'const TemplateStruct<0>\', but function is not marked const"}
		}
	},
	["err_member_function_call_bad_ref"]={
		[c]={{nil,r,"err_member_function_call_bad_ref"}},
		[d]={{nil,r,"\'this\' argument to member function %0 is an %select{lvalue|rvalue}1, but function has %select{non-const lvalue|rvalue}2 ref-qualifier"}},
		[g]={{nil,r,{"\'this\' argument to member function A is an ",{"lvalue","rvalue"},", but function has ",{"non-const lvalue","rvalue"}," ref-qualifier"}}},
		[h]=k,
		[i]="\'this\' argument to member function (.*?) is an (?:lvalue|rvalue), but function has (?:non\\-const lvalue|rvalue) ref\\-qualifier",
		[b]=a,
		[f]={{nil,r,m}},
		[e]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
		[j]={{hc,5665,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    case BadConversionSequence::lvalue_ref_to_rvalue:\n    case BadConversionSequence::rvalue_ref_to_lvalue: {\n      // ...\n      Diag(From->getBeginLoc(), diag::err_member_function_call_bad_ref) << Method->getDeclName() << FromClassification.isRValue() << IsRValueQualified;"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:10:3: error: \'this\' argument to member function \'ref\' is an rvalue, but function has non-const lvalue ref-qualifier","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:12:3: error: \'this\' argument to member function \'cvref\' is an rvalue, but function has non-const lvalue ref-qualifier"}
		}
	},
	["err_member_function_call_bad_type"]={
		[c]={{nil,r,"err_member_function_call_bad_type"}},
		[d]={{nil,r,"cannot initialize object parameter of type %0 with an expression of type %1"}},
		[g]={{nil,r,"cannot initialize object parameter of type A with an expression of type B"}},
		[h]=k,
		[i]="cannot initialize object parameter of type (.*?) with an expression of type (.*?)",
		[b]=a,
		[f]={{nil,r,m}},
		[e]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
		[j]={{hc,5682,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n    // ...\n    return Diag(From->getBeginLoc(), diag::err_member_function_call_bad_type) << ImplicitParamRecordType << FromRecordType << From->getSourceRange();"}}
	},
	["err_member_function_initialization"]={
		[c]="err_member_function_initialization",
		[d]="initializer on function does not look like a pure-specifier",
		[g]="initializer on function does not look like a pure-specifier",
		[h]=k,
		[i]="initializer on function does not look like a pure\\-specifier",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{n,13131,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {\n    // ...\n    Diag(Method->getLocation(), diag::err_member_function_initialization) << Method->getDeclName() << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:8:8: error: initializer on function does not look like a pure-specifier","clang/test/SemaCXX/virtuals.cpp:9:8: error: initializer on function does not look like a pure-specifier","clang/test/SemaCXX/virtuals.cpp:61:11: error: initializer on function does not look like a pure-specifier"}
		}
	},
	["err_member_name_of_class"]={
		[c]="err_member_name_of_class",
		[d]="member %0 has the same name as its class",
		[g]="member A has the same name as its class",
		[h]=k,
		[i]="member (.*?) has the same name as its class",
		[b]=a,
		[f]=m,
		[e]={"36c22a2335c0",1287148881,"Diagnose C++ [class.mem]p13-14, where a class member has the same name","Diagnose C++ [class.mem]p13-14, where a class member has the same name\nas the class itself. Fixes PR7082.\n\nllvm-svn: 116573"},
		[j]={{n,6135,"/// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:\n///   If T is the name of a class, then each of the following shall have a\n///   name different from T:\n///     - every static data member of class T;\n///     - every member function of class T\n///     - every member of class T that is itself a type;\n/// \\returns true if the declaration name violates these rules.\nbool Sema::DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo NameInfo) {\n  // ...\n  if (Record && Record->getIdentifier() && Record->getDeclName() == Name) {\n    Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;"},{I,6956,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  if (Record->getIdentifier()) {\n    // ...\n    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {\n      // ...\n      if (((isa<FieldDecl>(D) || isa<UnresolvedUsingValueDecl>(D)) && Record->hasUserDeclaredConstructor()) || isa<IndirectFieldDecl>(D)) {\n        Diag((*I)->getLocation(), diag::err_member_name_of_class) << D->getDeclName();"}},
		[l]={
			["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:69:31: error: member \'Nested\' has the same name as its class"}
		}
	},
	["err_member_not_yet_instantiated"]={
		[c]="err_member_not_yet_instantiated",
		[d]="no member %0 in %1; it has not yet been instantiated",
		[g]="no member A in B; it has not yet been instantiated",
		[h]=k,
		[i]="no member (.*?) in (.*?); it has not yet been instantiated",
		[b]=a,
		[f]=m,
		[e]={"528ad93924b1",1299442365,"We may fail to map a declaration in a template to its instantiated","We may fail to map a declaration in a template to its instantiated\ndeclaration because of interesting ordering dependencies while\ninstantiating a class template or member class thereof. Complain,\nrather than asserting (+Asserts) or silently rejecting the code\n(-Asserts).\n\nFixes the crash-on-invalid in PR8965. \n\nllvm-svn: 127129"},
		[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6321,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///   enum Kind {\n///     KnownValue = sizeof(T)\n///   };\n///\n///   bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  // ...\n  if (ParentDC != D->getDeclContext()) {\n    // ...\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      // ...\n      } else if (hasUncompilableErrorOccurred()) {\n      // ...\n      } else if (IsBeingInstantiated) {\n        // ...\n        Diag(Loc, diag::err_member_not_yet_instantiated) << D->getDeclName() << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));"}},
		[l]={
			["clang/test/SemaCXX/many-template-parameter-lists.cpp"]={"clang/test/SemaCXX/many-template-parameter-lists.cpp:31:30: error: no member \'A\' in \'X<int>\'; it has not yet been instantiated"}
		}
	},
	["err_member_qualification"]={
		[c]="err_member_qualification",
		[d]="non-friend class member %0 cannot have a qualified name",
		[g]="non-friend class member A cannot have a qualified name",
		[h]=k,
		[i]="non\\-friend class member (.*?) cannot have a qualified name",
		[b]=a,
		[f]=m,
		[e]={"a007d36c1bad",1287008393,"Generalize the checking for qualification of (non-friend) class","Generalize the checking for qualification of (non-friend) class\nmembers. Provide a hard error when the qualification doesn\'t match the\ncurrent class type, or a warning + Fix-it if it does match the current\nclass type. Fixes PR8159.\n\nllvm-svn: 116445"},
		[j]={{n,6191,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n      Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{n,6219,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  if (Cur->isRecord()) {\n    // ...\n    Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{I,3594,"/// 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 (SS.isSet() && !SS.isInvalid()) {\n      // The user provided a superfluous scope specifier inside a class\n      // definition:\n      //\n      // class X {\n      //   int X::member;\n      // };\n      if (DeclContext *DC = computeDeclContext(SS, false))\n      // ...\n      else\n        Diag(D.getIdentifierLoc(), diag::err_member_qualification) << Name << SS.getRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:7:20: error: non-friend class member \'x\' cannot have a qualified name","clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:13:20: error: non-friend class member \'x2\' cannot have a qualified name"}
		}
	},
	["err_member_redeclared"]={
		[c]="err_member_redeclared",
		[d]="class member cannot be redeclared",
		[g]="class member cannot be redeclared",
		[h]=k,
		[i]="class member cannot be redeclared",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{n,4005,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //   [...] A member shall not be declared twice in the\n        //   member-specification, except that a nested class or member\n        //   class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          // ...\n          if (isa<CXXConstructorDecl>(OldMethod))\n          // ...\n          else if (isa<CXXDestructorDecl>(NewMethod))\n          // ...\n          else if (isa<CXXConversionDecl>(NewMethod))\n          // ...\n          else\n            NewDiag = diag::err_member_redeclared;"}},
		[l]={
			["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:30:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:34:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:38:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:45:8: error: class member cannot be redeclared"}
		}
	},
	["err_member_redeclared_in_instantiation"]={
		[c]="err_member_redeclared_in_instantiation",
		[d]="multiple overloads of %0 instantiate to the same signature %1",
		[g]="multiple overloads of A instantiate to the same signature B",
		[h]=k,
		[i]="multiple overloads of (.*?) instantiate to the same signature (.*?)",
		[b]=a,
		[f]=m,
		[e]={"57e7ff9c0c44",1342152724,"Provide a special-case diagnostic when two class member functions instantiate","Provide a special-case diagnostic when two class member functions instantiate\nto the same signature. Fix a bug in the type printer which would cause this\ndiagnostic to print wonderful types like \'const const int *\'.\n\nllvm-svn: 160161"},
		[j]={{n,4009,"/// 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 (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //   [...] A member shall not be declared twice in the\n        //   member-specification, except that a nested class or member\n        //   class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n        // ...\n        } else {\n          Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) << New << New->getType();"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-method.cpp"]={"clang/test/SemaTemplate/instantiate-method.cpp:181:10: error: multiple overloads of \'f\' instantiate to the same signature \'void (const int *)\'"}
		}
	},
	["err_member_reference_needs_call"]={
		[c]="err_member_reference_needs_call",
		[d]="base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?",
		[g]={{nil,nil,{"base of member reference is a function; perhaps you meant to call it",{a," with no arguments"},"?"}}},
		[h]=k,
		[i]="base of member reference is a function; perhaps you meant to call it(?:| with no arguments)\\?",
		[b]=a,
		[f]=m,
		[e]={"d82ae38d5300",1257489047,"Rework the fix-it hint for code like","Rework the fix-it hint for code like\n\n  get_origin->x\n\nwhere get_origin is actually a function and the user has forgotten the\nparentheses. Instead of giving a lame note for the fix-it, give a\nfull-fledge error, early, then build the call expression to try to\nrecover. \n\nllvm-svn: 86238"},
		[j]={{Cb,1681,"fail:\n  // ...\n  if (S.tryToRecoverWithCall(BaseExpr, S.PDiag(diag::err_member_reference_needs_call),"}},
		[l]={
			["clang/test/FixIt/fixit-errors.c"]={"clang/test/FixIt/fixit-errors.c:22:9: error: base of member reference is a function; perhaps you meant to call it with no arguments?"}
		}
	},
	["err_member_with_template_arguments"]={
		[c]={{nil,q,"err_member_with_template_arguments"}},
		[d]={{nil,q,"member %0 cannot have template arguments"}},
		[g]={{nil,q,"member A cannot have template arguments"}},
		[h]=k,
		[i]="member (.*?) cannot have template arguments",
		[b]=a,
		[f]={{nil,q,m}},
		[e]={"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"},
		[j]={{I,3574,"/// 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 (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n      Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) << II << SourceRange(D.getName().TemplateId->LAngleLoc, D.getName().TemplateId->RAngleLoc) << D.getName().TemplateId->LAngleLoc;"}},
		[l]={
			["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:39:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:40:7: error: member \'j\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:50:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:51:7: error: member \'j\' cannot have template arguments"}
		}
	},
	["err_mempointer_in_nonclass_type"]={
		[c]="err_mempointer_in_nonclass_type",
		[d]="member pointer refers into non-class type %0",
		[g]="member pointer refers into non-class type A",
		[h]=k,
		[i]="member pointer refers into non\\-class type (.*?)",
		[b]=a,
		[f]=m,
		[e]={"0bdc1f5eef52",1244585859,"Handle member pointer types with dependent class types (e.g., int","Handle member pointer types with dependent class types (e.g., int\nT::*) and implement template instantiation for member pointer types.\n\nllvm-svn: 73151"},
		[j]={{lc,3096,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (!Class->isDependentType() && !Class->isRecordType()) {\n    Diag(Loc, diag::err_mempointer_in_nonclass_type) << Class;"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:8:24: error: member pointer refers into non-class type \'int\'"}
		}
	},
	["err_memptr_conv_via_virtual"]={
		[c]="err_memptr_conv_via_virtual",
		[d]="conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed",
		[g]="conversion from pointer to member of class A to pointer to member of class B via virtual base C is not allowed",
		[h]=k,
		[i]="conversion from pointer to member of class (.*?) to pointer to member of class (.*?) via virtual base (.*?) is not allowed",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{"clang/lib/Sema/SemaCast.cpp",1823,"/// TryStaticMemberPointerUpcast - Tests whether a conversion according to\n/// C++ 5.2.9p9 is valid:\n///\n///   An rvalue of type \"pointer to member of D of type cv1 T\" can be\n///   converted to an rvalue of type \"pointer to member of B of type cv2 T\",\n///   where B is a base class of D [...].\n///\nTryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n    Self.Diag(OpRange.getBegin(), diag::err_memptr_conv_via_virtual) << SrcClass << DestClass << QualType(VBase, 0) << OpRange;"},{hc,3284,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n  // ...\n  if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n    Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) << FromClass << ToClass << QualType(VBase, 0) << From->getSourceRange();"}},
		[l]={
			["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:42:25: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed","clang/test/CXX/conv/conv.mem/p4.cpp:43:27: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed"}
		}
	},
	["err_memptr_incomplete"]={
		[c]={{nil,o,"err_memptr_incomplete"}},
		[d]={{nil,o,"member pointer has incomplete base type %0"}},
		[g]={{nil,o,"member pointer has incomplete base type A"}},
		[h]=k,
		[i]="member pointer has incomplete base type (.*?)",
		[b]=a,
		[f]={{nil,o,m}},
		[e]={"54d13b406828",1527651604,"Sema: Add a flag for rejecting member pointers with incomplete base types.","Sema: Add a flag for rejecting member pointers with incomplete base types.\n\nCodebases that need to be compatible with the Microsoft ABI can pass\nthis flag to avoid issues caused by the lack of a fixed ABI for\nincomplete member pointers.\n\nDifferential Revision: https://reviews.llvm.org/D47503\n\nllvm-svn: 333498"},
		[j]={{lc,9111,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // ...\n  if (const MemberPointerType *MPTy = T->getAs<MemberPointerType>()) {\n    if (!MPTy->getClass()->isDependentType()) {\n      if (getLangOpts().CompleteMemberPointers && !MPTy->getClass()->getAsCXXRecordDecl()->isBeingDefined() && RequireCompleteType(Loc, QualType(MPTy->getClass(), 0), Kind, diag::err_memptr_incomplete))"}},
		[l]={
			["clang/test/SemaCXX/complete-member-pointers.cpp"]={"clang/test/SemaCXX/complete-member-pointers.cpp:5:3: error: member pointer has incomplete base type \'S\'"}
		}
	},
	["err_memtag_any2arg_pointer"]={
		[c]={{nil,x,"err_memtag_any2arg_pointer"}},
		[d]={{nil,x,"at least one argument of MTE builtin function must be a pointer (%0, %1 invalid)"}},
		[g]={{nil,x,"at least one argument of MTE builtin function must be a pointer (A, B invalid)"}},
		[h]=k,
		[i]="at least one argument of MTE builtin function must be a pointer \\((.*?), (.*?) invalid\\)",
		[b]=a,
		[f]={{nil,x,w}},
		[e]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
		[j]={{N,9086,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // at least one argument should be pointer type\n    if (!ArgTypeA->isAnyPointerType() && !ArgTypeB->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer) << ArgTypeA << ArgTypeB << ArgA->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:136:10: error: at least one argument of MTE builtin function must be a pointer (\'std::nullptr_t\', \'std::nullptr_t\' invalid)"}
		}
	},
	["err_memtag_arg_must_be_integer"]={
		[c]={{nil,x,"err_memtag_arg_must_be_integer"}},
		[d]={{nil,x,"%0 argument of MTE builtin function must be an integer type (%1 invalid)"}},
		[g]={{nil,x,"A argument of MTE builtin function must be an integer type (B invalid)"}},
		[h]=k,
		[i]="(.*?) argument of MTE builtin function must be an integer type \\((.*?) invalid\\)",
		[b]=a,
		[f]={{nil,x,w}},
		[e]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
		[j]={{N,8972,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"},{N,9017,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:15:10: error: second argument of MTE builtin function must be an integer type (\'unsigned int *\' invalid)","clang/test/Sema/builtins-arm64-mte.c:80:12: error: second argument of MTE builtin function must be an integer type (\'int *\' invalid)"}
		}
	},
	["err_memtag_arg_must_be_pointer"]={
		[c]={{nil,x,"err_memtag_arg_must_be_pointer"}},
		[d]={{nil,x,"%0 argument of MTE builtin function must be a pointer (%1 invalid)"}},
		[g]={{nil,x,"A argument of MTE builtin function must be a pointer (B invalid)"}},
		[h]=k,
		[i]="(.*?) argument of MTE builtin function must be a pointer \\((.*?) invalid\\)",
		[b]=a,
		[f]={{nil,x,w}},
		[e]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
		[j]={{N,8963,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{N,8990,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_addg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{N,9012,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{N,9034,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_ldg || BuiltinID == AArch64::BI__builtin_arm_stg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:10:10: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:75:12: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:90:11: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:110:4: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)"}
		}
	},
	["err_memtag_arg_null_or_pointer"]={
		[c]={{nil,x,"err_memtag_arg_null_or_pointer"}},
		[d]={{nil,x,"%0 argument of MTE builtin function must be a null or a pointer (%1 invalid)"}},
		[g]={{nil,x,"A argument of MTE builtin function must be a null or a pointer (B invalid)"}},
		[h]=k,
		[i]="(.*?) argument of MTE builtin function must be a null or a pointer \\((.*?) invalid\\)",
		[b]=a,
		[f]={{nil,x,w}},
		[e]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
		[j]={{N,9063,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // argument should be either a pointer or null\n    if (!ArgTypeA->isAnyPointerType() && !isNull(ArgA))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"first\" << ArgTypeA << ArgA->getSourceRange();"},{N,9067,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    if (!ArgTypeB->isAnyPointerType() && !isNull(ArgB))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"second\" << ArgTypeB << ArgB->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:115:10: error: first argument of MTE builtin function must be a null or a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:120:10: error: second argument of MTE builtin function must be a null or a pointer (\'int\' invalid)"}
		}
	},
	["err_messaging_class_with_direct_method"]={
		[c]={{nil,v,"err_messaging_class_with_direct_method"}},
		[d]={{nil,v,"messaging a Class with a method that is possibly direct"}},
		[g]={{nil,v,"messaging a Class with a method that is possibly direct"}},
		[h]=k,
		[i]="messaging a Class with a method that is possibly direct",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={Zb,1573050950,Wb,Tb},
		[j]={{mb,3155,"/// 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 && Method->isDirectMethod()) {\n    // ...\n    // Under ARC, self can\'t be assigned, and doing a direct call to `self`\n    // when it\'s a Class is hence safe.  For other cases, we can\'t trust `self`\n    // is what we think it is, so we reject it.\n    if (ReceiverType->isObjCClassType() && !isImplicit && !(Receiver->isObjCSelfExpr() && getLangOpts().ObjCAutoRefCount)) {\n      {\n        auto Builder = Diag(Receiver->getExprLoc(), diag::err_messaging_class_with_direct_method);"}},
		[l]={
			["clang/test/SemaObjC/method-direct-arc.m"]={"clang/test/SemaObjC/method-direct-arc.m:27:4: error: messaging a Class with a method that is possibly direct"}
		}
	},
	["err_messaging_super_with_direct_method"]={
		[c]={{nil,v,"err_messaging_super_with_direct_method"}},
		[d]={{nil,v,"messaging super with a direct method"}},
		[g]={{nil,v,"messaging super with a direct method"}},
		[h]=k,
		[i]="messaging super with a direct method",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={Zb,1573050950,Wb,Tb},
		[j]={{mb,2703,"/// \\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  if (Method && Method->isDirectMethod() && SuperLoc.isValid()) {\n    Diag(SuperLoc, diag::err_messaging_super_with_direct_method) << FixItHint::CreateReplacement(SuperLoc, getLangOpts().ObjCAutoRefCount ? \"self\" : Method->getClassInterface()->getName());"},{mb,3168,"/// 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 && Method->isDirectMethod()) {\n    // ...\n    if (SuperLoc.isValid()) {\n      {\n        auto Builder = Diag(SuperLoc, diag::err_messaging_super_with_direct_method);"}},
		[l]={
			["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:144:4: error: messaging super with a direct method","clang/test/SemaObjC/method-direct.m:147:4: error: messaging super with a direct method"}
		}
	},
	["err_messaging_unqualified_id_with_direct_method"]={
		[c]={{nil,v,"err_messaging_unqualified_id_with_direct_method"}},
		[d]={{nil,v,"messaging unqualified id with a method that is possibly direct"}},
		[g]={{nil,v,"messaging unqualified id with a method that is possibly direct"}},
		[h]=k,
		[i]="messaging unqualified id with a method that is possibly direct",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={Zb,1573050950,Wb,Tb},
		[j]={{mb,3143,"/// 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 && Method->isDirectMethod()) {\n    if (ReceiverType->isObjCIdType() && !isImplicit) {\n      Diag(Receiver->getExprLoc(), diag::err_messaging_unqualified_id_with_direct_method);"}},
		[l]={
			["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:164:4: error: messaging unqualified id with a method that is possibly direct"}
		}
	},
	["err_method_kernel"]={
		[c]={{nil,x,"err_method_kernel"}},
		[d]={{nil,x,"kernel functions cannot be class members"}},
		[g]={{nil,x,"kernel functions cannot be class members"}},
		[h]=k,
		[i]="kernel functions cannot be class members",
		[b]=a,
		[f]={{nil,x,m}},
		[e]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions.\n\nKernel function names have to be preserved as in the original\nsource to be able to access them from the host API side. \n\nThis commit also adds restriction to kernels that prevents them\nfrom being used in overloading, templates, etc.\n\nDifferential Revision: https://reviews.llvm.org/D60454\n\nllvm-svn: 360152"},
		[j]={{n,10710,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // ...\n    if (getLangOpts().OpenCLCPlusPlus) {\n      if (DC->isRecord()) {\n        Diag(D.getIdentifierLoc(), diag::err_method_kernel);"}},
		[l]={
			["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:9:15: error: kernel functions cannot be class members"}
		}
	},
	["err_method_not_found_with_typo"]={
		[c]="err_method_not_found_with_typo",
		[d]="%select{instance|class}1 method %0 not found ; did you mean %2?",
		[g]={{nil,nil,{{"instance",db}," method A not found ; did you mean C?"}}},
		[h]=k,
		[i]="(?:instance|class) method (.*?) not found ; did you mean (.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{mb,1751,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (!getLangOpts().DebuggerSupport) {\n      // ...\n      if (OMD && !OMD->isInvalidDecl()) {\n        if (getLangOpts().ObjCAutoRefCount)\n          DiagID = diag::err_method_not_found_with_typo;"}},
		[l]={
			["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:432:6: error: instance method \'test18\' not found ; did you mean \'test17\'?"}
		}
	},
	["err_mips_builtin_requires_dsp"]={
		[c]={{nil,v,"err_mips_builtin_requires_dsp"}},
		[d]={{nil,v,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
		[g]={{nil,v,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
		[h]=k,
		[i]="this builtin requires \'dsp\' ASE, please use \\-mdsp",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={Zb,1573050950,Wb,Tb},
		[j]={{N,3921,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (Mips::BI__builtin_mips_addu_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_lwx) {\n    if (!TI.hasFeature(\"dsp\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp);"}},
		[l]={
			["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:14:3: error: this builtin requires \'dsp\' ASE, please use -mdsp","clang/test/Sema/builtins-mips-features.c:16:3: error: this builtin requires \'dsp\' ASE, please use -mdsp"}
		}
	},
	["err_mips_builtin_requires_dspr2"]={
		[c]={{nil,v,"err_mips_builtin_requires_dspr2"}},
		[d]={{nil,v,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
		[g]={{nil,v,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
		[h]=k,
		[i]="this builtin requires \'dsp r2\' ASE, please use \\-mdspr2",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={Zb,1573050950,Wb,Tb},
		[j]={{N,3928,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_mips_absq_s_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_subuh_r_qb) {\n    if (!TI.hasFeature(\"dspr2\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dspr2);"}},
		[l]={
			["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:24:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2","clang/test/Sema/builtins-mips-features.c:26:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2"}
		}
	},
	["err_mips_builtin_requires_msa"]={
		[c]={{nil,v,"err_mips_builtin_requires_msa"}},
		[d]={{nil,v,"this builtin requires \'msa\' ASE, please use -mmsa"}},
		[g]={{nil,v,"this builtin requires \'msa\' ASE, please use -mmsa"}},
		[h]=k,
		[i]="this builtin requires \'msa\' ASE, please use \\-mmsa",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={Zb,1573050950,Wb,Tb},
		[j]={{N,3934,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_msa_add_a_b <= BuiltinID && BuiltinID <= Mips::BI__builtin_msa_xori_b) {\n    if (!TI.hasFeature(\"msa\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa);"}},
		[l]={
			["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:34:3: error: this builtin requires \'msa\' ASE, please use -mmsa","clang/test/Sema/builtins-mips-features.c:36:3: error: this builtin requires \'msa\' ASE, please use -mmsa"}
		}
	},
	["err_mips_fp64_req"]={
		[c]={{nil,gb,"err_mips_fp64_req"}},
		[d]={{nil,gb,"\'%0\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
		[g]={{nil,gb,"\'A\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
		[h]=k,
		[i]="\'(.*?)\' can only be used if the target supports the mfhc1 and mthc1 instructions",
		[b]=a,
		[f]={{nil,gb,w}},
		[e]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx","[clang][mips] Set __mips_fpr correctly for -mfpxx\n\nSet __mips_fpr to 0 if o32 ABI is used with either -mfpxx\nor none of -mfp32, -mfpxx, -mfp64 being specified.\n\nIntroduce additional checks:\n-mfpxx is only to be used in conjunction with the o32 ABI.\nreport an error when incompatible options are provided.\n\nFormerly no errors were raised when combining n32/n64 ABIs\nwith -mfp32 and -mfpxx.\n\nThere are other cases when __mips_fpr should be set to 0\nthat are not covered, ex. using o32 on a mips64 cpu\nwhich is valid but not supported in the backend as of yet.\n\nDifferential Revision: https://reviews.llvm.org/D50557\n\nllvm-svn: 340391"},
		[j]={{"clang/lib/Basic/Targets/Mips.cpp",270,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Option -mfp64 permitted on Mips32 iff revision 2 or higher is present\n  if (FPMode == FP64 && (CPU == \"mips1\" || CPU == \"mips2\" || getISARev() < 2) && ABI == \"o32\") {\n    Diags.Report(diag::err_mips_fp64_req) << \"-mfp64\";"}}
	},
	["err_mismatched_code_seg_base"]={
		[c]={{nil,o,"err_mismatched_code_seg_base"}},
		[d]={{nil,o,"derived class must specify the same code segment as its base classes"}},
		[g]={{nil,o,"derived class must specify the same code segment as its base classes"}},
		[h]=k,
		[i]="derived class must specify the same code segment as its base classes",
		[b]=a,
		[f]={{nil,o,m}},
		[e]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
		[j]={{I,2758,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // ...\n  if ((DerivedCSA || BaseCSA) && (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {\n    Diag(Class->getLocation(), diag::err_mismatched_code_seg_base);"}},
		[l]={
			["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:27:8: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:30:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:33:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:37:62: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes"}
		}
	},
	["err_mismatched_code_seg_override"]={
		[c]={{nil,o,"err_mismatched_code_seg_override"}},
		[d]={{nil,o,"overriding virtual function must specify the same code segment as its overridden function"}},
		[g]={{nil,o,"overriding virtual function must specify the same code segment as its overridden function"}},
		[h]=k,
		[i]="overriding virtual function must specify the same code segment as its overridden function",
		[b]=a,
		[f]={{nil,o,m}},
		[e]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
		[j]={{I,17994,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if ((NewCSA || OldCSA) && (!OldCSA || !NewCSA || NewCSA->getName() != OldCSA->getName())) {\n    Diag(New->getLocation(), diag::err_mismatched_code_seg_override);"}},
		[l]={
			["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:60:7: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:70:15: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:73:46: error: overriding virtual function must specify the same code segment as its overridden function"}
		}
	},
	["err_mismatched_exception_spec"]={
		[c]="err_mismatched_exception_spec",
		[d]="exception specification in declaration does not match previous declaration",
		[g]="exception specification in declaration does not match previous declaration",
		[h]=k,
		[i]="exception specification in declaration does not match previous declaration",
		[b]=a,
		[f]=m,
		[e]={"4f4d7b5d8e5f",1246707540,"Catch function redeclarations with incompatible exception specifications.","Catch function redeclarations with incompatible exception specifications.\n\nllvm-svn: 74787"},
		[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",311,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"},{"clang/lib/Sema/SemaExceptionSpec.cpp",504,"/// CheckEquivalentExceptionSpec - Check if the two types have equivalent\n/// exception specifications. Exception specifications are equivalent if\n/// they allow exactly the same set of exception types. It does not matter how\n/// that is achieved. See C++ [except.spec]p2.\nbool Sema::CheckEquivalentExceptionSpec(const FunctionProtoType *Old, SourceLocation OldLoc, const FunctionProtoType *New, SourceLocation NewLoc) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"}},
		[l]={
			["clang/test/CXX/special/class.dtor/p3.cpp"]={"clang/test/CXX/special/class.dtor/p3.cpp:16:30: error: exception specification in declaration does not match previous declaration"}
		}
	},
	["err_mismatched_exception_spec_explicit_instantiation"]={
		[c]="err_mismatched_exception_spec_explicit_instantiation",
		[d]="exception specification in explicit instantiation does not match instantiated one",
		[g]="exception specification in explicit instantiation does not match instantiated one",
		[h]=k,
		[i]="exception specification in explicit instantiation does not match instantiated one",
		[b]=a,
		[f]=m,
		[e]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation.","Fix for exception specification mismatch in explicit instantiation.\nAccording to C++ standard if an exception-specification is specified in an explicit instantiation directive, it shall be compatible with the exception-specifications of other declarations of that function. This patch adds checks for this.\nDifferential Revision: http://reviews.llvm.org/D5822\n\nllvm-svn: 221448"},
		[j]={{O,10667,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  // C++11 [except.spec]p4\n  // In an explicit instantiation an exception-specification may be specified,\n  // but is not required.\n  // If an exception-specification is specified in an explicit instantiation\n  // directive, it shall be compatible with the exception-specifications of\n  // other declarations of that function.\n  if (auto *FPT = R->getAs<FunctionProtoType>())\n    if (FPT->hasExceptionSpec()) {\n      unsigned DiagID = diag::err_mismatched_exception_spec_explicit_instantiation;"}},
		[l]={
			["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:156:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:158:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:160:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:164:10: error: exception specification in explicit instantiation does not match instantiated one"}
		}
	},
	["err_mismatched_ms_inheritance"]={
		[c]="err_mismatched_ms_inheritance",
		[d]="inheritance model does not match %select{definition|previous declaration}0",
		[g]={{nil,nil,{"inheritance model does not match ",{Sb,"previous declaration"}}}},
		[h]=k,
		[i]="inheritance model does not match (?:definition|previous declaration)",
		[b]=a,
		[f]=m,
		[e]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords\n\nWe would previously allow inappropriate inheritance keywords to appear\non class declarations.  We would also allow inheritance keywords on\ntemplates which were not fully specialized; this was divergent from\nMSVC.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2585\n\nllvm-svn: 200423"},
		[j]={{T,4643,"bool Sema::checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, bool BestCase, MSInheritanceModel ExplicitModel) {\n  // ...\n  Diag(Range.getBegin(), diag::err_mismatched_ms_inheritance) << 0 /*definition*/;"},{T,8068,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    // ...\n    Diag(IA->getLocation(), diag::err_mismatched_ms_inheritance) << 1 /*previous declaration*/;"}},
		[l]={
			["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:243:8: error: inheritance model does not match definition","clang/test/SemaCXX/member-pointer-ms.cpp:245:8: error: inheritance model does not match definition","clang/test/SemaCXX/member-pointer-ms.cpp:300:8: error: inheritance model does not match previous declaration"}
		}
	},
	["err_mismatched_owning_module"]={
		[c]={{nil,r,"err_mismatched_owning_module"}},
		[d]={{nil,r,"declaration of %0 in %select{the global module|module %2}1 follows declaration in %select{the global module|module %4}3"}},
		[g]={{nil,r,{"declaration of A in ",{"the global module","module C"}," follows declaration in ",{"the global module","module E"}}}},
		[h]=k,
		[i]="declaration of (.*?) in (?:the global module|module (.*?)) follows declaration in (?:the global module|module (.*?))",
		[b]=a,
		[f]={{nil,r,m}},
		[e]={"b87720b77aee",1507592529,"[Modules TS] Module ownership semantics for redeclarations.","[Modules TS] Module ownership semantics for redeclarations.\n\nWhen declaring an entity in the \"purview\" of a module, it\'s never a\nredeclaration of an entity in the purview of a default module or in no module\n(\"in the global module\"). Don\'t consider those other declarations as possible\nredeclaration targets if they\'re not visible, and reject any cases where we\npick a prior visible declaration that violates this rule.\n\nllvm-svn: 315251"},
		[j]={{n,1686,"/// We\'ve determined that \\p New is a redeclaration of \\p Old. Check that they\n/// have compatible owning modules.\nbool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  if (NewIsModuleInterface || OldIsModuleInterface) {\n    // ...\n    Diag(New->getLocation(), diag::err_mismatched_owning_module) << New << NewIsModuleInterface << (NewIsModuleInterface ? NewM->getFullModuleName() : \"\") << OldIsModuleInterface << (OldIsModuleInterface ? OldM->getFullModuleName() : \"\");"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:34:5: error: declaration of \'a\' in module Foo follows declaration in the global module"}
		}
	},
	["err_mismatched_uuid"]={
		[c]="err_mismatched_uuid",
		[d]="uuid does not match previous declaration",
		[g]="uuid does not match previous declaration",
		[h]=k,
		[i]="uuid does not match previous declaration",
		[b]=a,
		[f]=m,
		[e]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids.","[clang-cl] Diagnose duplicate uuids.\n\nThis mostly behaves cl.exe\'s behavior, even though clang-cl is stricter in some\ncorner cases and more lenient in others (see the included test).\n\nTo make the uuid declared previously here diagnostic work correctly, tweak\nstripTypeAttributesOffDeclSpec() to keep attributes in the right order.\n\nhttps://reviews.llvm.org/D24469\n\nllvm-svn: 281367"},
		[j]={{T,6978,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    // ...\n    if (!UA->getGuid().empty()) {\n      Diag(UA->getLocation(), diag::err_mismatched_uuid);"}},
		[l]={
			["clang/test/SemaCXX/ms-uuid.cpp"]={"clang/test/SemaCXX/ms-uuid.cpp:41:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:43:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:49:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:60:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:62:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:66:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:71:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:83:18: error: uuid does not match previous declaration"}
		}
	},
	["err_mismatched_visibility"]={
		[c]="err_mismatched_visibility",
		[d]="visibility does not match previous declaration",
		[g]="visibility does not match previous declaration",
		[h]=k,
		[i]="visibility does not match previous declaration",
		[b]=a,
		[f]=m,
		[e]={"0232c19a3128",1336436919,"Add missing \'y\'.","Add missing \'y\'.\n\nllvm-svn: 156348"},
		[j]={{T,2874,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  // ...\n  if (existingAttr) {\n    // ...\n    S.Diag(existingAttr->getLocation(), diag::err_mismatched_visibility);"}},
		[l]={
			["clang/test/Sema/attr-visibility.c"]={"clang/test/Sema/attr-visibility.c:12:23: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:16:23: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:18:33: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:22:33: error: visibility does not match previous declaration"}
		}
	},
	["err_misplaced_ellipsis_in_declaration"]={
		[c]="err_misplaced_ellipsis_in_declaration",
		[d]="\'...\' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0",
		[g]={{nil,nil,{"\'...\' must ",{"immediately precede declared identifier","be innermost component of anonymous pack declaration"}}}},
		[h]=k,
		[i]="\'\\.\\.\\.\' must (?:immediately precede declared identifier|be innermost component of anonymous pack declaration)",
		[b]=a,
		[f]=D,
		[e]={"0efa75c3e38d",1332983802,"Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case","Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case\ndiagnostic and a fix-it to explain to the user where the ellipsis is\nsupposed to go.\n\nllvm-svn: 153622"},
		[j]={{"clang/lib/Parse/ParseTemplate.cpp",1082,"void Parser::DiagnoseMisplacedEllipsis(SourceLocation EllipsisLoc, SourceLocation CorrectLoc, bool AlreadyHasEllipsis, bool IdentifierHasName) {\n  // ...\n  Diag(EllipsisLoc, diag::err_misplaced_ellipsis_in_declaration) << FixItHint::CreateRemoval(EllipsisLoc) << Insertion << !IdentifierHasName;"}},
		[l]={
			["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:12:37: error: \'...\' must immediately precede declared identifier","clang/test/Parser/cxx11-templates.cpp:13:44: error: \'...\' must immediately precede declared identifier","clang/test/Parser/cxx11-templates.cpp:31:15: error: \'...\' must immediately precede declared identifier"}
		}
	},
	["err_misplaced_ivar"]={
		[c]="err_misplaced_ivar",
		[d]="instance variables may not be placed in %select{categories|class extension}0",
		[g]={{nil,nil,{"instance variables may not be placed in ",{"categories","class extension"}}}},
		[h]=k,
		[i]="instance variables may not be placed in (?:categories|class extension)",
		[b]=a,
		[f]=m,
		[e]={"4c172c63e510",1266879860,"Early support for declaring ivars in class extensions. wip.","Early support for declaring ivars in class extensions. wip.\n\nllvm-svn: 96819"},
		[j]={{n,18412,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (ObjCImplementationDecl *IMPDecl = dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {\n  // ...\n  } else {\n    if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {\n      if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {\n        Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();"}},
		[l]={
			["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:35:13: error: instance variables may not be placed in categories"}
		}
	},
	["err_missing_actual_pipe_type"]={
		[c]="err_missing_actual_pipe_type",
		[d]="missing actual type specifier for pipe",
		[g]="missing actual type specifier for pipe",
		[h]=k,
		[i]="missing actual type specifier for pipe",
		[b]=a,
		[f]=m,
		[e]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
		[j]={{lc,1378,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n    // ...\n    } else if (!DS.hasTypeSpecifier()) {\n      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:\n      // \"At least one type specifier shall be given in the declaration\n      // specifiers in each declaration, and in the specifier-qualifier list in\n      // each struct declaration and type name.\"\n      if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n      // ...\n      } else if (S.getLangOpts().getOpenCLCompatibleVersion() >= 200 && DS.isTypeSpecPipe()) {\n        S.Diag(DeclLoc, diag::err_missing_actual_pipe_type) << DS.getSourceRange();"}},
		[l]={
			["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:24:17: error: missing actual type specifier for pipe"}
		}
	},
	["err_missing_atsign_prefix"]={
		[c]="err_missing_atsign_prefix",
		[d]={{nil,C,"%select{string|numeric}0 literal must be prefixed by \'@\'"},{v,nil,"string literal must be prefixed by \'@\' "}},
		[g]={{nil,C,{{"string","numeric"}," literal must be prefixed by \'@\'"}},{v,nil,"string literal must be prefixed by \'@\' "}},
		[h]=k,
		[i]="(?:string|numeric) literal must be prefixed by \'@\'",
		[b]=a,
		[f]=m,
		[e]={"bd714e9bb120",1387308823,"Objective-C. Make diagnostics and fix-its consistent ","Objective-C. Make diagnostics and fix-its consistent \nwhen diagnosing casting of a cstring literal to\nNSString in default and -fobjc-arc mode. \n// rdar://14106083\n\nllvm-svn: 197515"},
		[j]={{S,17467,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if (auto *SL = dyn_cast<StringLiteral>(SrcExpr)) {\n    // ...\n    if (Diagnose) {\n      Diag(SL->getBeginLoc(), diag::err_missing_atsign_prefix) << /*string*/ 0 << FixItHint::CreateInsertion(SL->getBeginLoc(), \"@\");"},{S,17525,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if ((isa<IntegerLiteral>(SrcExpr) || isa<CharacterLiteral>(SrcExpr) || isa<FloatingLiteral>(SrcExpr) || isa<ObjCBoolLiteralExpr>(SrcExpr) || isa<CXXBoolLiteralExpr>(SrcExpr)) && !SrcExpr->isNullPointerConstant(getASTContext(), Expr::NPC_NeverValueDependent)) {\n    // ...\n    if (Diagnose) {\n      Diag(SrcExpr->getBeginLoc(), diag::err_missing_atsign_prefix) << /*number*/ 1 << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"@\");"}},
		[l]={
			["clang/test/SemaObjC/objc-literal-fixit.m"]={"clang/test/SemaObjC/objc-literal-fixit.m:17:17: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:18:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:23:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:29:18: error: numeric literal must be prefixed by \'@\'"}
		}
	},
	["err_missing_before_module_end"]={
		[c]="err_missing_before_module_end",
		[d]="expected %0 at end of module",
		[g]="expected A at end of module",
		[h]=k,
		[i]="expected (.*?) at end of module",
		[b]=a,
		[f]=H,
		[e]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
		[j]={{wb,2723,"bool BalancedDelimiterTracker::diagnoseMissingClose() {\n  // ...\n  if (P.Tok.is(tok::annot_module_end))\n    P.Diag(P.Tok, diag::err_missing_before_module_end) << Close;"}},
		[l]={
			["clang/test/Modules/extern_cxx.cpp"]={"clang/test/Modules/extern_cxx.cpp:22:24: error: expected \'}\' at end of module"}
		}
	},
	["err_missing_catch_finally"]={
		[c]="err_missing_catch_finally",
		[d]="@try statement without a @catch and @finally clause",
		[g]="@try statement without a @catch and @finally clause",
		[h]=k,
		[i]="@try statement without a @catch and @finally clause",
		[b]=a,
		[f]=D,
		[e]={U,1236199783,V,X},
		[j]={{"clang/lib/Parse/ParseObjc.cpp",2672,"///  objc-try-catch-statement:\n///    @try compound-statement objc-catch-list[opt]\n///    @try compound-statement objc-catch-list[opt] @finally compound-statement\n///\n///  objc-catch-list:\n///    @catch ( parameter-declaration ) compound-statement\n///    objc-catch-list @catch ( catch-parameter-declaration ) compound-statement\n///  catch-parameter-declaration:\n///     parameter-declaration\n///     \'...\' [OBJC2]\n///\nStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {\n  // ...\n  if (!catch_or_finally_seen) {\n    Diag(atLoc, diag::err_missing_catch_finally);"}},
		[l]={
			["clang/test/Parser/objc-try-catch-1.m"]={"clang/test/Parser/objc-try-catch-1.m:41:3: error: @try statement without a @catch and @finally clause","clang/test/Parser/objc-try-catch-1.m:49:3: error: @try statement without a @catch and @finally clause","clang/test/Parser/objc-try-catch-1.m:55:3: error: @try statement without a @catch and @finally clause"}
		}
	},
	["err_missing_comma_before_ellipsis"]={
		[c]="err_missing_comma_before_ellipsis",
		[d]="C requires a comma prior to the ellipsis in a variadic function type",
		[g]="C requires a comma prior to the ellipsis in a variadic function type",
		[h]=k,
		[i]="C requires a comma prior to the ellipsis in a variadic function type",
		[b]=a,
		[f]=D,
		[e]={"9bfc2e50a786",1253655700,"In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++...","In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++, but diagnose it as an error in C with a fix-it hint to add the comma.\n\nllvm-svn: 82576"},
		[j]={{bb,7499,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///       parameter-type-list: [C99 6.7.5]\n///         parameter-list\n///         parameter-list \',\' \'...\'\n/// [C++]   parameter-list \'...\'\n///\n///       parameter-list: [C99 6.7.5]\n///         parameter-declaration\n///         parameter-list \',\' parameter-declaration\n///\n///       parameter-declaration: [C99 6.7.5]\n///         declaration-specifiers declarator\n/// [C++]   declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                       initializer-clause\n/// [GNU]   declaration-specifiers declarator attributes\n///         declaration-specifiers abstract-declarator[opt]\n/// [C++]   declaration-specifiers abstract-declarator[opt]\n///           \'=\' assignment-expression\n/// [GNU]   declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n        // ...\n        Diag(EllipsisLoc, diag::err_missing_comma_before_ellipsis) << FixItHint::CreateInsertion(EllipsisLoc, \", \");"}},
		[l]={
			["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:53:15: error: C requires a comma prior to the ellipsis in a variadic function type"}
		}
	},
	["err_missing_default_ctor"]={
		[c]="err_missing_default_ctor",
		[d]="%select{constructor for %1 must explicitly initialize the|implicit default constructor for %1 must explicitly initialize the|cannot use constructor inherited from base class %4;}0 %select{base class|member}2 %3 %select{which|which|of %1}0 does not have a default constructor",
		[g]={{nil,nil,{{"constructor for B must explicitly initialize the","implicit default constructor for B must explicitly initialize the","cannot use constructor inherited from base class E;"}," ",{"base class","member"}," D ",{"which","which","of B"}," does not have a default constructor"}}},
		[h]=k,
		[i]="(?:constructor for (.*?) must explicitly initialize the|implicit default constructor for (.*?) must explicitly initialize the|cannot use constructor inherited from base class (.*?);) (?:base class|member) (.*?) (?:which|which|of (.*?)) does not have a default constructor",
		[b]=a,
		[f]=m,
		[e]={"d7686ef31c21",1257728747,"Unify the codepaths used to verify base and member initializers for explicitly","Unify the codepaths used to verify base and member initializers for explicitly\nand implicitly defined constructors.  This has a number of benefits:\n\n1. Less code.\n\n2. Explicit and implicit constructors get the same diagnostics.\n\n3. The AST explicitly contains constructor calls from implicit default\nconstructors.  This allows handing some cases that previously weren\'t handled\ncorrectly in IRGen without any additional code. Specifically, implicit default\nconstructors containing calls to constructors with default arguments are now\nhandled correctly.\n\nllvm-svn: 86500"},
		[j]={{"clang/lib/Sema/SemaInit.cpp",9878,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        // ...\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n          S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*base=*/0 << Entity.getType() << InheritedFrom;"},{"clang/lib/Sema/SemaInit.cpp",9891,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        // ...\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        // ...\n        } else {\n          S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*member=*/1 << Entity.getName() << InheritedFrom;"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:39:3: error: constructor for \'S\' must explicitly initialize the member \'e1\' which does not have a default constructor"}
		}
	},
	["err_missing_dependent_template_keyword"]={
		[c]="err_missing_dependent_template_keyword",
		[d]="use \'template\' keyword to treat \'%0\' as a dependent template name",
		[g]="use \'template\' keyword to treat \'A\' as a dependent template name",
		[h]=k,
		[i]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name",
		[b]=a,
		[f]=D,
		[e]={"786123dc48d8",1274483887,"Improve parser recovery when we encounter a dependent template name","Improve parser recovery when we encounter a dependent template name\nthat is missing the \'template\' keyword, e.g., \n\n  t->getAs<T>()\n\nwhere getAs is a member of an unknown specialization. C++ requires\nthat we treat \"getAs\" as a value, but that would fail to parse since T\nis the name of a type. We would then fail at the \'>\', since a type\ncannot be followed by a \'>\'.\n\nThis is a very common error for C++ programmers to make, especially\nsince GCC occasionally allows it when it shouldn\'t (as does Visual\nC++). So, when we are in this case, we use tentative parsing to see if\nthe tokens starting at \"<\" can only be parsed as a template argument\nlist. If so, we produce a diagnostic with a fix-it that states that\nthe \'template\' keyword is needed:\n\ntest/SemaTemplate/dependent-template-recover.cpp:5:8: error: \'template\' keyword\n      is required to treat \'getAs\' as a dependent template name\n    t->getAs<T>();\n       ^\n       template \n\nThis is just a start of this patch; I\'d like to apply the same\napproach to everywhere that a template-id with dependent template name\ncan be parsed.\n\nllvm-svn: 104406"},
		[j]={{"clang/lib/Parse/ParseExprCXX.cpp",525,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///       \'::\'[opt] nested-name-specifier\n///       \'::\'\n///\n///       nested-name-specifier:\n///         type-name \'::\'\n///         namespace-name \'::\'\n///         nested-name-specifier identifier \'::\'\n///         nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // nested-name-specifier:\n    //   type-name \'<\'\n    if (Next.is(tok::less)) {\n      // ...\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          unsigned DiagID = diag::err_missing_dependent_template_keyword;"},{"clang/lib/Parse/ParseExprCXX.cpp",2483,"/// Finish parsing a C++ unqualified-id that is a template-id of\n/// some form.\n///\n/// This routine is invoked when a \'<\' is encountered after an identifier or\n/// operator-function-id is parsed by \\c ParseUnqualifiedId() to determine\n/// whether the unqualified-id is actually a template-id. This routine will\n/// then parse the template arguments and form the appropriate template-id to\n/// return to the caller.\n///\n/// \\param SS the nested-name-specifier that precedes this template-id, if\n/// we\'re actually parsing a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n///\n/// \\param Name for constructor and destructor names, this is the actual\n/// identifier that may be a template-name.\n///\n/// \\param NameLoc the location of the class-name in a constructor or\n/// destructor.\n///\n/// \\param EnteringContext whether we\'re entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param Id as input, describes the template-name or operator-function-id\n/// that precedes the \'<\'. If template arguments were parsed successfully,\n/// will be updated with the template-id.\n///\n/// \\param AssumeTemplateId When true, this routine will assume that the name\n/// refers to a template without performing name lookup to verify.\n///\n/// \\returns true if a parse error occurred, false otherwise.\nbool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, SourceLocation TemplateKWLoc, IdentifierInfo *Name, SourceLocation NameLoc, bool EnteringContext, UnqualifiedId &Id, bool AssumeTemplateId) {\n  // ...\n  case UnqualifiedIdKind::IK_Identifier:\n  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n    if (AssumeTemplateId) {\n    // ...\n    } else {\n      // ...\n      if (TNK == TNK_Non_template && MemberOfUnknownSpecialization && ObjectType && isTemplateArgumentList(0) == TPResult::True) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates, do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          Diag(Id.StartLocation, diag::err_missing_dependent_template_keyword) << Name << FixItHint::CreateInsertion(Id.StartLocation, \"template \");"}},
		[l]={
			["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:80:45: error: use \'template\' keyword to treat \'temp\' as a dependent template name"}
		}
	},
	["err_missing_end_of_definition"]={
		[c]="err_missing_end_of_definition",
		[d]="missing \'}\' at end of definition of %q0",
		[g]="missing \'}\' at end of definition of A",
		[h]=k,
		[i]="missing \'\\}\' at end of definition of (.*?)",
		[b]=a,
		[f]=D,
		[e]={"da35e963bc57",1383972771,"Try to recover a bit better if a close brace is missing from the end of a class","Try to recover a bit better if a close brace is missing from the end of a class\ndefinition. If we see something that looks like a namespace definition inside a\nclass, that strongly indicates that a close brace was missing somewhere.\n\nllvm-svn: 194319"},
		[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3690,"void Parser::DiagnoseUnexpectedNamespace(NamedDecl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_missing_end_of_definition) << D;"}},
		[l]={
			["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:39:10: error: missing \'}\' at end of definition of \'MissingBrace::S\'","clang/test/Parser/recovery.cpp:48:31: error: missing \'}\' at end of definition of \'MissingBrace::PR17949\'"}
		}
	},
	["err_missing_exception_specification"]={
		[c]="err_missing_exception_specification",
		[d]="%0 is missing exception specification \'%1\'",
		[g]="A is missing exception specification \'B\'",
		[h]=k,
		[i]="(.*?) is missing exception specification \'(.*?)\'",
		[b]=a,
		[f]=m,
		[e]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception","Promote a warning on ill-formed code (redeclaration missing an exception\nspecification) to an error. No compiler other than Clang seems to allow this,\nand it doesn\'t seem like a useful thing to accept as an extension in general.\n\nThe current behavior was added for PR5957, where the problem was specifically\nrelated to mismatches of the exception specification on the implicitly-declared\nglobal operator new and delete. To retain that workaround, we downgrade the\nerror to an ExtWarn when the declaration is of a replaceable global allocation\nfunction.\n\nNow that this is an error, stop trying (and failing) to recover from a missing\ncomputed noexcept specification. That recovery didn\'t work, and led to crashes\nin code like the added testcase.\n\nllvm-svn: 248867"},
		[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",419,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n  // ...\n  } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n  // ...\n  } else if (ESI.Type == EST_NoThrow) {\n  // ...\n  } else {\n    DiagID = diag::err_missing_exception_specification;"}},
		[l]={
			["clang/test/CXX/except/except.spec/p3.cpp"]={"clang/test/CXX/except/except.spec/p3.cpp:29:13: error: \'f5\' is missing exception specification \'throw(int)\'","clang/test/CXX/except/except.spec/p3.cpp:116:23: error: \'missing\' is missing exception specification \'noexcept(X)\'"}
		}
	},
	["err_missing_method_context"]={
		[c]="err_missing_method_context",
		[d]="missing context for method declaration",
		[g]="missing context for method declaration",
		[h]=k,
		[i]="missing context for method declaration",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{"clang/lib/Sema/SemaDeclObjC.cpp",4734,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  // Make sure we can establish a context for the method.\n  if (!CurContext->isObjCContainer()) {\n    Diag(MethodLoc, diag::err_missing_method_context);"}},
		[l]={
			["clang/test/SemaObjC/method-no-context.m"]={"clang/test/SemaObjC/method-no-context.m:3:1: error: missing context for method declaration"}
		}
	},
	["err_missing_module"]={
		[c]="err_missing_module",
		[d]="no module named \'%0\' declared in module map file \'%1\'",
		[g]="no module named \'A\' declared in module map file \'B\'",
		[h]=M,
		[i]="no module named \'(.*?)\' declared in module map file \'(.*?)\'",
		[b]=a,
		[f]=w,
		[e]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
		[j]={{xb,502,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!M) {\n    CI.getDiagnostics().Report(diag::err_missing_module) << CI.getLangOpts().CurrentModule << ModuleMapFilename;"}},
		[l]={
			["clang/test/Modules/preprocess-build.cpp"]={"fatal error: no module named \'unterminated\' declared in module map file \'unterminated.map\'"}
		}
	},
	["err_missing_module_name"]={
		[c]="err_missing_module_name",
		[d]="no module name provided; specify one with -fmodule-name=",
		[g]="no module name provided; specify one with -fmodule-name=",
		[h]=M,
		[i]="no module name provided; specify one with \\-fmodule\\-name\\=",
		[b]=a,
		[f]=w,
		[e]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
		[j]={{xb,488,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  if (CI.getLangOpts().CurrentModule.empty()) {\n    CI.getDiagnostics().Report(diag::err_missing_module_name);"}}
	},
	["err_missing_open_square_message_send"]={
		[c]="err_missing_open_square_message_send",
		[d]="missing \'[\' at start of message send expression",
		[g]="missing \'[\' at start of message send expression",
		[h]=k,
		[i]="missing \'\\[\' at start of message send expression",
		[b]=a,
		[f]=m,
		[e]={"e9bba4f1a441",1284562265,"Implement bracket insertion for Objective-C instance message sends as","Implement bracket insertion for Objective-C instance message sends as\npart of parser recovery. For example, given:\n\n  a method1:arg];\n\nwe detect after parsing the expression \"a\" that we have the start of a\nmessage send expression. We pretend we\'ve seen a \'[\' prior to the a,\nthen parse the remainder as a message send. We\'ll then give a\ndiagnostic+fix-it such as:\n\nfixit-objc-message.m:17:3: error: missing \'[\' at start of message\n      send expression\n  a method1:arg];\n  ^\n  [\n\nThe algorithm here is very simple, and always assumes that the open\nbracket goes at the beginning of the message send. It also only works\nfor non-super instance message sends at this time.\n\nllvm-svn: 113968"},
		[j]={{mb,2621,"/// \\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  if (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"},{mb,2865,"/// 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 (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"}},
		[l]={
			["clang/test/Parser/stmt-attributes.m"]={"clang/test/Parser/stmt-attributes.m:26:22: error: missing \'[\' at start of message send expression"}
		}
	},
	["err_missing_param"]={
		[c]="err_missing_param",
		[d]="expected parameter declarator",
		[g]="expected parameter declarator",
		[h]=k,
		[i]="expected parameter declarator",
		[b]=a,
		[f]=D,
		[e]={U,1236199783,V,X},
		[j]={{bb,7393,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///       parameter-type-list: [C99 6.7.5]\n///         parameter-list\n///         parameter-list \',\' \'...\'\n/// [C++]   parameter-list \'...\'\n///\n///       parameter-list: [C99 6.7.5]\n///         parameter-declaration\n///         parameter-list \',\' parameter-declaration\n///\n///       parameter-declaration: [C99 6.7.5]\n///         declaration-specifiers declarator\n/// [C++]   declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                       initializer-clause\n/// [GNU]   declaration-specifiers declarator attributes\n///         declaration-specifiers abstract-declarator[opt]\n/// [C++]   declaration-specifiers abstract-declarator[opt]\n///           \'=\' assignment-expression\n/// [GNU]   declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n      // ...\n      Diag(DSStart, diag::err_missing_param);"}},
		[l]={
			["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:32:28: error: expected parameter declarator","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:44:22: error: expected parameter declarator"}
		}
	},
	["err_missing_property_context"]={
		[c]="err_missing_property_context",
		[d]="missing context for property implementation declaration",
		[g]="missing context for property implementation declaration",
		[h]=k,
		[i]="missing context for property implementation declaration",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{"clang/lib/Sema/SemaObjCProperty.cpp",1090,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Make sure we have a context for the property implementation declaration.\n  if (!ClassImpDecl) {\n    Diag(AtLoc, diag::err_missing_property_context);"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:66:1: error: missing context for property implementation declaration"}
		}
	},
	["err_missing_property_interface"]={
		[c]="err_missing_property_interface",
		[d]="property implementation in a category with no category declaration",
		[g]="property implementation in a category with no category declaration",
		[h]=k,
		[i]="property implementation in a category with no category declaration",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{"clang/lib/Sema/SemaObjCProperty.cpp",1181,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  // ...\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    // ...\n    if (!IDecl) {\n      Diag(AtLoc, diag::err_missing_property_interface);"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:35:1: error: property implementation in a category with no category declaration"}
		}
	},
	["err_missing_property_ivar_decl"]={
		[c]="err_missing_property_ivar_decl",
		[d]="synthesized property %0 must either be named the same as a compatible instance variable or must explicitly name an instance variable",
		[g]="synthesized property A must either be named the same as a compatible instance variable or must explicitly name an instance variable",
		[h]=k,
		[i]="synthesized property (.*?) must either be named the same as a compatible instance variable or must explicitly name an instance variable",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{"clang/lib/Sema/SemaObjCProperty.cpp",1346,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    if (!Ivar) {\n      // ...\n      if (getLangOpts().ObjCRuntime.isFragile())\n        Diag(PropertyDiagLoc, diag::err_missing_property_ivar_decl) << PropertyId;"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:18:13: error: synthesized property \'d1\' must either be named the same as a compatible instance variable or must explicitly name an instance variable","clang/test/SemaObjC/property.m:20:13: error: synthesized property \'prop_id\' must either be named the same as a compatible instance variable or must explicitly name an instance variable"}
		}
	},
	["err_missing_type_specifier"]={
		[c]="err_missing_type_specifier",
		[d]={{nil,q,"a type specifier is required for all declarations"},{K,nil,"C++ requires a type specifier for all declarations"}},
		[g]={{nil,q,"a type specifier is required for all declarations"},{K,nil,"C++ requires a type specifier for all declarations"}},
		[h]=k,
		[i]="a type specifier is required for all declarations",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{lc,1369,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_unspecified:\n    // ...\n    // Unspecified typespec defaults to int in C90.  However, the C90 grammar\n    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.\n    // Note that the one exception to this is function definitions, which are\n    // allowed to be completely missing a declspec.  This is handled in the\n    // parser already though by it pretending to have seen an \'int\' in this\n    // case.\n    if (S.getLangOpts().isImplicitIntRequired()) {\n    // ...\n    } else if (!DS.hasTypeSpecifier()) {\n      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:\n      // \"At least one type specifier shall be given in the declaration\n      // specifiers in each declaration, and in the specifier-qualifier list in\n      // each struct declaration and type name.\"\n      if (!S.getLangOpts().isImplicitIntAllowed() && !DS.isTypeSpecPipe()) {\n        S.Diag(DeclLoc, diag::err_missing_type_specifier) << DS.getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/implicit-int.cpp"]={"clang/test/SemaCXX/implicit-int.cpp:3:1: error: a type specifier is required for all declarations","clang/test/SemaCXX/implicit-int.cpp:5:1: error: a type specifier is required for all declarations"}
		}
	},
	["err_missing_vfs_overlay_file"]={
		[c]="err_missing_vfs_overlay_file",
		[d]="virtual filesystem overlay file \'%0\' not found",
		[g]="virtual filesystem overlay file \'A\' not found",
		[h]=M,
		[i]="virtual filesystem overlay file \'(.*?)\' not found",
		[b]=a,
		[f]=w,
		[e]={"801272a98c71",1393352627,"Add a driver option -ivfsoverlay","Add a driver option -ivfsoverlay\n\nReads the description of a virtual filesystem from a file and overlays\nit over the real file system.\n\nllvm-svn: 202176"},
		[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4691,"IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromOverlayFiles(ArrayRef<std::string> VFSOverlayFiles, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS) {\n  // ...\n  // earlier vfs files are on the bottom\n  for (const auto &File : VFSOverlayFiles) {\n    // ...\n    if (!Buffer) {\n      Diags.Report(diag::err_missing_vfs_overlay_file) << File;"}}
	},
	["err_missing_whitespace_digraph"]={
		[c]="err_missing_whitespace_digraph",
		[d]={{nil,C,"found \'<::\' after a %select{template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"},{v,nil,"found \'<::\' after a %select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},
		[g]={{nil,C,{"found \'<::\' after a ",{"template name","addrspace_cast","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},{v,nil,{"found \'<::\' after a ",{"template name","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}}},
		[h]=k,
		[i]="found \'\\<\\:\\:\' after a (?:template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast) which forms the digraph \'\\<\\:\' \\(aka \'\\[\'\\) and a \'\\:\', did you mean \'\\< \\:\\:\'\\?",
		[b]=a,
		[f]=D,
		[e]={"55858499e21e",1302817545,"Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[...","Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[:\" because of the digraph \"<:\". When found, give an error with a fix-it to add whitespace between the \"<\" and \"::\".\n\nPatch by Richard Trieu! Plus a small tweak from me to deal with one of the tokens coming from a macro.\n\nllvm-svn: 129540"},
		[j]={{"clang/lib/Parse/ParseExprCXX.cpp",67,"// Suggest fixit for \"<::\" after a cast.\nstatic void FixDigraph(Parser &P, Preprocessor &PP, Token &DigraphToken, Token &ColonToken, tok::TokenKind Kind, bool AtDigraph) {\n  // ...\n  P.Diag(DigraphToken.getLocation(), diag::err_missing_whitespace_digraph) << SelectDigraphErrorMessage(Kind) << FixItHint::CreateReplacement(Range, \"< ::\");"}},
		[l]={
			["clang/test/Parser/cxx-casting.cpp"]={"clang/test/Parser/cxx-casting.cpp:46:19: error: found \'<::\' after a const_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:51:21: error: found \'<::\' after a dynamic_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:56:25: error: found \'<::\' after a reinterpret_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:61:20: error: found \'<::\' after a static_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:84:12: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:89:21: error: found \'<::\' after a static_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:101:6: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:106:4: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:111:6: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:116:4: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}
		}
	},
	["err_mixing_cxx_try_seh_try"]={
		[c]="err_mixing_cxx_try_seh_try",
		[d]={{nil,K,"cannot use %select{C++ \'try\'|Objective-C \'@try\'}0 in the same function as SEH \'__try\'"},{t,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
		[g]={{nil,K,{"cannot use ",{"C++ \'try\'","Objective-C \'@try\'"}," in the same function as SEH \'__try\'"}},{t,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
		[h]=k,
		[i]="cannot use (?:C\\+\\+ \'try\'|Objective\\-C \'@try\') in the same function as SEH \'__try\'",
		[b]=a,
		[f]=m,
		[e]={"e71759103e72",1422915331,"SEH: Diagnose use of C++ EH and SEH in the same function","SEH: Diagnose use of C++ EH and SEH in the same function\n\nThis check does not apply when Borland extensions are enabled, as they\nhave a checked in test case indicating that mixed usage of SEH and C++\nis supported.\n\nllvm-svn: 227876"},
		[j]={{G,4244,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  // ...\n  if (FSI->FirstSEHTryLoc.isValid()) {\n    Diag(AtLoc, diag::err_mixing_cxx_try_seh_try) << 1;"},{G,4494,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  // C++ try is incompatible with SEH __try.\n  if (!getLangOpts().Borland && FSI->FirstSEHTryLoc.isValid()) {\n    Diag(TryLoc, diag::err_mixing_cxx_try_seh_try) << 0;"},{G,4587,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\n  // SEH __try is incompatible with C++ try. Borland appears to support this,\n  // however.\n  if (!getLangOpts().Borland) {\n    if (FSI->FirstCXXOrObjCTryLoc.isValid()) {\n      Diag(TryLoc, diag::err_mixing_cxx_try_seh_try) << FSI->FirstTryType;"}},
		[l]={
			["clang/test/SemaCXX/exceptions-seh.mm"]={"clang/test/SemaCXX/exceptions-seh.mm:10:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'","clang/test/SemaCXX/exceptions-seh.mm:21:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'"}
		}
	},
	["err_mmap_config_macro_submodule"]={
		[c]="err_mmap_config_macro_submodule",
		[d]="configuration macros are only allowed in top-level modules",
		[g]="configuration macros are only allowed in top-level modules",
		[h]=k,
		[i]="configuration macros are only allowed in top\\-level modules",
		[b]=a,
		[f]=y,
		[e]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
		[j]={{u,2712,"/// Parse a configuration macro declaration.\n///\n///   module-declaration:\n///     \'config_macros\' attributes[opt] config-macro-list?\n///\n///   config-macro-list:\n///     identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  // Only top-level modules can have configuration macros.\n  if (ActiveModule->Parent) {\n    Diags.Report(ConfigMacrosLoc, diag::err_mmap_config_macro_submodule);"}}
	},
	["err_mmap_conflicting_export_as"]={
		[c]={{nil,r,"err_mmap_conflicting_export_as"}},
		[d]={{nil,r,"conflicting re-export of module \'%0\' as \'%1\' or \'%2\'"}},
		[g]={{nil,r,"conflicting re-export of module \'A\' as \'B\' or \'C\'"}},
		[h]=k,
		[i]="conflicting re\\-export of module \'(.*?)\' as \'(.*?)\' or \'(.*?)\'",
		[b]=a,
		[f]={{nil,r,y}},
		[e]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
		[j]={{u,2641,"/// Parse a module export_as declaration.\n///\n///   export-as-declaration:\n///     \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!ActiveModule->ExportAsModule.empty()) {\n    if (ActiveModule->ExportAsModule == Tok.getString()) {\n    // ...\n    } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_conflicting_export_as) << ActiveModule->Name << ActiveModule->ExportAsModule << Tok.getString();"}}
	},
	["err_mmap_duplicate_header_attribute"]={
		[c]={{nil,s,"err_mmap_duplicate_header_attribute"}},
		[d]={{nil,s,"header attribute \'%0\' specified multiple times"}},
		[g]={{nil,s,"header attribute \'A\' specified multiple times"}},
		[h]=k,
		[i]="header attribute \'(.*?)\' specified multiple times",
		[b]=a,
		[f]={{nil,s,y}},
		[e]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
		[j]={{u,2436,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        if (Header.Size)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"},{u,2449,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        if (Header.ModTime)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"}}
	},
	["err_mmap_expected_attribute"]={
		[c]="err_mmap_expected_attribute",
		[d]="expected an attribute name",
		[g]="expected an attribute name",
		[h]=k,
		[i]="expected an attribute name",
		[b]=a,
		[f]=y,
		[e]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
		[j]={{u,2980,"/// Parse optional attributes.\n///\n///   attributes:\n///     attribute attributes\n///     attribute\n///\n///   attribute:\n///     [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Check whether we have an attribute name here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_attribute);"}}
	},
	["err_mmap_expected_config_macro"]={
		[c]="err_mmap_expected_config_macro",
		[d]="expected configuration macro name after \',\'",
		[g]="expected configuration macro name after \',\'",
		[h]=k,
		[i]="expected configuration macro name after \',\'",
		[b]=a,
		[f]=y,
		[e]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
		[j]={{u,2744,"/// Parse a configuration macro declaration.\n///\n///   module-declaration:\n///     \'config_macros\' attributes[opt] config-macro-list?\n///\n///   config-macro-list:\n///     identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  do {\n    // ...\n    // We expect to see a macro name here.\n    // FIXME: Support macros with the same name as a keyword here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_config_macro);"}}
	},
	["err_mmap_expected_conflicts_comma"]={
		[c]="err_mmap_expected_conflicts_comma",
		[d]="expected \',\' after conflicting module name",
		[g]="expected \',\' after conflicting module name",
		[h]=k,
		[i]="expected \',\' after conflicting module name",
		[b]=a,
		[f]=y,
		[e]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
		[j]={{u,2787,"/// Parse a conflict declaration.\n///\n///   module-declaration:\n///     \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the \',\'.\n  if (!Tok.is(MMToken::Comma)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_comma) << SourceRange(ConflictLoc);"}}
	},
	["err_mmap_expected_conflicts_message"]={
		[c]="err_mmap_expected_conflicts_message",
		[d]="expected a message describing the conflict with \'%0\'",
		[g]="expected a message describing the conflict with \'A\'",
		[h]=k,
		[i]="expected a message describing the conflict with \'(.*?)\'",
		[b]=a,
		[f]=y,
		[e]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
		[j]={{u,2795,"/// Parse a conflict declaration.\n///\n///   module-declaration:\n///     \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the message.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_message) << formatModuleId(Conflict.Id);"}}
	},
	["err_mmap_expected_export_wildcard"]={
		[c]="err_mmap_expected_export_wildcard",
		[d]="only \'*\' can be exported from an inferred submodule",
		[g]="only \'*\' can be exported from an inferred submodule",
		[h]=k,
		[i]="only \'\\*\' can be exported from an inferred submodule",
		[b]=a,
		[f]=y,
		[e]={mc,1323124064,kc,cc},
		[j]={{u,2933,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      // ...\n      if (Tok.is(MMToken::Star))\n      // ...\n      else\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_export_wildcard);"}}
	},
	["err_mmap_expected_feature"]={
		[c]="err_mmap_expected_feature",
		[d]="expected a feature name",
		[g]="expected a feature name",
		[h]=k,
		[i]="expected a feature name",
		[b]=a,
		[f]=y,
		[e]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
		[j]={{u,2325,"/// Parse a requires declaration.\n///\n///   requires-declaration:\n///     \'requires\' feature-list\n///\n///   feature-list:\n///     feature \',\' feature-list\n///     feature\n///\n///   feature:\n///     \'!\'[opt] identifier\nvoid ModuleMapParser::parseRequiresDecl() {\n  // ...\n  // Parse the feature-list.\n  do {\n    // ...\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_feature);"}}
	},
	["err_mmap_expected_header"]={
		[c]="err_mmap_expected_header",
		[d]="expected a header name after \'%0\'",
		[g]="expected a header name after \'A\'",
		[h]=k,
		[i]="expected a header name after \'(.*?)\'",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,2391,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  if (LeadingToken != MMToken::HeaderKeyword) {\n    if (!Tok.is(MMToken::HeaderKeyword)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << (LeadingToken == MMToken::PrivateKeyword ? \"private\" : LeadingToken == MMToken::ExcludeKeyword ? \"exclude\" : LeadingToken == MMToken::TextualKeyword ? \"textual\" : \"umbrella\");"},{u,2402,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // Parse the header name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"header\";"},{u,2497,"/// Parse an umbrella directory declaration.\n///\n///   umbrella-dir-declaration:\n///     umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // Parse the directory name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"umbrella\";"}}
	},
	["err_mmap_expected_header_attribute"]={
		[c]={{nil,s,"err_mmap_expected_header_attribute"}},
		[d]={{nil,s,"expected a header attribute name (\'size\' or \'mtime\')"}},
		[g]={{nil,s,"expected a header attribute name (\'size\' or \'mtime\')"}},
		[h]=k,
		[i]="expected a header attribute name \\(\'size\' or \'mtime\'\\)",
		[b]=a,
		[f]={{nil,s,y}},
		[e]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
		[j]={{u,2461,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Unknown:\n        Diags.Report(Loc, diag::err_mmap_expected_header_attribute);"}}
	},
	["err_mmap_expected_inferred_member"]={
		[c]="err_mmap_expected_inferred_member",
		[d]="expected %select{module exclusion with \'exclude\'|\'export *\'}0",
		[g]={{nil,nil,{"expected ",{"module exclusion with \'exclude\'","\'export *\'"}}}},
		[h]=k,
		[i]="expected (?:module exclusion with \'exclude\'|\'export \\*\')",
		[b]=a,
		[f]=y,
		[e]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
		[j]={{u,2902,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      if (ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{u,2922,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      if (!ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{u,2943,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExplicitKeyword:\n    case MMToken::ModuleKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::PrivateKeyword:\n    case MMToken::UmbrellaKeyword:\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"}}
	},
	["err_mmap_expected_lbrace"]={
		[c]="err_mmap_expected_lbrace",
		[d]="expected \'{\' to start module \'%0\'",
		[g]="expected \'{\' to start module \'A\'",
		[h]=k,
		[i]="expected \'\\{\' to start module \'(.*?)\'",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,2009,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace) << ModuleName;"}}
	},
	["err_mmap_expected_lbrace_wildcard"]={
		[c]="err_mmap_expected_lbrace_wildcard",
		[d]="expected \'{\' to start inferred submodule",
		[g]="expected \'{\' to start inferred submodule",
		[h]=k,
		[i]="expected \'\\{\' to start inferred submodule",
		[b]=a,
		[f]=y,
		[e]={mc,1323124064,kc,cc},
		[j]={{u,2885,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace_wildcard);"}}
	},
	["err_mmap_expected_library_name"]={
		[c]="err_mmap_expected_library_name",
		[d]="expected %select{library|framework}0 name as a string",
		[g]={{nil,nil,{"expected ",{"library","framework"}," name as a string"}}},
		[h]=k,
		[i]="expected (?:library|framework) name as a string",
		[b]=a,
		[f]=y,
		[e]={"6ddfca91e04e",1358184060,"Implement parsing, AST, (de-)serialization, and placeholder global","Implement parsing, AST, (de-)serialization, and placeholder global\nmetadata for linking against the libraries/frameworks for imported\nmodules.\n\nThe module map language is extended with a new \"link\" directive that\nspecifies what library or framework to link against when a module is\nimported, e.g.,\n\n  link \"clangAST\"\n\nor\n\n  link framework \"MyFramework\"\n\nImporting the corresponding module (or any of its submodules) will\neventually link against the named library/framework.\n\nFor now, I\'ve added some placeholder global metadata that encodes the\nimported libraries/frameworks, so that we can test that this\ninformation gets through to the IR. The format of the data is still\nunder discussion.\n\nllvm-svn: 172437"},
		[j]={{u,2687,"/// Parse a link declaration.\n///\n///   module-declaration:\n///     \'link\' \'framework\'[opt] string-literal\nvoid ModuleMapParser::parseLinkDecl() {\n  // ...\n  // Parse the library name\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_library_name) << IsFramework << SourceRange(LinkLoc);"}}
	},
	["err_mmap_expected_member"]={
		[c]="err_mmap_expected_member",
		[d]="expected umbrella, header, submodule, or module export",
		[g]="expected umbrella, header, submodule, or module export",
		[h]=k,
		[i]="expected umbrella, header, submodule, or module export",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,2188,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  do {\n    // ...\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_member);"}}
	},
	["err_mmap_expected_mmap_file"]={
		[c]="err_mmap_expected_mmap_file",
		[d]="expected a module map file name",
		[g]="expected a module map file name",
		[h]=k,
		[i]="expected a module map file name",
		[b]=a,
		[f]=y,
		[e]={"97292843d0aa",1378884044,"Support for modular module-map-files","Support for modular module-map-files\n\nThis patch is the first step to make module-map-files modular (instead\nof requiring a single \"module.map\"-file per include directory). This\nstep adds a new \"extern module\" declaration that enables\nmodule-map-files to reference one another along with a very basic\nimplementation.\n\nThe next steps are:\n\n* Combine this with the use-declaration (from\n  http://llvm-reviews.chandlerc.com/D1546) in order to only load module\n  map files required for a specific compilation.\n* Add an additional flag to start with a specific module-map-file (instead\n  of requiring there to be at least one \"module.map\").\n\nReview: http://llvm-reviews.chandlerc.com/D1637\nllvm-svn: 190497"},
		[j]={{u,2247,"/// Parse an extern module declaration.\n///\n///   extern module-declaration:\n///     \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse the referenced module map file name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_mmap_file);"}}
	},
	["err_mmap_expected_module"]={
		[c]="err_mmap_expected_module",
		[d]="expected module declaration",
		[g]="expected module declaration",
		[h]=k,
		[i]="expected module declaration",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,1933,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{u,2231,"/// Parse an extern module declaration.\n///\n///   extern module-declaration:\n///     \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{u,3074,"/// Parse a module map file.\n///\n///   module-map-file:\n///     module-declaration*\nbool ModuleMapParser::parseModuleMapFile() {\n  do {\n    // ...\n    case MMToken::Comma:\n    case MMToken::ConfigMacros:\n    case MMToken::Conflict:\n    case MMToken::Exclaim:\n    case MMToken::ExcludeKeyword:\n    case MMToken::ExportKeyword:\n    case MMToken::ExportAsKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::Identifier:\n    case MMToken::LBrace:\n    case MMToken::LinkKeyword:\n    case MMToken::LSquare:\n    case MMToken::Period:\n    case MMToken::PrivateKeyword:\n    case MMToken::RBrace:\n    case MMToken::RSquare:\n    case MMToken::RequiresKeyword:\n    case MMToken::Star:\n    case MMToken::StringLiteral:\n    case MMToken::IntegerLiteral:\n    case MMToken::TextualKeyword:\n    case MMToken::UmbrellaKeyword:\n    case MMToken::UseKeyword:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"}}
	},
	["err_mmap_expected_module_name"]={
		[c]="err_mmap_expected_module_name",
		[d]="expected module name",
		[g]="expected module name",
		[h]=k,
		[i]="expected module name",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,1791,"/// Parse a module-id.\n///\n///   module-id:\n///     identifier\n///     identifier \'.\' module-id\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseModuleId(ModuleId &Id) {\n  // ...\n  do {\n    if (Tok.is(MMToken::Identifier) || Tok.is(MMToken::StringLiteral)) {\n    // ...\n    } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module_name);"}},
		[l]={
			["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:34:70: error: expected module name"}
		}
	},
	["err_mmap_expected_rbrace"]={
		[c]="err_mmap_expected_rbrace",
		[d]="expected \'}\'",
		[g]="expected \'}\'",
		[h]=k,
		[i]="expected \'\\}\'",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,2056,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (LoadedFromASTFile || Inferred || PartOfFramework || ParsedAsMainInput) {\n      // ...\n      if (Tok.is(MMToken::RBrace))\n      // ...\n      else {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{u,2197,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{u,2470,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    if (Tok.is(MMToken::RBrace))\n    // ...\n    else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{u,2953,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"}},
		[l]={
			["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:15:80: error: expected \'}\'"}
		}
	},
	["err_mmap_expected_rsquare"]={
		[c]="err_mmap_expected_rsquare",
		[d]="expected \']\' to close attribute",
		[g]="expected \']\' to close attribute",
		[h]=k,
		[i]="expected \'\\]\' to close attribute",
		[b]=a,
		[f]=y,
		[e]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
		[j]={{u,3021,"/// Parse optional attributes.\n///\n///   attributes:\n///     attribute attributes\n///     attribute\n///\n///   attribute:\n///     [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Consume the \']\'.\n    if (!Tok.is(MMToken::RSquare)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rsquare);"}}
	},
	["err_mmap_explicit_inferred_framework"]={
		[c]="err_mmap_explicit_inferred_framework",
		[d]="inferred framework modules cannot be \'explicit\'",
		[g]="inferred framework modules cannot be \'explicit\'",
		[h]=k,
		[i]="inferred framework modules cannot be \'explicit\'",
		[b]=a,
		[f]=y,
		[e]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
		[j]={{u,2849,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Explicit) {\n    Diags.Report(StarLoc, diag::err_mmap_explicit_inferred_framework);"}}
	},
	["err_mmap_explicit_top_level"]={
		[c]="err_mmap_explicit_top_level",
		[d]="\'explicit\' is not permitted on top-level modules",
		[g]="\'explicit\' is not permitted on top-level modules",
		[h]=k,
		[i]="\'explicit\' is not permitted on top\\-level modules",
		[b]=a,
		[f]=y,
		[e]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
		[j]={{u,1962,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Id.size() == 1 && Explicit) {\n    // ...\n    Diags.Report(ExplicitLoc, diag::err_mmap_explicit_top_level);"}}
	},
	["err_mmap_inferred_framework_submodule"]={
		[c]="err_mmap_inferred_framework_submodule",
		[d]="inferred submodule cannot be a framework submodule",
		[g]="inferred submodule cannot be a framework submodule",
		[h]=k,
		[i]="inferred submodule cannot be a framework submodule",
		[b]=a,
		[f]=y,
		[e]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
		[j]={{u,2845,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for the \'framework\' keyword, which is not permitted here.\n    if (Framework) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_framework_submodule);"}}
	},
	["err_mmap_inferred_no_umbrella"]={
		[c]="err_mmap_inferred_no_umbrella",
		[d]="inferred submodules require a module with an umbrella",
		[g]="inferred submodules require a module with an umbrella",
		[h]=k,
		[i]="inferred submodules require a module with an umbrella",
		[b]=a,
		[f]=y,
		[e]={mc,1323124064,kc,cc},
		[j]={{u,2830,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n    // Inferred modules must have umbrella directories.\n    if (!Failed && ActiveModule->IsAvailable && !ActiveModule->getEffectiveUmbrellaDir()) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_no_umbrella);"}}
	},
	["err_mmap_inferred_redef"]={
		[c]="err_mmap_inferred_redef",
		[d]="redefinition of inferred submodule",
		[g]="redefinition of inferred submodule",
		[h]=k,
		[i]="redefinition of inferred submodule",
		[b]=a,
		[f]=y,
		[e]={mc,1323124064,kc,cc},
		[j]={{u,2836,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for redefinition of an inferred module.\n    if (!Failed && ActiveModule->InferSubmodules) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_redef);"}}
	},
	["err_mmap_invalid_header_attribute_value"]={
		[c]={{nil,s,"err_mmap_invalid_header_attribute_value"}},
		[d]={{nil,s,"expected integer literal as value for header attribute \'%0\'"}},
		[g]={{nil,s,"expected integer literal as value for header attribute \'A\'"}},
		[h]=k,
		[i]="expected integer literal as value for header attribute \'(.*?)\'",
		[b]=a,
		[f]={{nil,s,y}},
		[e]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
		[j]={{u,2439,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"},{u,2452,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"}}
	},
	["err_mmap_missing_exclude_name"]={
		[c]="err_mmap_missing_exclude_name",
		[d]="expected excluded module name",
		[g]="expected excluded module name",
		[h]=k,
		[i]="expected excluded module name",
		[b]=a,
		[f]=y,
		[e]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
		[j]={{u,2911,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      // ...\n      // FIXME: Support string-literal module names here.\n      if (!Tok.is(MMToken::Identifier)) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_missing_exclude_name);"}}
	},
	["err_mmap_missing_module_qualified"]={
		[c]="err_mmap_missing_module_qualified",
		[d]="no module named \'%0\' in \'%1\'",
		[g]="no module named \'A\' in \'B\'",
		[h]=k,
		[i]="no module named \'(.*?)\' in \'(.*?)\'",
		[b]=a,
		[f]=y,
		[e]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
		[j]={{u,149,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  // Dig into the module path.\n  for (unsigned I = 1, N = Id.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      if (Complain)\n        Diags.Report(Id[I].second, diag::err_mmap_missing_module_qualified) << Id[I].first << Context->getFullModuleName() << SourceRange(Id[0].second, Id[I - 1].second);"}}
	},
	["err_mmap_missing_module_unqualified"]={
		[c]="err_mmap_missing_module_unqualified",
		[d]="no module named \'%0\' visible from \'%1\'",
		[g]="no module named \'A\' visible from \'B\'",
		[h]=k,
		[i]="no module named \'(.*?)\' visible from \'(.*?)\'",
		[b]=a,
		[f]=y,
		[e]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
		[j]={{u,138,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  if (!Context) {\n    if (Complain)\n      Diags.Report(Id[0].second, diag::err_mmap_missing_module_unqualified) << Id[0].first << Mod->getFullModuleName();"}}
	},
	["err_mmap_missing_parent_module"]={
		[c]={{nil,E,"err_mmap_missing_parent_module"}},
		[d]={{nil,E,"no module named \'%0\' %select{found|in \'%2\'}1, parent module must be defined before the submodule"}},
		[g]={{nil,E,{"no module named \'A\' ",{"found","in \'C\'"},", parent module must be defined before the submodule"}}},
		[h]=k,
		[i]="no module named \'(.*?)\' (?:found|in \'(.*?)\'), parent module must be defined before the submodule",
		[b]=a,
		[f]={{nil,E,y}},
		[e]={"8839e278ffca",1595533636,"[Modules] Improve error message when cannot find parent module for submodule definition.","[Modules] Improve error message when cannot find parent module for submodule definition.\n\nBefore the change the diagnostic for\n\n    module unknown.submodule {}\n\nwas \"error: expected module name\" which is incorrect and misleading\nbecause both \"unknown\" and \"submodule\" are valid module names.\n\nWe already have a better error message when a parent module is a\nsubmodule itself and is missing. Make the error for a missing top-level\nmodule more like the one for a submodule.\n\nrdar://problem/64424407\n\nReviewed By: bruno\n\nDifferential Revision: https://reviews.llvm.org/D84458"},
		[j]={{u,1982,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Id.size() > 1) {\n    // ...\n    for (unsigned I = 0, N = Id.size() - 1; I != N; ++I) {\n      // ...\n      Diags.Report(Id[I].second, diag::err_mmap_missing_parent_module) << Id[I].first << (ActiveModule != nullptr) << (ActiveModule ? ActiveModule->getTopLevelModule()->getFullModuleName() : \"\");"}}
	},
	["err_mmap_module_id"]={
		[c]="err_mmap_module_id",
		[d]="expected a module name or \'*\'",
		[g]="expected a module name or \'*\'",
		[h]=k,
		[i]="expected a module name or \'\\*\'",
		[b]=a,
		[f]=y,
		[e]={"ba7f2f7110c2",1380014054,"Module use declarations (II)","Module use declarations (II)\n\nReview: http://llvm-reviews.chandlerc.com/D1546.\n\nI have picked up this patch form Lawrence\n(http://llvm-reviews.chandlerc.com/D1063) and did a few changes.\n\nFrom the original change description (updated as appropriate):\nThis patch adds a check that ensures that modules only use modules they\nhave so declared. To this end, it adds a statement on intended module\nuse to the module.map grammar:\n\n  use module-id\n\nA module can then only use headers from other modules if it \'uses\' them.\nThis enforcement is off by default, but may be turned on with the new\noption -fmodules-decluse.\n\nWhen enforcing the module semantics, we also need to consider a source\nfile part of a module. This is achieved with a compiler option\n\n-fmodule-name=<module-id>.\n\nThe compiler at present only applies restrictions to the module directly\nbeing built.\n\nllvm-svn: 191283"},
		[j]={{u,2605,"/// Parse a module export declaration.\n///\n///   export-declaration:\n///     \'export\' wildcard-module-id\n///\n///   wildcard-module-id:\n///     identifier\n///     \'*\'\n///     identifier \'.\' wildcard-module-id\nvoid ModuleMapParser::parseExportDecl() {\n  // ...\n  do {\n    // ...\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"},{u,2625,"/// Parse a module export_as declaration.\n///\n///   export-as-declaration:\n///     \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!Tok.is(MMToken::Identifier)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"}}
	},
	["err_mmap_module_redefinition"]={
		[c]="err_mmap_module_redefinition",
		[d]="redefinition of module \'%0\'",
		[g]="redefinition of module \'A\'",
		[h]=k,
		[i]="redefinition of module \'(.*?)\'",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,2067,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (!Existing->Parent && Map.mayShadowNewModule(Existing)) {\n    // ...\n    } else {\n      // ...\n      Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) << ModuleName;"}}
	},
	["err_mmap_nested_submodule_id"]={
		[c]="err_mmap_nested_submodule_id",
		[d]="qualified module name can only be used to define modules at the top level",
		[g]="qualified module name can only be used to define modules at the top level",
		[h]=k,
		[i]="qualified module name can only be used to define modules at the top level",
		[b]=a,
		[f]=y,
		[e]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
		[j]={{u,1954,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///   module-member:\n///     requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///   submodule-declaration:\n///     module-declaration\n///     inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (ActiveModule) {\n    if (Id.size() > 1) {\n      Diags.Report(Id.front().second, diag::err_mmap_nested_submodule_id) << SourceRange(Id.front().second, Id.back().second);"}}
	},
	["err_mmap_submodule_export_as"]={
		[c]={{nil,r,"err_mmap_submodule_export_as"}},
		[d]={{nil,r,"only top-level modules can be re-exported as public"}},
		[g]={{nil,r,"only top-level modules can be re-exported as public"}},
		[h]=k,
		[i]="only top\\-level modules can be re\\-exported as public",
		[b]=a,
		[f]={{nil,r,y}},
		[e]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
		[j]={{u,2631,"/// Parse a module export_as declaration.\n///\n///   export-as-declaration:\n///     \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (ActiveModule->Parent) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_submodule_export_as);"}}
	},
	["err_mmap_top_level_inferred_submodule"]={
		[c]="err_mmap_top_level_inferred_submodule",
		[d]="only submodules and framework modules may be inferred with wildcard syntax",
		[g]="only submodules and framework modules may be inferred with wildcard syntax",
		[h]=k,
		[i]="only submodules and framework modules may be inferred with wildcard syntax",
		[b]=a,
		[f]=y,
		[e]={mc,1323124064,kc,cc},
		[j]={{u,2822,"/// Parse an inferred module declaration (wildcard modules).\n///\n///   module-declaration:\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///       { inferred-module-member* }\n///\n///   inferred-module-member:\n///     \'export\' \'*\'\n///     \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  // Inferred modules must be submodules.\n  if (!ActiveModule && !Framework) {\n    Diags.Report(StarLoc, diag::err_mmap_top_level_inferred_submodule);"}}
	},
	["err_mmap_umbrella_clash"]={
		[c]="err_mmap_umbrella_clash",
		[d]="umbrella for module \'%0\' already covers this directory",
		[g]="umbrella for module \'A\' already covers this directory",
		[h]=k,
		[i]="umbrella for module \'(.*?)\' already covers this directory",
		[b]=a,
		[f]=y,
		[e]={"b65dbfff5275",1321484545,"A module with an umbrella header assumes that all of the headers in","A module with an umbrella header assumes that all of the headers in\nthe umbrella header\'s directory and its subdirectories are part of the\nmodule (that\'s why it\'s an umbrella). Make sure that these headers are\nconsidered to be part of the module for lookup purposes.\n\nllvm-svn: 144859"},
		[j]={{u,266,"void ModuleMap::resolveHeader(Module *Mod, const Module::UnresolvedHeaderDirective &Header, bool &NeedsFramework) {\n  // ...\n  if (OptionalFileEntryRef File = findHeader(Mod, Header, RelativePathName, NeedsFramework)) {\n    if (Header.IsUmbrella) {\n      // ...\n      if (Module *UmbrellaMod = UmbrellaDirs[UmbrellaDir])\n        Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << UmbrellaMod->getFullModuleName();"},{u,2415,"/// Parse a header declaration.\n///\n///   header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///     \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // Check whether we already have an umbrella.\n  if (Header.IsUmbrella && ActiveModule->Umbrella) {\n    Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{u,2509,"/// Parse an umbrella directory declaration.\n///\n///   umbrella-dir-declaration:\n///     umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  // Check whether we already have an umbrella.\n  if (ActiveModule->Umbrella) {\n    Diags.Report(DirNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{u,2558,"/// Parse an umbrella directory declaration.\n///\n///   umbrella-dir-declaration:\n///     umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  if (Module *OwningModule = Map.UmbrellaDirs[*Dir]) {\n    Diags.Report(UmbrellaLoc, diag::err_mmap_umbrella_clash) << OwningModule->getFullModuleName();"}}
	},
	["err_mmap_unknown_token"]={
		[c]="err_mmap_unknown_token",
		[d]="skipping stray token",
		[g]="skipping stray token",
		[h]=k,
		[i]="skipping stray token",
		[b]=a,
		[f]=y,
		[e]={pb,1321038628,nb,yb},
		[j]={{u,1689,"retry:\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    if (StringRef(Start, Length).getAsInteger(0, Value)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"},{u,1722,"retry:\n  // ...\n  default:\n    Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"}}
	},
	["err_mmap_use_decl_submodule"]={
		[c]="err_mmap_use_decl_submodule",
		[d]="use declarations are only allowed in top-level modules",
		[g]="use declarations are only allowed in top-level modules",
		[h]=k,
		[i]="use declarations are only allowed in top\\-level modules",
		[b]=a,
		[f]=y,
		[e]={"8f4d3ff1466a",1427407801,"[modules] Restrict the module use-declaration to only appear in top-level","[modules] Restrict the module use-declaration to only appear in top-level\nmodules, and allow sub-modules of a module with a use-declaration to make use\nof the nominated modules.\n\nllvm-svn: 233323"},
		[j]={{u,2665,"/// Parse a module use declaration.\n///\n///   use-declaration:\n///     \'use\' wildcard-module-id\nvoid ModuleMapParser::parseUseDecl() {\n  // ...\n  if (ActiveModule->Parent)\n    Diags.Report(KWLoc, diag::err_mmap_use_decl_submodule);"}}
	},
	["err_mode_not_primitive"]={
		[c]="err_mode_not_primitive",
		[d]="mode attribute only supported for integer and floating-point types",
		[g]="mode attribute only supported for integer and floating-point types",
		[h]=k,
		[i]="mode attribute only supported for integer and floating\\-point types",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{T,4817,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n    Diag(AttrLoc, diag::err_mode_not_primitive);"}},
		[l]={
			["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:260:48: error: mode attribute only supported for integer and floating-point types"}
		}
	},
	["err_mode_wrong_type"]={
		[c]="err_mode_wrong_type",
		[d]="type of machine mode does not match type of base type",
		[g]="type of machine mode does not match type of base type",
		[h]=k,
		[i]="type of machine mode does not match type of base type",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{T,4820,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n    if (!IntegralOrAnyEnumType)\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{T,4823,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n    if (!OldElemTy->isComplexType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{T,4826,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n  // ...\n  } else {\n    if (!OldElemTy->isFloatingType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{T,4864,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (NewTy.isNull()) {\n    Diag(AttrLoc, diag::err_mode_wrong_type);"}},
		[l]={
			["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:21:30: error: type of machine mode does not match type of base type","clang/test/Sema/attr-mode-vector-types.c:26:28: error: type of machine mode does not match type of base type","clang/test/Sema/attr-mode-vector-types.c:29:30: error: type of machine mode does not match type of base type"}
		}
	},
	["err_modifier_expected_colon"]={
		[c]={{nil,p,"err_modifier_expected_colon"}},
		[d]={{nil,p,"missing \':\' after %0 modifier"}},
		[g]={{nil,p,"missing \':\' after A modifier"}},
		[h]=k,
		[i]="missing \'\\:\' after (.*?) modifier",
		[b]=a,
		[f]={{nil,p,D}},
		[e]={"ab9eac762c35",1668730814,"[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause","[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause\n\nThis patch gives basic parsing and semantic analysis support for \'strict\'\nmodifier with \'grainsize\' clause of \'taskloop\' construct introduced in\nOpenMP 5.1 (section 2.12.2)\n\nDifferential Revision: https://reviews.llvm.org/D138217"},
		[j]={{"clang/lib/Parse/ParseOpenMP.cpp",3942,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_GRAINSIZE_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"},{"clang/lib/Parse/ParseOpenMP.cpp",3969,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n  // ...\n  } else if (Kind == OMPC_num_tasks) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_NUMTASKS_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"}},
		[l]={
			["clang/test/OpenMP/taskloop_strict_modifier_messages.cpp"]={"clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:17:34: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:26:34: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:40:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:50:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:60:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:70:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:80:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:90:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:100:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:110:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:119:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:129:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:139:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:149:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:159:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:169:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:178:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:188:55: error: missing \':\' after strict modifier"}
		}
	},
	["err_module_build_disabled"]={
		[c]="err_module_build_disabled",
		[d]="module \'%0\' is needed but has not been provided, and implicit use of module files is disabled",
		[g]="module \'A\' is needed but has not been provided, and implicit use of module files is disabled",
		[h]=M,
		[i]="module \'(.*?)\' is needed but has not been provided, and implicit use of module files is disabled",
		[b]=a,
		[f]=D,
		[e]={"d2e8b04d6111",1424432681,"Add -fno-implicit-modules.","Add -fno-implicit-modules.\n\nIf this flag is set, we error out when a module build is required. This is\nuseful in environments where all required modules are passed via -fmodule-file.\n\nllvm-svn: 230006"},
		[j]={{fb,1832,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (ModuleFilename.empty()) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_build_disabled) << ModuleName;"}},
		[l]={
			["clang/test/Modules/implicit-module-with-missing-path.cpp"]={"clang/test/Modules/implicit-module-with-missing-path.cpp:12:8: fatal error: module \'C\' is needed but has not been provided, and implicit use of module files is disabled"}
		}
	},
	["err_module_build_requires_fmodules"]={
		[c]={{nil,s,"err_module_build_requires_fmodules"}},
		[d]={{nil,s,"module compilation requires \'-fmodules\'"}},
		[g]={{nil,s,"module compilation requires \'-fmodules\'"}},
		[h]=k,
		[i]="module compilation requires \'\\-fmodules\'",
		[b]=a,
		[f]={{nil,s,w}},
		[e]={"1f2bd35b247b",1499375156,"Reject attempts to build a module without -fmodules, rather than silently doing weird things.","Reject attempts to build a module without -fmodules, rather than silently doing weird things.\n\nllvm-svn: 307316"},
		[j]={{"clang/lib/Frontend/FrontendActions.cpp",223,"bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().Modules) {\n    CI.getDiagnostics().Report(diag::err_module_build_requires_fmodules);"}}
	},
	["err_module_build_shadowed_submodule"]={
		[c]={{nil,o,"err_module_build_shadowed_submodule"}},
		[d]={{nil,o,"build a shadowed submodule \'%0\'"}},
		[g]={{nil,o,"build a shadowed submodule \'A\'"}},
		[h]=M,
		[i]="build a shadowed submodule \'(.*?)\'",
		[b]=a,
		[f]={{nil,o,D}},
		[e]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
		[j]={{"clang/lib/Lex/PPDirectives.cpp",2553,"#endif\n  // ...\n  // Determine if we\'re switching to building a new submodule, and which one.\n  // This does not apply for C++20 modules header units.\n  if (SM && !SM->isHeaderUnit()) {\n    if (SM->getTopLevelModule()->ShadowingModule) {\n      // ...\n      Diag(SM->DefinitionLoc, diag::err_module_build_shadowed_submodule) << SM->getFullModuleName();"}}
	},
	["err_module_cannot_create_includes"]={
		[c]="err_module_cannot_create_includes",
		[d]="cannot create includes file for module %0: %1",
		[g]="cannot create includes file for module A: B",
		[h]=k,
		[i]="cannot create includes file for module (.*?)\\: (.*?)",
		[b]=a,
		[f]=w,
		[e]={"723928c7dcc7",1394503367,"If a module map is found in a relative -I path, convert the filenames within it","If a module map is found in a relative -I path, convert the filenames within it\nto absolute paths when building the includes file for the module. Without this,\nthe module build would fail, because the relative paths we were using are not\nnecessarily relative to a directory in our include path.\n\nllvm-svn: 203528"},
		[j]={{xb,567,"/// Compute the input buffer that should be used to build the specified module.\nstatic std::unique_ptr<llvm::MemoryBuffer> getInputBufferForModule(CompilerInstance &CI, Module *M) {\n  // ...\n  if (Err) {\n    CI.getDiagnostics().Report(diag::err_module_cannot_create_includes) << M->getFullModuleName() << Err.message();"}}
	},
	["err_module_cycle"]={
		[c]="err_module_cycle",
		[d]="cyclic dependency in module \'%0\': %1",
		[g]="cyclic dependency in module \'A\': B",
		[h]=M,
		[i]="cyclic dependency in module \'(.*?)\'\\: (.*?)",
		[b]=a,
		[f]=D,
		[e]={"dff0e892db7c",1316119210,"Detect cyclic module dependencies in a manner that is rather more","Detect cyclic module dependencies in a manner that is rather more\ngraceful than running out of stack space.\n\nllvm-svn: 139833"},
		[j]={{fb,1938,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Pos != PosEnd) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_cycle) << ModuleName << CyclePath;"}}
	},
	["err_module_decl_in_header_unit"]={
		[c]={{nil,p,"err_module_decl_in_header_unit"}},
		[d]={{nil,p,"\'module\' declaration found while building header unit"}},
		[g]={{nil,p,"\'module\' declaration found while building header unit"}},
		[h]=k,
		[i]="\'module\' declaration found while building header unit",
		[b]=a,
		[f]={{nil,p,H}},
		[e]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
		[j]={{cb,225,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_HeaderUnit:\n    Diag(ModuleLoc, diag::err_module_decl_in_header_unit);"}}
	},
	["err_module_decl_in_module_map_module"]={
		[c]={{nil,s,"err_module_decl_in_module_map_module"}},
		[d]={{nil,s,"\'module\' declaration found while building module from module map"}},
		[g]={{nil,s,"\'module\' declaration found while building module from module map"}},
		[h]=k,
		[i]="\'module\' declaration found while building module from module map",
		[b]=a,
		[f]={{nil,s,H}},
		[e]={"81328ac3a5b1",1492814358,"P0629R0: Switch to latest proposal for distinguishing module interface from implementation.","P0629R0: Switch to latest proposal for distinguishing module interface from implementation.\n\nThis switches from the prototype syntax in P0273R0 (\'module\' and \'module\nimplementation\') to the consensus syntax \'export module\' and \'module\'.\n\nIn passing, drop the \"module declaration must be first\" enforcement, since EWG\nseems to have changed its mind on that.\n\nllvm-svn: 301056"},
		[j]={{cb,221,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleMap:\n    Diag(ModuleLoc, diag::err_module_decl_in_module_map_module);"}}
	},
	["err_module_decl_not_at_start"]={
		[c]={{nil,x,"err_module_decl_not_at_start"}},
		[d]={{nil,x,"module declaration must occur at the start of the translation unit"}},
		[g]={{nil,x,"module declaration must occur at the start of the translation unit"}},
		[h]=k,
		[i]="module declaration must occur at the start of the translation unit",
		[b]=a,
		[f]={{nil,x,H}},
		[e]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
		[j]={{cb,249,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // In C++20, the module-declaration must be the first declaration if there\n  // is no global module fragment.\n  if (getLangOpts().CPlusPlusModules && !IsFirstDecl && !SeenGMF) {\n    Diag(ModuleLoc, diag::err_module_decl_not_at_start);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:24:8: error: module declaration must occur at the start of the translation unit"}
		}
	},
	["err_module_declaration_missing"]={
		[c]={{nil,r,"err_module_declaration_missing"}},
		[d]={{nil,r,"missing \'export module\' declaration in module interface unit"}},
		[g]={{nil,r,"missing \'export module\' declaration in module interface unit"}},
		[h]=k,
		[i]="missing \'export module\' declaration in module interface unit",
		[b]=a,
		[f]={{nil,r,H}},
		[e]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
		[j]={{"clang/lib/Sema/Sema.cpp",1222,"/// 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 (TUKind == TU_Module) {\n    // If we are building a module interface unit, we need to have seen the\n    // module declaration by now.\n    if (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface && !isCurrentModulePurview() && !DiagnosedMissingModuleDeclaration) {\n      // ...\n      Diag(getSourceManager().getLocForStartOfFile(getSourceManager().getMainFileID()), diag::err_module_declaration_missing);"}}
	},
	["err_module_declaration_missing_after_global_module_introducer"]={
		[c]={{nil,x,"err_module_declaration_missing_after_global_module_introducer"}},
		[d]={{nil,x,"missing \'module\' declaration at end of global module fragment introduced here"}},
		[g]={{nil,x,"missing \'module\' declaration at end of global module fragment introduced here"}},
		[h]=k,
		[i]="missing \'module\' declaration at end of global module fragment introduced here",
		[b]=a,
		[f]={{nil,x,H}},
		[e]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
		[j]={{"clang/lib/Sema/Sema.cpp",1209,"/// 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 (!ModuleScopes.empty() && ModuleScopes.back().Module->Kind == Module::ExplicitGlobalModuleFragment) {\n    Diag(ModuleScopes.back().BeginLoc, diag::err_module_declaration_missing_after_global_module_introducer);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:15:1: error: missing \'module\' declaration at end of global module fragment introduced here"}
		}
	},
	["err_module_different_modmap"]={
		[c]="err_module_different_modmap",
		[d]="module \'%0\' %select{uses|does not use}1 additional module map \'%2\'%select{| not}1 used when the module was built",
		[g]={{nil,nil,{"module \'A\' ",{"uses","does not use"}," additional module map \'C\'",{a," not"}," used when the module was built"}}},
		[h]=k,
		[i]="module \'(.*?)\' (?:uses|does not use) additional module map \'(.*?)\'(?:| not) used when the module was built",
		[b]=a,
		[f]=R,
		[e]={"4b8a9e951e09",1407861753,"Verify all the module map files for a pcm are the same on load","Verify all the module map files for a pcm are the same on load\n\nWe already verified the primary module map file (either the one that\ndefines the top-level module, or the one that allows inferring it if it\nis an inferred framework module). Now we also verify any other module\nmap files that define submodules, such as when there is a\nmodule.private.modulemap file.\n\nllvm-svn: 215455"},
		[j]={{ob,4067,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files (e.g. module.private.modulemap)\n    // that are not in the pcm.\n    if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {\n      for (const FileEntry *ModMap : *AdditionalModuleMaps) {\n        // Remove files that match\n        // Note: SmallPtrSet::erase is really remove\n        if (!AdditionalStoredMaps.erase(ModMap)) {\n          if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n            Diag(diag::err_module_different_modmap) << F.ModuleName << /*new*/ 0 << ModMap->getName();"},{ob,4078,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files that are in the pcm, but not\n    // found in header search. Cases that match are already removed.\n    for (const FileEntry *ModMap : AdditionalStoredMaps) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n        Diag(diag::err_module_different_modmap) << F.ModuleName << /*not new*/ 1 << ModMap->getName();"}}
	},
	["err_module_expected_ident"]={
		[c]="err_module_expected_ident",
		[d]="expected a module name after module%select{| import}0",
		[g]={{nil,s,{"expected a module name after \'",{"module","import"},"\'"}},{nil,nil,{"expected a module name after module",{a," import"}}}},
		[h]=k,
		[i]="expected a module name after \'(?:module|import)\'",
		[b]=a,
		[f]=H,
		[e]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
		[j]={{wb,2632,"/// Parse a C++ / Objective-C module name (both forms use the same\n/// grammar).\n///\n///         module-name:\n///           module-name-qualifier[opt] identifier\n///         module-name-qualifier:\n///           module-name-qualifier[opt] identifier \'.\'\nbool Parser::ParseModuleName(SourceLocation UseLoc, SmallVectorImpl<std::pair<IdentifierInfo *, SourceLocation>> &Path, bool IsImport) {\n  // Parse the module path.\n  while (true) {\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_module_expected_ident) << IsImport;"}}
	},
	["err_module_expected_semi"]={
		[c]="err_module_expected_semi",
		[d]="expected \';\' after module name",
		[g]="expected \';\' after module name",
		[h]=k,
		[i]="expected \';\' after module name",
		[b]=a,
		[f]=H,
		[e]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
		[j]={{wb,2469,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///   module-declaration:   [C++20]\n///     \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///   global-module-fragment:  [C++2a]\n///     \'module\' \';\' top-level-declaration-seq[opt]\n///   module-declaration:      [C++2a]\n///     \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///   private-module-fragment: [C++2a]\n///     \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{wb,2584,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///           \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///           \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///           \'export\'[opt] \'import\' module-name\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' module-partition\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' header-name\n///                   attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  if (SeenError) {\n    ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{wb,2595,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///           \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///           \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///           \'export\'[opt] \'import\' module-name\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' module-partition\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' header-name\n///                   attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  ExpectAndConsumeSemi(diag::err_module_expected_semi);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:9: error: expected \';\' after module name"}
		}
	},
	["err_module_file_conflict"]={
		[c]="err_module_file_conflict",
		[d]="module \'%0\' is defined in both \'%1\' and \'%2\'",
		[g]="module \'A\' is defined in both \'B\' and \'C\'",
		[h]=M,
		[i]="module \'(.*?)\' is defined in both \'(.*?)\' and \'(.*?)\'",
		[b]=a,
		[f]=R,
		[e]={"8a114ab557f0",1360190431,"Detect when we end up trying to load conflicting module files.","Detect when we end up trying to load conflicting module files.\n\nThis can happen when one abuses precompiled headers by passing more -D\noptions when using a precompiled hedaer than when it was built. This\nis intentionally permitted by precompiled headers (and is exploited by\nsome build environments), but causes problems for modules.\n\nFirst part of <rdar://problem/13165109>, detecting when something when\nhorribly wrong.\n\nllvm-svn: 174554"},
		[j]={{ob,4011,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Don\'t emit module relocation error if we have -fno-validate-pch\n    if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && !ModMap) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {\n        if (auto ASTFE = M ? M->getASTFile() : std::nullopt) {\n          // ...\n          Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName << ASTFE->getName();"},{ob,5658,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case SUBMODULE_DEFINITION: {\n      // ...\n      if (!ParentModule) {\n        if (const FileEntry *CurFile = CurrentModule->getASTFile()) {\n          // Don\'t emit module relocation error if we have -fno-validate-pch\n          if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && CurFile != F.File) {\n            auto ConflictError = PartialDiagnostic(diag::err_module_file_conflict, ContextObj->DiagAllocator) << CurrentModule->getTopLevelModuleName() << CurFile->getName() << F.File->getName();"}},
		[l]={
			["clang/test/Modules/explicit-build.cpp"]={"fatal error: module \'a\' is defined in both \'build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/a.pcm\' and \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/2VHNCOTT5YBWK/a-I2CR4V90YFI2.pcm\'"}
		}
	},
	["err_module_file_missing_top_level_submodule"]={
		[c]={{nil,v,"err_module_file_missing_top_level_submodule"}},
		[d]={{nil,v,"module file \'%0\' is missing its top-level submodule"}},
		[g]={{nil,v,"module file \'A\' is missing its top-level submodule"}},
		[h]=M,
		[i]="module file \'(.*?)\' is missing its top\\-level submodule",
		[b]=a,
		[f]={{nil,v,R}},
		[e]={"83dcb34b6bf4",1573420492,"clang/Modules: Error if ReadASTBlock does not find the main module","clang/Modules: Error if ReadASTBlock does not find the main module\n\nIf ReadASTBlock does not find its top-level submodule, there\'s something\nwrong the with the PCM.  Error in that case, to avoid hitting problems\nfurther from the source.\n\nNote that the Swift compiler sometimes hits a case in\nCompilerInstance::loadModule where the top-level submodule mysteriously\ndoes not have Module::IsFromModuleFile set.  That will emit a confusing\nwarn_missing_submodule, which was never intended for the main module.\nThe recent audit of error-handling in ReadAST may have rooted out the\nreal problem.  If not, this commit will help to clarify the real\nproblem, and replace a confusing warning with an error pointing at the\nmalformed PCM file.\n\nWe\'re specifically sniffing out whether the top-level submodule was\nfound/processed, in case there is a malformed module file that is\nmissing it.  If there is an error encountered during ReadSubmoduleBlock\nthe return status should already propagate through.  It would be nice to\ndetect other missing submodules around here to catch other instances of\nwarn_missing_submodule closer to the source, but that\'s left as a future\nexercise.\n\nhttps://reviews.llvm.org/D70063"},
		[j]={{ob,4342,"ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities, SmallVectorImpl<ImportedSubmodule> *Imported) {\n  // ...\n  // Load the AST blocks of all of the modules that we loaded. We can still\n  // hit errors parsing the ASTs at this point.\n  for (ImportedModule &M : Loaded) {\n    // ...\n    // The AST block should always have a definition for the main module.\n    if (F.isModule() && !F.DidReadTopLevelSubmodule) {\n      Error(diag::err_module_file_missing_top_level_submodule, F.FileName);"}}
	},
	["err_module_file_not_module"]={
		[c]="err_module_file_not_module",
		[d]="AST file \'%0\' was not built as a module",
		[g]="AST file \'A\' was not built as a module",
		[h]=M,
		[i]="AST file \'(.*?)\' was not built as a module",
		[b]=a,
		[f]=R,
		[e]={"e842a4745222",1413943546,"[modules] Initial support for explicitly loading .pcm files.","[modules] Initial support for explicitly loading .pcm files.\n\nImplicit module builds are not well-suited to a lot of build systems. In\nparticular, they fare badly in distributed build systems, and they lead to\nbuild artifacts that are not tracked as part of the usual dependency management\nprocess. This change allows explicitly-built module files (which are already\nsupported through the -emit-module flag) to be explicitly loaded into a build,\nallowing build systems to opt to manage module builds and dependencies\nthemselves.\n\nThis is only the first step in supporting such configurations, and it should\nbe considered experimental and subject to change or removal for now.\n\nllvm-svn: 220359"},
		[j]={{ob,4684,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case CONTROL_BLOCK_ID:\n      // ...\n      case Success:\n        // Check that we didn\'t try to load a non-module AST file as a module.\n        //\n        // FIXME: Should we also perform the converse check? Loading a module as\n        // a PCH file sort of works, but it\'s a bit wonky.\n        if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule || Type == MK_PrebuiltModule) && F.ModuleName.empty()) {\n          // ...\n          if (Result != OutOfDate || (ClientLoadCapabilities & ARR_OutOfDate) == 0)\n            Diag(diag::err_module_file_not_module) << FileName;"}}
	},
	["err_module_format_unhandled"]={
		[c]="err_module_format_unhandled",
		[d]="no handler registered for module format \'%0\'",
		[g]="no handler registered for module format \'A\'",
		[h]=M,
		[i]="no handler registered for module format \'(.*?)\'",
		[b]=a,
		[f]=w,
		[e]={"fb2398d0c434",1437095994,"Make the clang module container format selectable from the command line.","Make the clang module container format selectable from the command line.\n- introduces a new cc1 option -fmodule-format=[raw,obj]\n  with \'raw\' being the default\n- supports arbitrary module container formats that libclang is agnostic to\n- adds the format to the module hash to avoid collisions\n- splits the old PCHContainerOperations into PCHContainerWriter and\n  a PCHContainerReader.\n\nThanks to Richard Smith for reviewing this patch!\n\nllvm-svn: 242499"}
	},
	["err_module_fragment_exported"]={
		[c]={{nil,x,"err_module_fragment_exported"}},
		[d]={{nil,x,"%select{global|private}0 module fragment cannot be exported"}},
		[g]={{nil,x,{{"global","private"}," module fragment cannot be exported"}}},
		[h]=k,
		[i]="(?:global|private) module fragment cannot be exported",
		[b]=a,
		[f]={{nil,x,H}},
		[e]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
		[j]={{wb,2421,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///   module-declaration:   [C++20]\n///     \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///   global-module-fragment:  [C++2a]\n///     \'module\' \';\' top-level-declaration-seq[opt]\n///   module-declaration:      [C++2a]\n///     \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///   private-module-fragment: [C++2a]\n///     \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a global-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::semi)) {\n    // ...\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*global*/ 0 << FixItHint::CreateRemoval(StartLoc);"},{wb,2432,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///   module-declaration:   [C++20]\n///     \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///   global-module-fragment:  [C++2a]\n///     \'module\' \';\' top-level-declaration-seq[opt]\n///   module-declaration:      [C++2a]\n///     \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///   private-module-fragment: [C++2a]\n///     \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*private*/ 1 << FixItHint::CreateRemoval(StartLoc);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:13:1: error: global module fragment cannot be exported","clang/test/CXX/basic/basic.link/p1.cpp:41:1: error: private module fragment cannot be exported"}
		}
	},
	["err_module_header_file_not_found"]={
		[c]={{nil,gb,"err_module_header_file_not_found"}},
		[d]={{nil,gb,"module header file \'%0\' not found"}},
		[g]={{nil,gb,"module header file \'A\' not found"}},
		[h]=M,
		[i]="module header file \'(.*?)\' not found",
		[b]=a,
		[f]={{nil,gb,w}},
		[e]={"d6509cf21dd0",1536974475,"[modules] Frontend support for building a header module from a list of","[modules] Frontend support for building a header module from a list of\nheadaer files.\n\nllvm-svn: 342304"},
		[j]={{xb,838,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Handle C++20 header units.\n  // Here, the user has the option to specify that the header name should be\n  // looked up in the pre-processor search paths (and the main filename as\n  // passed by the driver might therefore be incomplete until that look-up).\n  if (CI.getLangOpts().CPlusPlusModules && Input.getKind().isHeaderUnit() && !Input.getKind().isPreprocessed()) {\n    // ...\n    if (Kind.getHeaderUnitKind() != InputKind::HeaderUnit_Abs) {\n      // ...\n      if (!FE) {\n        CI.getDiagnostics().Report(diag::err_module_header_file_not_found) << FileName;"}}
	},
	["err_module_header_missing"]={
		[c]="err_module_header_missing",
		[d]="%select{|umbrella }0header \'%1\' not found",
		[g]={{nil,nil,{{a,"umbrella "},"header \'B\' not found"}}},
		[h]=k,
		[i]="(?:|umbrella )header \'(.*?)\' not found",
		[b]=a,
		[f]=D,
		[e]={"0761a8a085f4",1387276297,"Modules: Don\'t warn upon missing headers while reading the module map.","Modules: Don\'t warn upon missing headers while reading the module map.\n\nInstead, mark the module as unavailable so that clang errors as soon as\nsomeone tries to build this module.\n\nThis works towards the long-term goal of not stat\'ing the header files at all\nwhile reading the module map and instead read them only when the module is\nbeing built (there is a corresponding FIXME in parseHeaderDecl()).  However, it\nseems non-trivial to get there and this unblock us and moves us into the right\ndirection.\n\nAlso changed the implementation to reuse the same DiagnosticsEngine.\n\nllvm-svn: 197485"},
		[j]={{xb,350,"/// Collect the set of header includes needed to construct the given\n/// module and update the TopHeaders file set of the module.\n///\n/// \\param Module The module we\'re collecting includes from.\n///\n/// \\param Includes Will be augmented with the set of \\#includes or \\#imports\n/// needed to load all of the named headers.\nstatic std::error_code collectModuleHeaderIncludes(const LangOptions &LangOpts, FileManager &FileMgr, DiagnosticsEngine &Diag, ModuleMap &ModMap, clang::Module *Module, SmallVectorImpl<char> &Includes) {\n  // ...\n  // If any headers are missing, we can\'t build this module. In most cases,\n  // diagnostics for this should have already been produced; we only get here\n  // if explicit stat information was provided.\n  // FIXME: If the name resolves to a file with different stat information,\n  // produce a better diagnostic.\n  if (!Module->MissingHeaders.empty()) {\n    // ...\n    Diag.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"},{"clang/lib/Lex/PPDirectives.cpp",1907,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n    Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"}},
		[l]={
			["clang/test/Modules/dependency-gen.modulemap"]={"clang/test/Modules/dependency-gen.modulemap:12:10: error: header \'Inputs/dependency-gen.h\' not found"}
		}
	},
	["err_module_import_in_implementation"]={
		[c]="err_module_import_in_implementation",
		[d]="@import of module \'%0\' in implementation of \'%1\'; use #import",
		[g]="@import of module \'A\' in implementation of \'B\'; use #import",
		[h]=k,
		[i]="@import of module \'(.*?)\' in implementation of \'(.*?)\'; use \\#import",
		[b]=a,
		[f]=H,
		[e]={"b537a3a65180",1406129423,"Add stopgap option -fmodule-implementation-of <name>","Add stopgap option -fmodule-implementation-of <name>\n\nThis flag specifies that we are building an implementation file of the\nmodule <name>, preventing importing <name> as a module. This does not\nconsider this to be the \'current module\' for the purposes of doing\nmodular checks like decluse or non-modular-include warnings, unlike\n-fmodule-name.\n\nThis is needed as a stopgap until:\n1) we can resolve relative includes to a VFS-mapped module (or can\n   safely import a header textually and as part of a module)\n\nand ideally\n2) we can safely do incremental rebuilding when implementation files\n   import submodules.\n\nllvm-svn: 213767"},
		[j]={{cb,564,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n  // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}},
		[l]={
			["clang/test/Modules/implementation-of-module.m"]={"clang/test/Modules/implementation-of-module.m:19:2: error: @import of module \'category_left\' in implementation of \'category_left\'; use #import","clang/test/Modules/implementation-of-module.m:20:2: error: @import of module \'category_left.sub\' in implementation of \'category_left\'; use #import"}
		}
	},
	["err_module_import_not_at_top_level_fatal"]={
		[c]="err_module_import_not_at_top_level_fatal",
		[d]="import of module \'%0\' appears within %1",
		[g]="import of module \'A\' appears within B",
		[h]=M,
		[i]="import of module \'(.*?)\' appears within (.*?)",
		[b]=a,
		[f]=H,
		[e]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
		[j]={{cb,48,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  // ...\n  if (!isa<TranslationUnitDecl>(DC)) {\n    S.Diag(ImportLoc, (FromInclude && S.isModuleVisible(M)) ? diag::ext_module_import_not_at_top_level_noop : diag::err_module_import_not_at_top_level_fatal) << M->getFullModuleName() << DC;"}},
		[l]={
			["clang/test/Modules/misplaced-3.cpp"]={"clang/test/Modules/misplaced-3.cpp:5:1: fatal error: import of module \'dummy\' appears within \'C1\'"}
		}
	},
	["err_module_interface_implementation_mismatch"]={
		[c]="err_module_interface_implementation_mismatch",
		[d]="%select{\'module\'|\'module partition\'|\'module implementation\'}0 declaration found while %select{not |not |}0building module interface",
		[g]={{nil,s,"missing \'export\' specifier in module declaration while building module interface"},{nil,nil,{{"\'module\'","\'module partition\'","\'module implementation\'"}," declaration found while ",{"not ","not ",a},"building module interface"}}},
		[h]=k,
		[i]="missing \'export\' specifier in module declaration while building module interface",
		[b]=a,
		[f]=H,
		[e]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
		[j]={{cb,215,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleInterface:\n    // ...\n    Diag(ModuleLoc, diag::err_module_interface_implementation_mismatch) << FixItHint::CreateInsertion(ModuleLoc, \"export \");"}}
	},
	["err_module_interface_requires_cpp_modules"]={
		[c]={{nil,x,"err_module_interface_requires_cpp_modules"}},
		[d]="module interface compilation requires \'-std=c++20\'",
		[g]="module interface compilation requires \'-std=c++20\'",
		[h]=k,
		[i]="module interface compilation requires \'\\-std\\=c\\+\\+20\'",
		[b]=a,
		[f]={{nil,x,w}},
		[e]={"b1b580e047ad",1555240297,"[c++20] Enable driver and frontend support for building and using","[c++20] Enable driver and frontend support for building and using\nmodules when -std=c++2a is specified.\n\nllvm-svn: 358355"},
		[j]={{"clang/lib/Frontend/FrontendActions.cpp",268,"bool GenerateHeaderUnitAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().CPlusPlusModules) {\n    CI.getDiagnostics().Report(diag::err_module_interface_requires_cpp_modules);"}}
	},
	["err_module_map_not_found"]={
		[c]="err_module_map_not_found",
		[d]="module map file \'%0\' not found",
		[g]="module map file \'A\' not found",
		[h]=M,
		[i]="module map file \'(.*?)\' not found",
		[b]=a,
		[f]=w,
		[e]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
		[j]={{xb,527,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!OriginalModuleMapName.empty()) {\n    // ...\n    if (!OriginalModuleMap) {\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << OriginalModuleMapName;"},{xb,919,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // If we were asked to load any module map files, do so now.\n  for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) {\n    if (auto File = CI.getFileManager().getOptionalFileRef(Filename))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename;"}},
		[l]={
			["clang/test/Modules/module_map_cwd.c"]={"fatal error: module map file \'map\' not found"}
		}
	},
	["err_module_no_size_mtime_for_header"]={
		[c]={{nil,s,"err_module_no_size_mtime_for_header"}},
		[d]={{nil,s,"cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\""}},
		[g]={{nil,s,{"cannot emit module A: ",{"size","mtime"}," must be explicitly specified for missing header file \"C\""}}},
		[h]=k,
		[i]="cannot emit module (.*?)\\: (?:size|mtime) must be explicitly specified for missing header file \"(.*?)\"",
		[b]=a,
		[f]={{nil,s,"AST Serialization Issue"}},
		[e]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
		[j]={{"clang/lib/Serialization/ASTWriter.cpp",1906,"/// Write the header search block for the list of files that\n///\n/// \\param HS The header search structure to save.\nvoid ASTWriter::WriteHeaderSearch(const HeaderSearch &HS) {\n  // ...\n  if (WritingModule) {\n    // ...\n    while (!Worklist.empty()) {\n      // ...\n      // If the file didn\'t exist, we can still create a module if we were given\n      // enough information in the module map.\n      for (const auto &U : M->MissingHeaders) {\n        // Check that we were given enough information to build a module\n        // without this file existing on disk.\n        if (!U.Size || (!U.ModTime && IncludeTimestamps)) {\n          PP->Diag(U.FileNameLoc, diag::err_module_no_size_mtime_for_header) << WritingModule->getFullModuleName() << U.Size.has_value() << U.FileName;"}}
	},
	["err_module_not_built"]={
		[c]="err_module_not_built",
		[d]="could not build module \'%0\'",
		[g]="could not build module \'A\'",
		[h]=M,
		[i]="could not build module \'(.*?)\'",
		[b]=a,
		[f]=D,
		[e]={"faeb1d465862",1315870284,"When an import statement fails to find a module in the module cache,","When an import statement fails to find a module in the module cache,\nbut there is a corresponding umbrella header in a framework, build the\nmodule on-the-fly so it can be immediately loaded at the import\nstatement. This is very much proof-of-concept code, with details to be\nfleshed out over time.\n\nllvm-svn: 139558"},
		[j]={{fb,1402,"/// Read the AST right after compiling the module.\nstatic bool readASTAfterCompileModule(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName, bool *OutOfDate) {\n  // ...\n  // The ASTReader didn\'t diagnose the error, so conservatively report it.\n  if (ReadResult == ASTReader::Missing || !Diags.hasErrorOccurred())\n    Diags.Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{fb,1418,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors.\nstatic bool compileModuleAndReadASTImpl(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n  if (!compileModule(ImportingInstance, ModuleNameLoc, Module, ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{fb,1947,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  // Check whether we have already attempted to build this module (but\n  // failed).\n  if (getPreprocessorOpts().FailedModules && getPreprocessorOpts().FailedModules->hasAlreadyFailed(ModuleName)) {\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
		[l]={
			["clang/test/Modules/import-textual-noguard.mm"]={"clang/test/Modules/import-textual-noguard.mm:4:10: fatal error: could not build module \'M\'"}
		}
	},
	["err_module_not_defined"]={
		[c]={{nil,r,"err_module_not_defined"}},
		[d]={{nil,r,"definition of module \'%0\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
		[g]={{nil,r,"definition of module \'A\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
		[h]=k,
		[i]="definition of module \'(.*?)\' is not available; use \\-fmodule\\-file\\= to specify path to precompiled module interface",
		[b]=a,
		[f]={{nil,r,H}},
		[e]={"d97d35e1500d",1507674927,"[Modules TS] Diagnose attempts to enter module implementation units without the module interface bei...","[Modules TS] Diagnose attempts to enter module implementation units without the module interface being available.\n\nllvm-svn: 315381"},
		[j]={{cb,350,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Implementation: {\n    // ...\n    if (!Interface) {\n      Diag(ModuleLoc, diag::err_module_not_defined) << ModuleName;"}}
	},
	["err_module_not_found"]={
		[c]="err_module_not_found",
		[d]="module \'%0\' not found",
		[g]="module \'A\' not found",
		[h]=M,
		[i]="module \'(.*?)\' not found",
		[b]=a,
		[f]=D,
		[e]={"dd8a2fe0be34",1314827541,"Switch the \"no module found\" default-fatal warning to a default-fatal error.","Switch the \"no module found\" default-fatal warning to a default-fatal error.\n\nllvm-svn: 138909"},
		[j]={{fb,1821,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Source == MS_ModuleNotFound) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
		[l]={
			["clang/test/CXX/module/dcl.dcl/dcl.module/p2.cpp"]={"clang/test/CXX/module/dcl.dcl/dcl.module/p2.cpp:4:8: fatal error: module \'M\' not found"}
		}
	},
	["err_module_odr_violation_definition_data"]={
		[c]={{nil,r,"err_module_odr_violation_definition_data"}},
		[d]={{nil,r,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3"}},
		[g]={{nil,r,{P,{J,F},Q,{{"E base ",{db,"classes"}},{"E virtual base ",{db,"classes"}},"E base class with type F",{"E ",{"non-virtual","virtual"}," base class G"},{"E base class F with ",{"public","protected","private",gc}," access specifier"}}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) base (?:class|classes)|(.*?) virtual base (?:class|classes)|(.*?) base class with type (.*?)|(.*?) (?:non\\-virtual|virtual) base class (.*?)|(.*?) base class (.*?) with (?:public|protected|private|no) access specifier)",
		[b]=a,
		[f]={{nil,p,w},{q,r,R}},
		[e]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl.","[ODRHash] Add base classes to hashing CXXRecordDecl.\n\nllvm-svn: 314581"},
		[j]={{L,733,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  // Diagnostics from DefinitionData are emitted here.\n  if (FirstDD != SecondDD) {\n    // ...\n    auto DiagBaseError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRDefinitionDataDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_definition_data) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
		[l]={
			[Rb]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2685:8: error: \'BaseClass::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2696:8: error: \'BaseClass::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2708:8: error: \'BaseClass::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2720:8: error: \'BaseClass::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class with type \'B4b\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2732:8: error: \'BaseClass::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 virtual base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2744:8: error: \'BaseClass::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2756:8: error: \'BaseClass::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B7a\' with no access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2768:8: error: \'BaseClass::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B8a\' with private access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2780:8: error: \'BaseClass::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B9a\' with public access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2792:8: error: \'BaseClass::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B10a\' with protected access specifier"}
		}
	},
	["err_module_odr_violation_different_definitions"]={
		[c]="err_module_odr_violation_different_definitions",
		[d]="%q0 has different definitions in different modules; %select{definition in module \'%2\' is here|defined here}1",
		[g]={{nil,nil,{"A has different definitions in different modules; ",{"definition in module \'C\' is here",F}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\' is here|defined here)",
		[b]=a,
		[f]={{nil,p,w},{q,nil,R}},
		[e]={"cd45dbc5f24c",1397879310,"When a module completes the definition of a class template specialization imported from another modu...","When a module completes the definition of a class template specialization imported from another module, emit an update record, rather than using the broken decl rewriting mechanism. If multiple modules do this, merge the definitions together, much as we would if they were separate declarations.\n\nllvm-svn: 206680"},
		[j]={{L,653,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(FirstRecord->getLocation(), diag::err_module_odr_violation_different_definitions) << FirstRecord << FirstModule.empty() << FirstModule;"}}
	},
	["err_module_odr_violation_different_instantiations"]={
		[c]="err_module_odr_violation_different_instantiations",
		[d]="instantiation of %q0 is different in different modules",
		[g]="instantiation of A is different in different modules",
		[h]=k,
		[i]="instantiation of (.*?) is different in different modules",
		[b]=a,
		[f]=R,
		[e]={"cd45dbc5f24c",1397879310,"When a module completes the definition of a class template specialization imported from another modu...","When a module completes the definition of a class template specialization imported from another module, emit an update record, rather than using the broken decl rewriting mechanism. If multiple modules do this, merge the definitions together, much as we would if they were separate declarations.\n\nllvm-svn: 206680"},
		[j]={{ob,9797,"void ASTReader::diagnoseOdrViolations() {\n  // ...\n  // Issue any pending ODR-failure diagnostics.\n  for (auto &Merge : OdrMergeFailures) {\n    // ...\n    if (!Diagnosed) {\n      // ...\n      Diag(Merge.first->getLocation(), diag::err_module_odr_violation_different_instantiations) << Merge.first;"}}
	},
	["err_module_odr_violation_enum"]={
		[c]={{nil,o,"err_module_odr_violation_enum"}},
		[d]={{nil,q,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initializer|%ordinal4 element %5 has an initializer|}3"},{K,o,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3"}},
		[g]={{nil,q,{"A has different definitions in different modules; ",{J,F}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",db}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initializer"},"E element F has an initializer",a}}},{K,o,{"A has different definitions in different modules; ",{J,F}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",db}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initilizer"},"E element F has an initializer",a}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?:enum that is (?:not scoped|scoped)|enum scoped with keyword (?:struct|class)|enum (?:without|with) specified type|enum with specified type (.*?)|enum with (.*?) element(.*?)|(.*?) element has name (.*?)|(.*?) element (.*?) (?:has|does not have) an initializer|(.*?) element (.*?) has an initializer|)",
		[b]=a,
		[f]={{nil,p,w},{q,o,R}},
		[e]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums.","[ODRHash] Support hashing enums.\n\nllvm-svn: 337978"},
		[j]={{L,1810,"bool ODRDiagsEmitter::diagnoseMismatch(const EnumDecl *FirstEnum, const EnumDecl *SecondEnum) const {\n  // ...\n  auto DiagError = [FirstEnum, &FirstModule, this](const auto *DiagAnchor, ODREnumDifference DiffType) { return Diag(DiagAnchor->getLocation(), diag::err_module_odr_violation_enum) << FirstEnum << FirstModule.empty() << FirstModule << DiagAnchor->getSourceRange() << DiffType; };"}},
		[l]={
			[Rb]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3409:6: error: \'Enums::E2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 1 element","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3429:6: error: \'Enums::E4\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 2 elements","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3449:11: error: \'Enums::E6\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element has name \'x62\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3459:11: error: \'Enums::E7\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x71\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3469:11: error: \'Enums::E8\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x81\' does not have an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3479:20: error: \'Enums::E9\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 2nd element \'x92\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3489:12: error: \'Enums::E10\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum without specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3499:6: error: \'Enums::E11\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3509:13: error: \'Enums::E12\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type \'int\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3519:6: error: \'Enums::E13\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is not scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3529:13: error: \'Enums::E14\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3539:13: error: \'Enums::E15\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword struct","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3549:12: error: \'Enums::E16\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword class"}
		}
	},
	["err_module_odr_violation_field"]={
		[c]={{nil,q,"err_module_odr_violation_field"}},
		[d]="%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initializer|field %4 with an initializer}3",
		[g]={{nil,nil,{P,{J,F},Q,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{gc,"an"}," initializer"},"field E with an initializer"}}},{p,q,{P,{J,F},Q,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{gc,"an"}," initalizer"},"field E with an initializer"}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:field (.*?)|field (.*?) with type (.*?)|(?:non\\-|)bitfield (.*?)|bitfield (.*?) with one width expression|(?:non\\-|)mutable field (.*?)|field (.*?) with (?:no|an) initializer|field (.*?) with an initializer)",
		[b]=a,
		[f]={{nil,p,w},{q,q,R}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,160,"bool ODRDiagsEmitter::diagnoseSubMismatchField(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const FieldDecl *FirstField, const FieldDecl *SecondField) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstField, FirstModule, this](ODRFieldDifference DiffType) { return Diag(FirstField->getLocation(), diag::err_module_odr_violation_field) << FirstRecord << FirstModule.empty() << FirstModule << FirstField->getSourceRange() << DiffType; };"}},
		[l]={
			["clang/test/Modules/odr_hash-gnu.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/first.h:40:17: error: \'Types::TypeOfExpr::Invalid1\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found field \'x\' with type \'typeof (1 + 2)\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/first.h:81:15: error: \'Types::TypeOf::Invalid2\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found field \'x\' with type \'typeof(int)\' (aka \'int\')"}
		}
	},
	["err_module_odr_violation_function"]={
		[c]={{nil,r,"err_module_odr_violation_function"}},
		[d]={{nil,r,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3"}},
		[g]={{nil,r,{"A has different definitions in different modules; ",{J,F}," first difference is ",{"return type is E","E parameter with name F",{"E parameter with type F",{a," decayed from H"}},{"E parameter with",{"out",a}," a default argument"},"E parameter with a default argument","function body"}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?:return type is (.*?)|(.*?) parameter with name (.*?)|(.*?) parameter with type (.*?)(?:| decayed from (.*?))|(.*?) parameter with(?:out|) a default argument|(.*?) parameter with a default argument|function body)",
		[b]=a,
		[f]={{nil,p,w},{q,r,R}},
		[e]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions.","[ODRHash] Support ODR violation detection in functions.\n\nExtend the hashing to functions, which allows detection of function definition\nmismatches across modules.\n\nllvm-svn: 320230"},
		[j]={{L,1677,"bool ODRDiagsEmitter::diagnoseMismatch(const FunctionDecl *FirstFunction, const FunctionDecl *SecondFunction) const {\n  // ...\n  auto DiagError = [FirstFunction, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRFunctionDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_function) << FirstFunction << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
		[l]={
			["clang/test/Modules/odr_hash.cl"]={"build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/second.h:50:6: error: \'invalid1\' has different definitions in different modules; definition in module \'SecondModule\' first difference is function body","build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/second.h:53:6: error: \'invalid2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is function body"}
		}
	},
	["err_module_odr_violation_method_params"]={
		[c]={{nil,p,"err_module_odr_violation_method_params"}},
		[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7}3"}},
		[g]={{nil,p,{P,{J,F},Q,{{{B,z,A}," that has G parameterG"},{{B,z,A}," with G parameter of type H",{a," decayed from J"}},{{B,z,A}," with G parameter named H"}}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:method (.*?)|constructor|destructor) that has (.*?) parameter(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) parameter of type (.*?)(?:| decayed from (.*?))|(?:method (.*?)|constructor|destructor) with (.*?) parameter named (.*?))",
		[b]=a,
		[f]={{nil,p,w}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,83,"template <typename MethodT> static bool diagnoseSubMismatchMethodParameters(DiagnosticsEngine &Diags, const NamedDecl *FirstContainer, StringRef FirstModule, StringRef SecondModule, const MethodT *FirstMethod, const MethodT *SecondMethod) {\n  // ...\n  auto DiagError = [&Diags, &GetDiagMethodType, FirstContainer, FirstModule, FirstMethod](ODRMethodParametersDifference DiffType) {\n    // ...\n    return Diags.Report(FirstMethod->getLocation(), diag::err_module_odr_violation_method_params) << FirstContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType << FirstMethodType << FirstName;"}},
		[l]={
			[Rb]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:552:8: error: \'Method::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:568:8: error: \'Method::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'float\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:583:8: error: \'Method::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter named \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:625:8: error: \'Method::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'int *\' decayed from \'int[3]\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:902:3: error: \'Constructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3915:12: error: \'Types::PackExpansion::Invalid::L2::L3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'run\' with 1st parameter of type \'A...\'"}
		}
	},
	["err_module_odr_violation_mismatch_decl"]={
		[c]={{nil,s,"err_module_odr_violation_mismatch_decl"}},
		[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property}3"},{q,o,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}3"},{r,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration}3"}},
		[g]={{nil,p,{P,{J,F},Q,{"end of class","public access specifier","private access specifier","protected access specifier",Qb,Vb,ub,rb,kb,Yb,Xb,"function template",ub,"instance variable","property"}}},{q,o,{P,{J,F},Q,{"end of class","public access specifier","private access specifier","protected access specifier",Qb,Vb,ub,rb,kb,Yb,Xb,"function template"}}},{r,s,{P,{J,F},Q,{"end of class","public access specifier","private access specifier","protected access specifier",Qb,Vb,ub,rb,kb,Yb,Xb}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property)",
		[b]=a,
		[f]={{nil,p,w},{q,s,R}},
		[e]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules.","Add better ODR checking for modules.\n\nWhen objects are imported for modules, there is a chance that a name collision\nwill cause an ODR violation.  Previously, only a small number of such\nviolations were detected.  This patch provides a stronger check based on\nAST nodes.\n\nThe information needed to uniquely identify an object is taked from the AST and\nput into a one-dimensional byte stream.  This stream is then hashed to give\na value to represent the object, which is stored with the other object data\nin the module.\n\nWhen modules are loaded, and Decl\'s are merged, the hash values of the two\nDecl\'s are compared.  Only Decl\'s with matched hash values will be merged.\nMismatch hashes will generate a module error, and if possible, point to the\nfirst difference between the two objects.\n\nThe transform from AST to byte stream is a modified depth first algorithm.\nDue to references between some AST nodes, a pure depth first algorithm could\ngenerate loops.  For Stmt nodes, a straight depth first processing occurs.\nFor Type and Decl nodes, they are replaced with an index number and only on\nfirst visit will these nodes be processed.  As an optimization, boolean\nvalues are saved and stored together in reverse order at the end of the\nbyte stream to lower the ammount of data that needs to be hashed.\n\nCompile time impact was measured at 1.5-2.0% during module building, and\nnegligible during builds without module building.\n\nDifferential Revision: https://reviews.llvm.org/D21675\n\nllvm-svn: 293585"},
		[j]={{L,694,"void ODRDiagsEmitter::diagnoseSubMismatchDifferentDeclKinds(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  // ...\n  Diag(FirstDiagInfo.first, diag::err_module_odr_violation_mismatch_decl) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiagInfo.second << DR.FirstDiffType;"}},
		[l]={
			["clang/test/Modules/odr_hash-blocks.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-blocks.cpp.tmp/Inputs/second.h:100:3: error: \'Blocks::Invalid1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found private access specifier"}
		}
	},
	["err_module_odr_violation_mismatch_decl_unknown"]={
		[c]={{nil,s,"err_module_odr_violation_mismatch_decl_unknown"}},
		[d]={{nil,p,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl}3"},{q,q,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|unexpected decl}3"},{K,s,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3"}},
		[g]={{nil,p,{"A ",{"with definition in module \'C\'",F}," has different definitions in different modules; first difference is this ",{a,a,a,a,Qb,Vb,ub,rb,kb,Yb,Xb,"function template",ub,"instance variable","property","unexpected decl"}}},{q,q,{"A ",{"with definition in module \'C\'",F}," has different definitions in different modules; first difference is this ",{a,a,a,a,Qb,Vb,ub,rb,kb,Yb,Xb,"function template","unexpected decl"}}},{K,s,{"A ",{"with definition in module \'C\'",F}," has different definitions in different modules; first difference is this ",{a,a,a,a,Qb,Vb,ub,rb,kb,Yb,Xb,"unexpected decl"}}}},
		[h]=k,
		[i]="(.*?) (?:with definition in module \'(.*?)\'|defined here) has different definitions in different modules; first difference is this (?:||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl)",
		[b]=a,
		[f]={{nil,p,w},{q,s,R}},
		[e]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error.","[ODRHash] Change the fall-back diagnostic error.\n\nProvide a little more information when a ODR violation is detected, but the\nspecific error could not be diagnosed.\n\nllvm-svn: 304956"},
		[j]={{L,1549,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{L,1645,"bool ODRDiagsEmitter::diagnoseMismatch(const RecordDecl *FirstRecord, const RecordDecl *SecondRecord) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{L,2098,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstID << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{L,2204,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCProtocolDecl *FirstProtocol, const ObjCProtocolDecl *SecondProtocol, const struct ObjCProtocolDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstProtocol << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"}}
	},
	["err_module_odr_violation_missing_decl"]={
		[c]="err_module_odr_violation_missing_decl",
		[d]="%q0 from module \'%1\' is not present in definition of %q2%select{ in module \'%4\'| provided earlier}3",
		[g]={{nil,nil,{"A from module \'B\' is not present in definition of C",{" in module \'E\'"," provided earlier"}}}},
		[h]=k,
		[i]="(.*?) from module \'(.*?)\' is not present in definition of (.*?)(?: in module \'(.*?)\'| provided earlier)",
		[b]=a,
		[f]=R,
		[e]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:","Basic ODR checking for C++ modules:\n\nIf we have multiple definitions of the same entity from different modules, we\nnominate the first definition which we see as being the canonical definition.\nIf we load a declaration from a different definition and we can\'t find a\ncorresponding declaration in the canonical definition, issue a diagnostic.\n\nThis is insufficient to prevent things from going horribly wrong in all cases\n-- we might be in the middle of emitting IR for a function when we trigger some\ndeserialization and discover that it refers to an incoherent piece of the AST,\nby which point it\'s probably too late to bail out -- but we\'ll at least produce\na diagnostic.\n\nllvm-svn: 192950"},
		[j]={{ob,9745,"void ASTReader::diagnoseOdrViolations() {\n  // ...\n  // For each declaration from a merged context, check that the canonical\n  // definition of that context also contains a declaration of the same\n  // entity.\n  //\n  // Caution: this loop does things that might invalidate iterators into\n  // PendingOdrMergeChecks. Don\'t turn this into a range-based for loop!\n  while (!PendingOdrMergeChecks.empty()) {\n    // ...\n    if (!Found) {\n      // ...\n      Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl) << D << ODRDiagsEmitter::getOwningModuleNameForDiagnostic(D) << CanonDef << CanonDefModule.empty() << CanonDefModule;"}},
		[l]={
			["clang/test/Modules/odr.cpp"]={"clang/test/Modules/Inputs/odr/a.h:8:7: error: \'X::n\' from module \'a\' is not present in definition of \'X\' provided earlier","clang/test/Modules/Inputs/odr/b.h:2:7: error: \'Y::m\' from module \'b\' is not present in definition of \'Y\' in module \'a\'","clang/test/Modules/Inputs/odr/b.h:5:10: error: \'e2\' from module \'b\' is not present in definition of \'E\' in module \'a\'","clang/test/Modules/Inputs/odr/b.h:3:10: error: \'Y::f\' from module \'b\' is not present in definition of \'Y\' in module \'a\'"}
		}
	},
	["err_module_odr_violation_objc_interface"]={
		[c]={{nil,p,"err_module_odr_violation_objc_interface"}},
		[d]={{nil,p,"%0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{no super class|super class with type %5}4|instance variable \'%4\' access control is %select{|@private|@protected|@public|@package}5}3"}},
		[g]={{nil,p,{P,{J,F},Q,{{{"no super class","super class with type F"}},{"instance variable \'E\' access control is ",{a,"@private","@protected","@public","@package"}}}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
		[b]=a,
		[f]={{nil,p,w}},
		[e]={"f27afedc6c86",1662843785,"[Clang] Implement P2738R1 - constexpr cast from void*","[Clang] Implement P2738R1 - constexpr cast from void*\n\nReviewed By: #clang-language-wg, erichkeane\n\nDifferential Revision: https://reviews.llvm.org/D153702"},
		[j]={{L,1942,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstID, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRInterfaceDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_interface) << FirstID << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
		[l]={
			["clang/test/Modules/method_pool.m"]={"clang/test/Modules/Inputs/MethodPoolB.h:10:12: error: \'B\' has different definitions in different modules; first difference is definition in module \'MethodPoolB\' found no super class"}
		}
	},
	["err_module_odr_violation_objc_method"]={
		[c]={{nil,p,"err_module_odr_violation_objc_method"}},
		[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{method %4 with return type %5|%select{class|instance}5 method %4|%select{no|\'required\'|\'optional\'}4 method control|method %4 with %select{no designated initializer|designated initializer}5|%select{regular|direct}5 method %4|method %4}3"}},
		[g]={{nil,p,{P,{J,F},Q,{"method E with return type F",{{db,"instance"}," method E"},{{gc,"\'required\'","\'optional\'"}," method control"},{"method E with ",{"no designated initializer","designated initializer"}},{{"regular","direct"}," method E"},"method E"}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:method (.*?) with return type (.*?)|(?:class|instance) method (.*?)|(?:no|\'required\'|\'optional\') method control|method (.*?) with (?:no designated initializer|designated initializer)|(?:regular|direct) method (.*?)|method (.*?))",
		[b]=a,
		[f]={{nil,p,w}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,437,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCMethodDecl *FirstMethod, const ObjCMethodDecl *SecondMethod) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstMethod, this](ODRMethodDifference DiffType) { return Diag(FirstMethod->getLocation(), diag::err_module_odr_violation_objc_method) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType; };"}}
	},
	["err_module_odr_violation_objc_property"]={
		[c]={{nil,p,"err_module_odr_violation_objc_property"}},
		[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{property %4|property %4 with type %5|%select{no|\'required\'|\'optional\'}4 property control|property %4 with %select{default |}6\'%select{none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct}5\' attribute}3"}},
		[g]={{nil,p,{P,{J,F},Q,{"property E","property E with type F",{{gc,"\'required\'","\'optional\'"}," property control"},{"property E with ",{"default ",a},"\'",{"none","readonly","getter","assign","readwrite","retain","copy","nonatomic","setter","atomic","weak","strong","unsafe_unretained","nullability","null_resettable",db,"direct"},"\' attribute"}}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:property (.*?)|property (.*?) with type (.*?)|(?:no|\'required\'|\'optional\') property control|property (.*?) with (?:default |)\'(?:none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct)\' attribute)",
		[b]=a,
		[f]={{nil,p,w}},
		[e]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.","[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.\n\nDifferential Revision: https://reviews.llvm.org/D130326"},
		[j]={{L,516,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCProperty(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCPropertyDecl *FirstProp, const ObjCPropertyDecl *SecondProp) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstProp, this](SourceLocation Loc, ODRPropertyDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_property) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstProp->getSourceRange() << DiffType; };"}}
	},
	["err_module_odr_violation_record"]={
		[c]={{nil,q,"err_module_odr_violation_record"}},
		[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"},{q,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"}},
		[g]={{nil,p,{P,{J,F},Q,{"static assert with condition","static assert with message",{"static assert with ",{a,lb},"message"},{{B,z,A}},{{B,z,A},W,{"not deleted","deleted"}},{{B,z,A},W,{"not defaulted","defaulted"}},{{B,z,A},W,{a,"pure "},{"not virtual","virtual"}},{{B,z,A},W,{"not static","static"}},{{B,z,A},W,{"not volatile","volatile"}},{{B,z,A},W,{"not const","const"}},{{B,z,A},W,{"not inline","inline"}},{{B,z,A}," with G parameter with",{"out",a}," a default argument"},{{B,z,A}," with G parameter with a default argument"},{{B,z,A}," with ",{lb,a},"template arguments"},{{B,z,A}," with G template argumentG"},{{B,z,A}," with G for H template argument"},{{B,z,A}," with ",{"no body","body"}},{{B,z,A}," with body"},{"friend ",{db,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{lb,a},Ob},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}},{q,q,{P,{J,F},Q,{"static assert with condition","static assert with message",{"static assert with ",{a,lb},"message"},{{B,z,A}},{{B,z,A},W,{"not deleted","deleted"}},{{B,z,A},W,{"not defaulted","defaulted"}},{{B,z,A},W,{a,"pure "},{"not virtual","virtual"}},{{B,z,A},W,{"not static","static"}},{{B,z,A},W,{"not volatile","volatile"}},{{B,z,A},W,{"not const","const"}},{{B,z,A},W,{"not inline","inline"}},{{B,z,A}," that has G parameterG"},{{B,z,A}," with G parameter of type H",{a," decayed from J"}},{{B,z,A}," with G parameter named H"},{{B,z,A}," with G parameter with",{"out",a}," a default argument"},{{B,z,A}," with G parameter with a default argument"},{{B,z,A}," with ",{lb,a},"template arguments"},{{B,z,A}," with G template argumentG"},{{B,z,A}," with G for H template argument"},{{B,z,A}," with ",{"no body","body"}},{{B,z,A}," with body"},{"friend ",{db,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{lb,a},Ob},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:static assert with condition|static assert with message|static assert with (?:|no )message|(?:method (.*?)|constructor|destructor)|(?:method (.*?)|constructor|destructor) is (?:not deleted|deleted)|(?:method (.*?)|constructor|destructor) is (?:not defaulted|defaulted)|(?:method (.*?)|constructor|destructor) is (?:|pure )(?:not virtual|virtual)|(?:method (.*?)|constructor|destructor) is (?:not static|static)|(?:method (.*?)|constructor|destructor) is (?:not volatile|volatile)|(?:method (.*?)|constructor|destructor) is (?:not const|const)|(?:method (.*?)|constructor|destructor) is (?:not inline|inline)|(?:method (.*?)|constructor|destructor) with (.*?) parameter with(?:out|) a default argument|(?:method (.*?)|constructor|destructor) with (.*?) parameter with a default argument|(?:method (.*?)|constructor|destructor) with (?:no |)template arguments|(?:method (.*?)|constructor|destructor) with (.*?) template argument(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) for (.*?) template argument|(?:method (.*?)|constructor|destructor) with (?:no body|body)|(?:method (.*?)|constructor|destructor) with body|friend (?:class|function)|friend (.*?)|friend function (.*?)|function template (.*?) with (.*?) template parameter(.*?)|function template (.*?) with (.*?) template parameter being a (?:type|non\\-type|template) template parameter|function template (.*?) with (.*?) template parameter (?:with no name|named (.*?))|function template (.*?) with (.*?) template parameter with (?:no |)default argument|function template (.*?) with (.*?) template parameter with default argument (.*?)|function template (.*?) with (.*?) template parameter with one type|function template (.*?) with (.*?) template parameter (?:not |)being a template parameter pack|)",
		[b]=a,
		[f]={{nil,p,w},{q,q,R}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,960,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRCXXRecordDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_record) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
		[l]={
			[Rb]={
				[1]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:107:25: error: \'StaticAssert::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with message",
				[2]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:121:3: error: \'StaticAssert::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with no message",
				[3]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:135:17: error: \'StaticAssert::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with condition",
				[4]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:442:8: error: \'Method::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'B\'",
				[5]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:458:8: error: \'Method::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not static",
				[6]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:474:8: error: \'Method::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not virtual",
				[7]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:490:16: error: \'Method::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is virtual",
				[8]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:505:8: error: \'Method::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not inline",
				[9]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:520:8: error: \'Method::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not volatile",
				[10]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:536:8: error: \'Method::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not const",
				[11]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:597:8: error: \'Method::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter without a default argument",
				[12]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:611:8: error: \'Method::S13\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter with a default argument",
				[13]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:697:7: error: \'MethodBody::S2\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'BothBodies\' with body",
				[14]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:711:7: error: \'MethodBody::S3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstBody\' with body",
				[15]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:725:7: error: \'MethodBody::S4\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'SecondBody\' with no body",
				[16]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:743:7: error: \'MethodBody::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'FirstBodySecondOutOfLine\' with no body",
				[17]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:754:7: error: \'MethodBody::S6\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstOutOfLineSecondBody\' with no body",
				[18]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:789:7: error: \'MethodBody::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'FirstBodySecondOutOfLine\' with no body",
				[19]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:800:7: error: \'MethodBody::S9\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstOutOfLineSecondBody\' with no body",
				[20]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:816:3: error: \'MethodBody::S10\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found constructor is deleted",
				[21]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:831:3: error: \'MethodBody::S11\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found constructor is defaulted",
				[22]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:886:8: error: \'Constructor::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'foo\'",
				[23]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:945:3: error: \'Destructor::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor",
				[24]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:961:3: error: \'Destructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found destructor is not virtual",
				[25]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1861:8: error: \'TemplateArgument::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with no template arguments",
				[26]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1881:19: error: \'TemplateArgument::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with 2 template arguments",
				[27]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1899:19: error: \'TemplateArgument::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with \'b\' for 1st template argument",
				[28]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1917:19: error: \'TemplateArgument::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with \'b\' for 2nd template argument",
				[29]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1935:19: error: \'TemplateArgument::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with 3 template arguments",
				[30]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1951:20: error: \'TemplateArgument::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 2 for 1st template argument",
				[31]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1981:20: error: \'TemplateArgument::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 0 for 1st template argument",
				[32]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2027:20: error: \'TemplateArgument::S17\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with nullptr for 1st template argument",
				[33]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2077:20: error: \'TemplateArgument::S20\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 18446744073709551615 for 1st template argument",
				[34]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2399:3: error: \'Friend::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend \'T1\'",
				[35]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2415:3: error: \'Friend::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend \'struct T2\'",
				[36]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2430:3: error: \'Friend::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend function",
				[37]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2444:3: error: \'Friend::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend function \'T5b\'",
				[38]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2990:25: error: \'FunctionTemplate::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter named \'y\'",
				[39]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3033:30: error: \'FunctionTemplate::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument",
				[40]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3047:36: error: \'FunctionTemplate::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'int\'",
				[41]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3065:46: error: \'FunctionTemplate::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'T8\'",
				[42]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3081:41: error: \'FunctionTemplate::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument",
				[43]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3096:46: error: \'FunctionTemplate::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with one type",
				[44]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3111:39: error: \'FunctionTemplate::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no name",
				[45]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3126:32: error: \'FunctionTemplate::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 2 template parameters",
				[46]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3141:32: error: \'FunctionTemplate::S13\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'void\'",
				[47]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3155:25: error: \'FunctionTemplate::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument",
				[48]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3169:32: error: \'FunctionTemplate::S15\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument",
				[49]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3183:29: error: \'FunctionTemplate::S16\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument",
				[50]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3197:33: error: \'FunctionTemplate::S17\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument 1 + 1",
				[51]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3212:23: error: \'FunctionTemplate::S18\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with one type",
				[52]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3228:28: error: \'FunctionTemplate::S19\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template parameter pack",
				[53]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3244:28: error: \'FunctionTemplate::S20\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template parameter pack",
				[54]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3260:41: error: \'FunctionTemplate::S21\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter not being a template parameter pack",
				[55]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3277:25: error: \'FunctionTemplate::S22\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a type template parameter",
				[56]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3295:23: error: \'FunctionTemplate::S23\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a non-type template parameter",
				[57]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3313:41: error: \'FunctionTemplate::S24\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template template parameter",
				[58]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:4633:10: error: \'DefaultArguments::S::R\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'foo\' with 1st parameter with a default argument",
				[59]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:4652:8: error: \'DefaultArguments::Bravo\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'charlie\' with 1st parameter with a default argument"
			}
		}
	},
	["err_module_odr_violation_referenced_protocols"]={
		[c]={{nil,p,"err_module_odr_violation_referenced_protocols"}},
		[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 referenced %plural{1:protocol|:protocols}4|%ordinal4 referenced protocol with name %5}3"}},
		[g]={{nil,p,{P,{J,F},Q,{{"E referenced ",{"protocol","protocols"}},"E referenced protocol with name F"}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with name (.*?))",
		[b]=a,
		[f]={{nil,p,w}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,375,"bool ODRDiagsEmitter::diagnoseSubMismatchProtocols(const ObjCProtocolList &FirstProtocols, const ObjCContainerDecl *FirstContainer, StringRef FirstModule, const ObjCProtocolList &SecondProtocols, const ObjCContainerDecl *SecondContainer, StringRef SecondModule) const {\n  // ...\n  auto DiagRefProtocolError = [FirstContainer, FirstModule, this](SourceLocation Loc, SourceRange Range, ODRReferencedProtocolDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_referenced_protocols) << FirstContainer << FirstModule.empty() << FirstModule << Range << DiffType; };"}}
	},
	["err_module_odr_violation_template_parameter"]={
		[c]={{nil,r,"err_module_odr_violation_template_parameter"}},
		[d]={{nil,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %5|template parameter with %select{no |}4default argument|template parameter with default argument}3"},{K,r,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3"}},
		[g]={{nil,q,{P,{J,F},Q,{"unnamed template parameter","template parameter F",{"template parameter with ",{lb,a},Ob},"template parameter with default argument"}}},{K,r,{P,{J,F},Q,{"unnamed template parameter","template parameter E",{"template parameter with ",{lb,a},Ob},"template parameter with default argument"}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:unnamed template parameter|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with default argument)",
		[b]=a,
		[f]={{nil,p,w},{q,r,R}},
		[e]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters.","[ODRHash] Diagnose differing template parameters.\n\nllvm-svn: 311519"},
		[j]={{L,880,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  if (FirstTemplate && SecondTemplate) {\n    // ...\n    for (auto Pair : llvm::zip(FirstTemplateParams, SecondTemplateParams)) {\n      // ...\n      Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_template_parameter) << FirstRecord << FirstModule.empty() << FirstModule << FirstDecl->getSourceRange() << ErrDiffType << hasFirstArg << FirstName;"}},
		[l]={
			[Rb]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2490:17: error: \'TemplateParameters::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter \'B\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2502:17: error: \'TemplateParameters::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2514:17: error: \'TemplateParameters::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with no default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2526:15: error: \'TemplateParameters::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2540:31: error: \'TemplateParameters::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2552:16: error: \'TemplateParameters::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found unnamed template parameter","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2564:15: error: \'TemplateParameters::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2577:16: error: \'TemplateParameters::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument"}
		}
	},
	["err_module_odr_violation_typedef"]={
		[c]={{nil,q,"err_module_odr_violation_typedef"}},
		[d]={{nil,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6}3"}},
		[g]={{nil,q,{P,{J,F},Q,{{{kb,rb}," name F"},{{kb,rb}," F with underlying type G"}}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with underlying type (.*?))",
		[b]=a,
		[f]={{nil,p,w},{q,q,R}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,258,"bool ODRDiagsEmitter::diagnoseSubMismatchTypedef(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const TypedefNameDecl *FirstTD, const TypedefNameDecl *SecondTD, bool IsTypeAlias) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstTD, FirstModule, this](ODRTypedefDifference DiffType) { return Diag(FirstTD->getLocation(), diag::err_module_odr_violation_typedef) << FirstRecord << FirstModule.empty() << FirstModule << FirstTD->getSourceRange() << DiffType; };"}},
		[l]={
			["clang/test/Modules/odr_hash.mm"]={"build/tools/clang/test/Modules/Output/odr_hash.mm.tmp/Inputs/second.h:207:9: error: \'Types::ObjCObject::Invalid3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found type alias \'T\' with underlying type \'Interface2<P1>\'"}
		}
	},
	["err_module_odr_violation_variable"]={
		[c]={{nil,q,"err_module_odr_violation_variable"}},
		[d]={{nil,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5}3"}},
		[g]={{nil,q,{P,{J,F},Q,{"data member with name E","data member E with type F",{"data member E with",{"out",a}," an initializer"},"data member E with an initializer",{"data member E ",{"is constexpr","is not constexpr"}}}}}},
		[h]=k,
		[i]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:data member with name (.*?)|data member (.*?) with type (.*?)|data member (.*?) with(?:out|) an initializer|data member (.*?) with an initializer|data member (.*?) (?:is constexpr|is not constexpr))",
		[b]=a,
		[f]={{nil,p,w},{q,q,R}},
		[e]={Gb,1643408541,Ib,Fb},
		[j]={{L,302,"bool ODRDiagsEmitter::diagnoseSubMismatchVar(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const VarDecl *FirstVD, const VarDecl *SecondVD) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstVD, FirstModule, this](ODRVarDifference DiffType) { return Diag(FirstVD->getLocation(), diag::err_module_odr_violation_variable) << FirstRecord << FirstModule.empty() << FirstModule << FirstVD->getSourceRange() << DiffType; };"}},
		[l]={
			[Rb]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2235:14: error: \'VarDecl::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member with name \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2251:12: error: \'VarDecl::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with type \'I\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2265:20: error: \'VarDecl::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2279:20: error: \'VarDecl::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2293:24: error: \'VarDecl::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' is not constexpr"}
		}
	},
	["err_module_prebuilt"]={
		[c]="err_module_prebuilt",
		[d]="error in loading module \'%0\' from prebuilt module path",
		[g]="error in loading module \'A\' from prebuilt module path",
		[h]=M,
		[i]="error in loading module \'(.*?)\' from prebuilt module path",
		[b]=a,
		[f]=D,
		[e]={"11f2a477721c",1471542135,"Module: add -fprebuilt-module-path to support loading prebuilt modules.","Module: add -fprebuilt-module-path to support loading prebuilt modules.\n\nIn this mode, there is no need to load any module map and the programmer can\nsimply use \"@import\" syntax to load the module directly from a prebuilt\nmodule path. When loading from prebuilt module path, we don\'t support\nrebuilding of the module files and we ignore compatible configuration\nmismatches.\n\nrdar://27290316\nDifferential Revision: http://reviews.llvm.org/D23125\n\nllvm-svn: 279096"},
		[j]={{fb,1880,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  case ASTReader::Success: {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_prebuilt) << ModuleName;"}}
	},
	["err_module_private_local"]={
		[c]="err_module_private_local",
		[d]="%select{local variable|parameter|typedef}0 %1 cannot be declared __module_private__",
		[g]={{nil,nil,{{"local variable","parameter",kb}," B cannot be declared __module_private__"}}},
		[h]=k,
		[i]="(?:local variable|parameter|typedef) (.*?) cannot be declared __module_private__",
		[b]=a,
		[f]=H,
		[e]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
		[j]={{n,7846,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n    // ...\n    else if (NewVD->hasLocalStorage())\n      Diag(NewVD->getLocation(), diag::err_module_private_local) << 0 << NewVD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{n,14816,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified())\n    Diag(New->getLocation(), diag::err_module_private_local) << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{n,16431,"TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, TypeSourceInfo *TInfo) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (CurContext->isFunctionOrMethod())\n      Diag(NewTD->getLocation(), diag::err_module_private_local) << 2 << NewTD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"}},
		[l]={
			["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:79:47: error: parameter \'param\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:80:49: error: local variable \'local\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:82:27: error: local variable \'[x, y]\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:86:34: error: typedef \'local_typedef\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:89:42: error: parameter \'\' cannot be declared __module_private__"}
		}
	},
	["err_module_private_local_class"]={
		[c]="err_module_private_local_class",
		[d]="local %select{struct|interface|union|class|enum}0 cannot be declared __module_private__",
		[g]={{nil,nil,{"local ",{"struct","interface","union",db,"enum"}," cannot be declared __module_private__"}}},
		[h]=k,
		[i]="local (?:struct|interface|union|class|enum) cannot be declared __module_private__",
		[b]=a,
		[f]=H,
		[e]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
		[j]={{n,5247,"/// 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  if (DS.isModulePrivateSpecified() && Tag && Tag->getDeclContext()->isFunctionOrMethod())\n    Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class) << Tag->getTagKind() << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());"}},
		[l]={
			["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:84:3: error: local struct cannot be declared __module_private__"}
		}
	},
	["err_module_private_specialization"]={
		[c]="err_module_private_specialization",
		[d]="%select{template|partial|member}0 specialization cannot be declared __module_private__",
		[g]={{nil,nil,{{"template","partial","member"}," specialization cannot be declared __module_private__"}}},
		[h]=k,
		[i]="(?:template|partial|member) specialization cannot be declared __module_private__",
		[b]=a,
		[f]=H,
		[e]={"3c7cd6a0c448",1315601618,"Specializations cannot be module-hidden. Diagnose attempts to do so.","Specializations cannot be module-hidden. Diagnose attempts to do so.\n\nllvm-svn: 139406"},
		[j]={{n,7837,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << (IsPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{n,7842,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{n,9989,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // If __module_private__ was specified, mark the function accordingly.\n    if (D.getDeclSpec().isModulePrivateSpecified()) {\n      if (isFunctionTemplateSpecialization) {\n        // ...\n        Diag(ModulePrivateLoc, diag::err_module_private_specialization) << 0 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{n,17605,"CreateNewDecl:\n  // ...\n  if (ModulePrivateLoc.isValid()) {\n    if (isMemberSpecialization)\n      Diag(New->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{O,8921,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (ModulePrivateLoc.isValid())\n    Diag(Specialization->getLocation(), diag::err_module_private_specialization) << (isPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(ModulePrivateLoc);"}},
		[l]={
			["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:56:12: error: template specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:67:57: error: member specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:68:54: error: member specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:71:27: error: template specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:74:27: error: partial specialization cannot be declared __module_private__"}
		}
	},
	["err_module_rebuild_finalized"]={
		[c]={{nil,t,"err_module_rebuild_finalized"}},
		[d]={{nil,t,"cannot rebuild module \'%0\' as it is already finalized"}},
		[g]={{nil,t,"cannot rebuild module \'A\' as it is already finalized"}},
		[h]=M,
		[i]="cannot rebuild module \'(.*?)\' as it is already finalized",
		[b]=a,
		[f]={{nil,t,D}},
		[e]={"ff13189c5d0d",1624436334,"[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.","[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.\n\nHow many place you need to modify when implementing a new extension for RISC-V?\n\nAt least 7 places as I know:\n\n- Add new SubtargetFeature at RISCV.td\n- -march parser in RISCV.cpp\n- RISCVTargetInfo::initFeatureMap@RISCV.cpp for handling feature vector.\n- RISCVTargetInfo::getTargetDefines@RISCV.cpp for pre-define marco.\n- Arch string parser for ELF attribute in RISCVAsmParser.cpp\n- ELF attribute emittion in RISCVAsmParser.cpp, and make sure it\'s in\n  canonical order...\n- ELF attribute emittion in RISCVTargetStreamer.cpp, and again, must in\n  canonical order...\n\nAnd now, this patch provide an unified infrastructure for handling (almost)\neverything of RISC-V arch string.\n\nAfter this patch, you only need to update 2 places for implement an extension\nfor RISC-V:\n- Add new SubtargetFeature at RISCV.td, hmmm, it\'s hard to avoid.\n- Add new entry to RISCVSupportedExtension@RISCVISAInfo.cpp or\n  SupportedExperimentalExtensions@RISCVISAInfo.cpp .\n\nMost codes are come from existing -march parser, but with few new feature/bug\nfixes:\n- Accept version for -march, e.g. -march=rv32i2p0.\n- Reject version info with `p` but without minor version number like `rv32i2p`.\n\nDifferential Revision: https://reviews.llvm.org/D105168"},
		[j]={{fb,1162,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  // ...\n  // Never compile a module that\'s already finalized - this would cause the\n  // existing module to be freed, causing crashes if it is later referenced\n  if (ImportingInstance.getModuleCache().isPCMFinal(ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ImportLoc, diag::err_module_rebuild_finalized) << ModuleName;"}}
	},
	["err_module_redeclaration"]={
		[c]={{nil,r,"err_module_redeclaration"}},
		[d]={{nil,r,"translation unit contains multiple module declarations"}},
		[g]={{nil,r,"translation unit contains multiple module declarations"}},
		[h]=k,
		[i]="translation unit contains multiple module declarations",
		[b]=a,
		[f]={{nil,r,H}},
		[e]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
		[j]={{cb,236,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // Only one module-declaration is permitted per source file.\n  if (isCurrentModulePurview()) {\n    Diag(ModuleLoc, diag::err_module_redeclaration);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:1: error: translation unit contains multiple module declarations"}
		}
	},
	["err_module_redefinition"]={
		[c]="err_module_redefinition",
		[d]="redefinition of module \'%0\'",
		[g]="redefinition of module \'A\'",
		[h]=k,
		[i]="redefinition of module \'(.*?)\'",
		[b]=a,
		[f]=H,
		[e]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module","C++ Modules TS: add frontend support for building pcm files from module\ninterface files. At the moment, all declarations (and no macros) are exported,\nand \'export\' declarations are not supported yet.\n\nllvm-svn: 279794"},
		[j]={{cb,313,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Interface:\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      Diag(Path[0].second, diag::err_module_redefinition) << ModuleName;"}}
	},
	["err_module_self_import"]={
		[c]="err_module_self_import",
		[d]="import of module \'%0\' appears within same top-level module \'%1\'",
		[g]="import of module \'A\' appears within same top-level module \'B\'",
		[h]=k,
		[i]="import of module \'(.*?)\' appears within same top\\-level module \'(.*?)\'",
		[b]=a,
		[f]=H,
		[e]={"527040e0c87a",1399267893,"Make module self-import an error","Make module self-import an error\n\nIdeally, importing Foo.a from Foo.b would \"do the right thing\", but\nuntil it does, this patch makes it an error rather than allow it to\nsilently be ignored.\n\nllvm-svn: 207948"},
		[j]={{cb,563,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n  // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}}
	},
	["err_module_self_import_cxx20"]={
		[c]={{nil,q,"err_module_self_import_cxx20"}},
		[d]={{nil,q,"import of module \'%0\' appears within its own %select{interface|implementation}1"}},
		[g]={{nil,q,{"import of module \'A\' appears within its own ",{"interface","implementation"}}}},
		[h]=k,
		[i]="import of module \'(.*?)\' appears within its own (?:interface|implementation)",
		[b]=a,
		[f]={{nil,q,H}},
		[e]={"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"},
		[j]={{cb,525,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, ModuleIdPath Path, bool IsPartition) {\n  // ...\n  if (getLangOpts().CPlusPlusModules && isCurrentModulePurview() && getCurrentModule()->Name == ModuleName) {\n    Diag(ImportLoc, diag::err_module_self_import_cxx20) << ModuleName << !ModuleScopes.back().ModuleInterface;"}}
	},
	["err_module_shadowed"]={
		[c]={{nil,o,"err_module_shadowed"}},
		[d]={{nil,o,"import of shadowed module \'%0\'"}},
		[g]={{nil,o,"import of shadowed module \'A\'"}},
		[h]=M,
		[i]="import of shadowed module \'(.*?)\'",
		[b]=a,
		[f]={{nil,o,D}},
		[e]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
		[j]={{"clang/lib/Lex/PPDirectives.cpp",1910,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n  // ...\n  } else if (ShadowingModule) {\n    Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name;"}},
		[l]={
			["clang/test/Modules/shadow.m"]={"clang/test/Modules/Inputs/shadow/A2/module.modulemap:1:8: fatal error: import of shadowed module \'A\'"}
		}
	},
	["err_module_unable_to_hash_content"]={
		[c]={{nil,v,"err_module_unable_to_hash_content"}},
		[d]={{nil,v,"failed to hash content for \'%0\' because memory buffer cannot be retrieved"}},
		[g]={{nil,v,"failed to hash content for \'A\' because memory buffer cannot be retrieved"}},
		[h]=k,
		[i]="failed to hash content for \'(.*?)\' because memory buffer cannot be retrieved",
		[b]=a,
		[f]={{nil,v,"AST Serialization Issue"}},
		[e]={"2a1386c81de5",1571094123,"[Modules][PCH] Hash input files content","[Modules][PCH] Hash input files content\n\nSummary:\nWhen files often get touched during builds, the mtime based validation\nleads to different problems in implicit modules builds, even when the\ncontent doesn\'t actually change:\n\n- Modules only: module invalidation due to out of date files. Usually causing rebuild traffic.\n- Modules + PCH: build failures because clang cannot rebuild a module if it comes from building a PCH.\n- PCH: build failures because clang cannot rebuild a PCH in case one of the input headers has different mtime.\n\nThis patch proposes hashing the content of input files (headers and\nmodule maps), which is performed during serialization time. When looking\nat input files for validation, clang only computes the hash in case\nthere\'s a mtime mismatch.\n\nI\'ve tested a couple of different hash algorithms availble in LLVM in\nface of building modules+pch for `#import <Cocoa/Cocoa.h>`:\n- `hash_code`: performace diff within the noise, total module cache increased by 0.07%.\n- `SHA1`: 5% slowdown. Haven\'t done real size measurements, but it\'d be BLOCK_ID+20 bytes per input file, instead of BLOCK_ID+8 bytes from `hash_code`.\n- `MD5`: 3% slowdown. Like above, but BLOCK_ID+16 bytes per input file.\n\nGiven the numbers above, the patch uses `hash_code`. The patch also\nimproves invalidation error msgs to point out which type of problem the\nuser is facing: \"mtime\", \"size\" or \"content\".\n\nrdar://problem/29320105\n\nReviewers: dexonsmith, arphaman, rsmith, aprantl\n\nSubscribers: jkorous, cfe-commits, ributzka\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67249\n\nllvm-svn: 374841"},
		[j]={{"clang/lib/Serialization/ASTWriter.cpp",1597,"void ASTWriter::WriteInputFiles(SourceManager &SourceMgr, HeaderSearchOptions &HSOpts) {\n  // ...\n  for (unsigned I = 1, N = SourceMgr.local_sloc_entry_size(); I != N; ++I) {\n    // ...\n    if (PP->getHeaderSearchInfo().getHeaderSearchOpts().ValidateASTInputFilesContent) {\n      // ...\n      if (MemBuff)\n      // ...\n      else\n        PP->Diag(SourceLocation(), diag::err_module_unable_to_hash_content) << Entry.File.getName();"}}
	},
	["err_module_unavailable"]={
		[c]="err_module_unavailable",
		[d]="module \'%0\' %select{is incompatible with|requires}1 feature \'%2\'",
		[g]={{nil,nil,{"module \'A\' ",{"is incompatible with","requires"}," feature \'C\'"}}},
		[h]=k,
		[i]="module \'(.*?)\' (?:is incompatible with|requires) feature \'(.*?)\'",
		[b]=a,
		[f]=D,
		[e]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
		[j]={{"clang/lib/Lex/PPDirectives.cpp",1916,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n  // ...\n  } else if (ShadowingModule) {\n  // ...\n  } else {\n    // ...\n    Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) << M->getFullModuleName() << Requirement.second << Requirement.first;"}},
		[l]={
			["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:3:10: error: module \'a.b\' requires feature \'cplusplus11\'"}
		}
	},
	["err_module_unimported_use"]={
		[c]="err_module_unimported_use",
		[d]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required",
		[g]={{nil,nil,{{bc,Sb,Ob,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
		[h]=k,
		[i]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from module \'(.*?)\' before it is required",
		[b]=a,
		[f]=H,
		[e]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
		[j]={{"clang/lib/Sema/SemaLookup.cpp",5752,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n  // ...\n  } else {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use) << (int)MIK << Decl << Modules[0]->getFullModuleName();"}},
		[l]={
			["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:10:1: error: declaration of \'remove_reference\' must be imported from module \'std.type_traits\' before it is required","clang/test/Modules/submodules.cpp:24:1: error: declaration of \'hash_map\' must be imported from module \'std.hash_map\' before it is required"}
		}
	},
	["err_module_unimported_use_header"]={
		[c]="err_module_unimported_use_header",
		[d]={{nil,C,"%select{missing \'#include\'|missing \'#include %3\'}2; %select{||default argument of |explicit specialization of |partial specialization of }0%1 must be %select{declared|defined|defined|declared|declared}0 before it is used"},{v,nil,"missing \'#include %3\'; %select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required"}},
		[g]={{nil,C,{{"missing \'#include\'","missing \'#include D\'"},"; ",{a,a,"default argument of ","explicit specialization of ","partial specialization of "},"B must be ",{"declared","defined","defined","declared","declared"}," before it is used"}},{v,nil,{"missing \'#include D\'; ",{bc,Sb,Ob,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
		[h]=k,
		[i]="(?:missing \'\\#include\'|missing \'\\#include (.*?)\'); (?:||default argument of |explicit specialization of |partial specialization of )(.*?) must be (?:declared|defined|defined|declared|declared) before it is used",
		[b]=a,
		[f]=H,
		[e]={"4eb8393c636b",1461794225,"[modules] When diagnosing a missing module import, suggest adding a #include if","[modules] When diagnosing a missing module import, suggest adding a #include if\nthe current language doesn\'t have an import syntax and we can figure out a\nsuitable file to include.\n\nllvm-svn: 267802"},
		[j]={{"clang/lib/Sema/SemaLookup.cpp",5725,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  // If we have a #include we should suggest, or if all definition locations\n  // were in global module fragments, don\'t suggest an import.\n  if (!HeaderName.empty() || UniqueModules.empty()) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_header) << (int)MIK << Decl << !HeaderName.empty() << HeaderName;"}},
		[l]={
			["clang/test/Modules/submodule-visibility-cycles.cpp"]={"clang/test/Modules/submodule-visibility-cycles.cpp:6:1: error: missing \'#include \"cycle2.h\"\'; \'C2\' must be declared before it is used"}
		}
	},
	["err_module_unimported_use_multiple"]={
		[c]="err_module_unimported_use_multiple",
		[d]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from one of the following modules before it is required:%2",
		[g]={{nil,nil,{{bc,Sb,Ob,"explicit specialization","partial specialization"}," of B must be imported from one of the following modules before it is required:C"}}},
		[h]=k,
		[i]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from one of the following modules before it is required\\:(.*?)",
		[b]=a,
		[f]=H,
		[e]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
		[j]={{"clang/lib/Sema/SemaLookup.cpp",5748,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_multiple) << (int)MIK << Decl << ModuleList;"}}
	},
	["err_modules_embed_file_not_found"]={
		[c]="err_modules_embed_file_not_found",
		[d]="file \'%0\' specified by \'-fmodules-embed-file=\' not found",
		[g]="file \'A\' specified by \'-fmodules-embed-file=\' not found",
		[h]=M,
		[i]="file \'(.*?)\' specified by \'\\-fmodules\\-embed\\-file\\=\' not found",
		[b]=a,
		[f]=w,
		[e]={"fb1e7f7d1aca",1439528578,"[modules] Add an experimental -cc1 feature to embed the contents of an input","[modules] Add an experimental -cc1 feature to embed the contents of an input\nfile in the .pcm files. This allows a smaller set of files to be sent to a\nremote build worker when building with explicit modules (for instance, module\nmap files need not be sent along with the corresponding precompiled modules).\n\nThis doesn\'t actually make the embedded files visible to header search, so\nit\'s not useful as a packaging format for public header files.\n\nllvm-svn: 245028"},
		[j]={{xb,744,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Set up embedding for any specified files. Do this before we load any\n  // source files, including the primary module map for the compilation.\n  for (const auto &F : CI.getFrontendOpts().ModulesEmbedFiles) {\n    if (auto FE = CI.getFileManager().getFile(F, /*openFile*/ true))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_modules_embed_file_not_found) << F;"}}
	},
	["err_ms___leave_not_in___try"]={
		[c]="err_ms___leave_not_in___try",
		[d]="\'__leave\' statement not in __try block",
		[g]="\'__leave\' statement not in __try block",
		[h]=k,
		[i]="\'__leave\' statement not in __try block",
		[b]=a,
		[f]=m,
		[e]={"eb61d4d7c2fd",1404687199,"Sema: Check that __leave is contained in a __try block.","Sema: Check that __leave is contained in a __try block.\n\nGive scope a SEHTryScope bit, set that in ParseSEHTry(), and let Sema\nwalk the scope chain to find the SEHTry parent on __leave statements.\n(They are rare enough that it seems better to do the walk instead of\ngiving Scope a SEHTryParent pointer -- this is similar to AtCatchScope.)\n\nllvm-svn: 212422"},
		[j]={{G,4647,"StmtResult Sema::ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope) {\n  // ...\n  if (!SEHTryParent)\n    return StmtError(Diag(Loc, diag::err_ms___leave_not_in___try));"}},
		[l]={
			["clang/test/SemaCXX/__try.cpp"]={"clang/test/SemaCXX/__try.cpp:86:5: error: \'__leave\' statement not in __try block"}
		}
	},
	["err_ms_asm_bitfield_unsupported"]={
		[c]={{nil,p,"err_ms_asm_bitfield_unsupported"}},
		[d]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
		[g]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
		[h]=k,
		[i]="an inline asm block cannot have an operand which is a bit\\-field",
		[b]=a,
		[f]={{nil,p,"Inline Assembly Issue"}},
		[e]={"0982db188b66",1665177226,"[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.","[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.\n\nMSVC allows bit-fields to be specified as instruction operands in inline asm\nblocks. Such references are resolved to the address of the allocation unit that\nthe named bitfield is a part of. The result is that reads and writes of such\noperands will read or mutate nearby bit-fields stored in the same allocation\nunit. This is a surprising behavior for which MSVC issues warning C4401,\n\"\'<identifier>\': member is bit field\". Intel\'s icc compiler also allows such\nbit-field references, but does not issue a diagnostic.\n\nPrior to this change, Clang fails the following assertion when a bit-field is\nreferenced in such instructions:\n  clang/lib/CodeGen/CGValue.h:338: llvm::Value* clang::CodeGen::LValue::getPointer(clang::CodeGen::CodeGenFunction&) const: Assertion `isSimple()\' failed.\nIn non-assert enabled builds, Clang\'s behavior appears to match the behavior\nof the MSVC and icc compilers, though it is unknown if that is by design or\nhappenstance.\n\nFollowing this change, attempts to use a bit-field as an instruction operand\nin Microsoft style asm blocks is diagnosed as an error due to the risk of\nunintentionally reading or writing nearby bit-fields.\n\nFixes https://github.com/llvm/llvm-project/issues/57791\n\nReviewed By: erichkeane, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D135500"},
		[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",954,"StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Token> AsmToks, StringRef AsmString, unsigned NumOutputs, unsigned NumInputs, ArrayRef<StringRef> Constraints, ArrayRef<StringRef> Clobbers, ArrayRef<Expr *> Exprs, SourceLocation EndLoc) {\n  // ...\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    // ...\n    if (E->getType()->isBitIntType()) {\n    // ...\n    } else if (E->refersToBitField()) {\n      // ...\n      Diag(E->getBeginLoc(), diag::err_ms_asm_bitfield_unsupported) << E->getSourceRange();"}},
		[l]={
			["clang/test/Parser/ms-inline-asm.c"]={"clang/test/Parser/ms-inline-asm.c:73:9: error: an inline asm block cannot have an operand which is a bit-field","clang/test/Parser/ms-inline-asm.c:72:14: error: an inline asm block cannot have an operand which is a bit-field"}
		}
	},
	["err_ms_attributes_not_enabled"]={
		[c]={{nil,s,"err_ms_attributes_not_enabled"}},
		[d]={{nil,s,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
		[g]={{nil,s,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
		[h]=k,
		[i]="\'__declspec\' attributes are not enabled; use \'\\-fdeclspec\' or \'\\-fms\\-extensions\' to enable support for __declspec attributes",
		[b]=a,
		[f]={{nil,s,D}},
		[e]={"52d0aaac139a",1487112440,"Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.","Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.\n\nFixes PR31936.\n\nllvm-svn: 295114"},
		[j]={{bb,3639,"/// ParseDeclarationSpecifiers\n///       declaration-specifiers: [C99 6.7]\n///         storage-class-specifier declaration-specifiers[opt]\n///         type-specifier declaration-specifiers[opt]\n/// [C99]   function-specifier declaration-specifiers[opt]\n/// [C11]   alignment-specifier declaration-specifiers[opt]\n/// [GNU]   attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///       storage-class-specifier: [C99 6.7.1]\n///         \'typedef\'\n///         \'extern\'\n///         \'static\'\n///         \'auto\'\n///         \'register\'\n/// [C++]   \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]   \'_Thread_local\'\n/// [GNU]   \'__thread\'\n///       function-specifier: [C99 6.7.4]\n/// [C99]   \'inline\'\n/// [C++]   \'virtual\'\n/// [C++]   \'explicit\'\n/// [OpenCL] \'__kernel\'\n///       \'friend\': [C++ dcl.friend]\n///       \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    ParseIdentifier : {\n      // ...\n      // If the token is an identifier named \"__declspec\" and Microsoft\n      // extensions are not enabled, it is likely that there will be cascading\n      // parse errors if this really is a __declspec attribute. Attempt to\n      // recognize that scenario and recover gracefully.\n      if (!getLangOpts().DeclSpecKeyword && Tok.is(tok::identifier) && Tok.getIdentifierInfo()->getName().equals(\"__declspec\")) {\n        Diag(Loc, diag::err_ms_attributes_not_enabled);"}},
		[l]={
			["clang/test/Parser/declspec-recovery.c"]={"clang/test/Parser/declspec-recovery.c:3:1: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes","clang/test/Parser/declspec-recovery.c:6:3: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}
		}
	},
	["err_ms_declspec_type"]={
		[c]="err_ms_declspec_type",
		[d]="__declspec attributes must be an identifier or string literal",
		[g]="__declspec attributes must be an identifier or string literal",
		[h]=k,
		[i]="__declspec attributes must be an identifier or string literal",
		[b]=a,
		[f]=D,
		[e]={"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"},
		[j]={{bb,787,"/// [MS] decl-specifier:\n///             __declspec ( extended-decl-modifier-seq )\n///\n/// [MS] extended-decl-modifier-seq:\n///             extended-decl-modifier[opt]\n///             extended-decl-modifier extended-decl-modifier-seq\nvoid Parser::ParseMicrosoftDeclSpecs(ParsedAttributes &Attrs) {\n  // ...\n  while (Tok.is(tok::kw___declspec)) {\n    // ...\n    // An empty declspec is perfectly legal and should not warn.  Additionally,\n    // you can specify multiple attributes per declspec.\n    while (Tok.isNot(tok::r_paren)) {\n      // ...\n      if (!IsString && Tok.getKind() != tok::identifier && Tok.getKind() != tok::kw_restrict) {\n        Diag(Tok, diag::err_ms_declspec_type);"}},
		[l]={
			["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:68:19: error: __declspec attributes must be an identifier or string literal"}
		}
	},
	["err_ms_property_duplicate_accessor"]={
		[c]="err_ms_property_duplicate_accessor",
		[d]="property declaration specifies \'%0\' accessor twice",
		[g]="property declaration specifies \'A\' accessor twice",
		[h]=k,
		[i]="property declaration specifies \'(.*?)\' accessor twice",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,708,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (Kind == AK_Invalid) {\n      // ...\n      } else if (AccessorNames[Kind] != nullptr) {\n        // ...\n        Diag(KindLoc, diag::err_ms_property_duplicate_accessor) << KindStr;"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:367:41: error: property declaration specifies \'get\' accessor twice"}
		}
	},
	["err_ms_property_expected_accessor_name"]={
		[c]="err_ms_property_expected_accessor_name",
		[d]="expected name of accessor method",
		[g]="expected name of accessor method",
		[h]=k,
		[i]="expected name of accessor method",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,700,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      // Expect the method name.\n      if (!Tok.is(tok::identifier)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_accessor_name);"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:362:27: error: expected name of accessor method"}
		}
	},
	["err_ms_property_expected_comma_or_rparen"]={
		[c]="err_ms_property_expected_comma_or_rparen",
		[d]="expected \',\' or \')\' at end of property accessor list",
		[g]="expected \',\' or \')\' at end of property accessor list",
		[h]=k,
		[i]="expected \',\' or \'\\)\' at end of property accessor list",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,723,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    next_property_accessor:\n      // ...\n      Diag(Tok.getLocation(), diag::err_ms_property_expected_comma_or_rparen);"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:364:31: error: expected \',\' or \')\' at end of property accessor list"}
		}
	},
	["err_ms_property_expected_equal"]={
		[c]="err_ms_property_expected_equal",
		[d]="expected \'=\' after \'%0\'",
		[g]="expected \'=\' after \'A\'",
		[h]=k,
		[i]="expected \'\\=\' after \'(.*?)\'",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,693,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      // Consume the \'=\'.\n      if (!TryConsumeToken(tok::equal)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_equal) << KindStr;"}},
		[l]={
			["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:36:68: error: expected \'=\' after \'message\'"}
		}
	},
	["err_ms_property_has_set_accessor"]={
		[c]="err_ms_property_has_set_accessor",
		[d]="putter for property must be specified as \'put\', not \'set\'",
		[g]="putter for property must be specified as \'put\', not \'set\'",
		[h]=k,
		[i]="putter for property must be specified as \'put\', not \'set\'",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,665,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n        Diag(KindLoc, diag::err_ms_property_has_set_accessor) << FixItHint::CreateReplacement(KindLoc, \"put\");"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:357:23: error: putter for property must be specified as \'put\', not \'set\'"}
		}
	},
	["err_ms_property_initializer"]={
		[c]="err_ms_property_initializer",
		[d]={{nil,E,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
		[g]={{nil,E,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
		[h]=k,
		[i]="property declaration cannot have a default member initializer",
		[b]=a,
		[f]=D,
		[e]={"87ff66ccc750",1418470456,"Parse: MS property members cannot have an in-class initializer","Parse: MS property members cannot have an in-class initializer\n\nWe would crash trying to treat a property member as a field.  These\nshoudl be forbidden anyway, reject programs which contain them.\n\nThis fixes PR21840.\n\nllvm-svn: 224193"},
		[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3263,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///   brace-or-equal-initializer:\n///     \'=\' initializer-expression\n///     braced-init-list\n///\n///   initializer-clause:\n///     assignment-expression\n///     braced-init-list\n///\n///   defaulted/deleted function-definition:\n///     \'=\' \'default\'\n///     \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (const auto *PD = dyn_cast_or_null<MSPropertyDecl>(D)) {\n    Diag(Tok, diag::err_ms_property_initializer) << PD;"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:368:44: error: property declaration cannot have a default member initializer"}
		}
	},
	["err_ms_property_missing_accessor_kind"]={
		[c]="err_ms_property_missing_accessor_kind",
		[d]="missing \'get=\' or \'put=\'",
		[g]="missing \'get=\' or \'put=\'",
		[h]=k,
		[i]="missing \'get\\=\' or \'put\\=\'",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,672,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n      // ...\n      } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n        Diag(KindLoc, diag::err_ms_property_missing_accessor_kind);"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:358:23: error: missing \'get=\' or \'put=\'"}
		}
	},
	["err_ms_property_no_getter_or_putter"]={
		[c]="err_ms_property_no_getter_or_putter",
		[d]="property does not specify a getter or a putter",
		[g]="property does not specify a getter or a putter",
		[h]=k,
		[i]="property does not specify a getter or a putter",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,647,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // If the user wrote a completely empty list, use a special diagnostic.\n        if (Tok.is(tok::r_paren) && !HasInvalidAccessor && AccessorNames[AK_Put] == nullptr && AccessorNames[AK_Get] == nullptr) {\n          Diag(AttrNameLoc, diag::err_ms_property_no_getter_or_putter);"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:356:14: error: property does not specify a getter or a putter"}
		}
	},
	["err_ms_property_unknown_accessor"]={
		[c]="err_ms_property_unknown_accessor",
		[d]="expected \'get\' or \'put\' in property declaration",
		[g]="expected \'get\' or \'put\' in property declaration",
		[h]=k,
		[i]="expected \'get\' or \'put\' in property declaration",
		[b]=a,
		[f]=D,
		[e]={vb,1366097310,qb,tb},
		[j]={{bb,651,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // ...\n        Diag(Tok.getLocation(), diag::err_ms_property_unknown_accessor);"},{bb,679,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n      // ...\n      } else if (KindStr == \"set\") {\n      // ...\n      } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n      // ...\n      } else {\n        Diag(KindLoc, diag::err_ms_property_unknown_accessor);"}},
		[l]={
			[sb]={"clang/test/Parser/MicrosoftExtensions.cpp:359:23: error: expected \'get\' or \'put\' in property declaration","clang/test/Parser/MicrosoftExtensions.cpp:365:32: error: expected \'get\' or \'put\' in property declaration"}
		}
	},
	["err_ms_va_start_used_in_sysv_function"]={
		[c]="err_ms_va_start_used_in_sysv_function",
		[d]="\'__builtin_ms_va_start\' used in System V ABI function",
		[g]="\'__builtin_ms_va_start\' used in System V ABI function",
		[h]=k,
		[i]="\'__builtin_ms_va_start\' used in System V ABI function",
		[b]=a,
		[f]=m,
		[e]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list.","Support __builtin_ms_va_list.\n\nSummary:\nThis change adds support for `__builtin_ms_va_list`, a GCC extension for\nvariadic `ms_abi` functions. The existing `__builtin_va_list` support is\ninadequate for this because `va_list` is defined differently in the Win64\nABI vs. the System V/AMD64 ABI.\n\nDepends on D1622.\n\nReviewers: rsmith, rnk, rjmccall\n\nCC: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D1623\n\nllvm-svn: 247941"},
		[j]={{N,8043,"/// Check that the user is calling the appropriate va_start builtin for the\n/// target and calling convention.\nstatic bool checkVAStartABI(Sema &S, unsigned BuiltinID, Expr *Fn) {\n  // ...\n  if (IsX64 || IsAArch64) {\n    // ...\n    if (IsMSVAStart) {\n      // Don\'t allow this in System V ABI functions.\n      if (CC == CC_X86_64SysV || (!IsWindows && CC != CC_Win64))\n        return S.Diag(Fn->getBeginLoc(), diag::err_ms_va_start_used_in_sysv_function);"}},
		[l]={
			["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:5:3: error: \'__builtin_ms_va_start\' used in System V ABI function"}
		}
	},
	["err_msasm_unable_to_create_target"]={
		[c]="err_msasm_unable_to_create_target",
		[d]="MS-style inline assembly is not available: %0",
		[g]="MS-style inline assembly is not available: A",
		[h]=k,
		[i]="MS\\-style inline assembly is not available\\: (.*?)",
		[b]=a,
		[f]="Inline Assembly Issue",
		[e]={"45cf31f7d390",1383143368,"Recover instead of crashing on MS assembly when no target is loaded","Recover instead of crashing on MS assembly when no target is loaded\n\nIt\'s possible to embed the frontend in applications that haven\'t initialized\nbackend targets so we need to handle this condition gracefully.\n\nllvm-svn: 193685"},
		[j]={{jc,543,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///         ms-asm-block\n///         ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///         \'__asm\' ms-asm-line \'\\n\'\n///         \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///         ms-asm-line\n///         ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!TheTriple.isX86()) {\n  // ...\n  } else {\n    // ...\n    if (!TheTarget)\n      Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << Error;"},{jc,571,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///         ms-asm-block\n///         ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///         \'__asm\' ms-asm-line \'\\n\'\n///         \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///         ms-asm-line\n///         ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!MRI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{jc,586,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///         ms-asm-block\n///         ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///         \'__asm\' ms-asm-line \'\\n\'\n///         \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///         ms-asm-line\n///         ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!MAI || !MII || !STI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{jc,611,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///         ms-asm-block\n///         ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///         \'__asm\' ms-asm-line \'\\n\'\n///         \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///         ms-asm-line\n///         ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  // Target AsmParser may not be linked in clang-based tools.\n  if (!TargetParser) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target ASM parser unavailable\";"}}
	},
	["err_msasm_unsupported_arch"]={
		[c]="err_msasm_unsupported_arch",
		[d]={{nil,t,"unsupported architecture \'%0\' for MS-style inline assembly"},{E,nil,"Unsupported architecture \'%0\' for MS-style inline assembly"}},
		[g]={{nil,t,"unsupported architecture \'A\' for MS-style inline assembly"},{E,nil,"Unsupported architecture \'A\' for MS-style inline assembly"}},
		[h]=k,
		[i]="unsupported architecture \'(.*?)\' for MS\\-style inline assembly",
		[b]=a,
		[f]="Inline Assembly Issue",
		[e]={"282d675b2878",1359059074,"[ms-inline asm] Add an error when trying to compile MS-style inline assembly","[ms-inline asm] Add an error when trying to compile MS-style inline assembly\nfor an unsupported architecture.\nrdar://13063988\n\nllvm-svn: 173364"},
		[j]={{jc,538,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///         ms-asm-block\n///         ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///         \'__asm\' ms-asm-line \'\\n\'\n///         \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///         ms-asm-line\n///         ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!TheTriple.isX86()) {\n    Diag(AsmLoc, diag::err_msasm_unsupported_arch) << TheTriple.getArchName();"}},
		[l]={
			["clang/test/Sema/ms-inline-asm-invalid-arch.c"]={"clang/test/Sema/ms-inline-asm-invalid-arch.c:4:3: error: unsupported architecture \'powerpc64\' for MS-style inline assembly"}
		}
	},
	["err_msvc_annotation_wide_str"]={
		[c]={{nil,r,"err_msvc_annotation_wide_str"}},
		[d]={{nil,r,"arguments to __annotation must be wide string constants"}},
		[g]={{nil,r,"arguments to __annotation must be wide string constants"}},
		[h]=k,
		[i]="arguments to __annotation must be wide string constants",
		[b]=a,
		[f]={{nil,r,m}},
		[e]={"30701edf761c",1504643255,"[ms] Implement the __annotation intrinsic","[ms] Implement the __annotation intrinsic\n\nllvm-svn: 312572"},
		[j]={{N,229,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  // All arguments should be wide string literals.\n  for (Expr *Arg : TheCall->arguments()) {\n    // ...\n    if (!Literal || !Literal->isWide()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_msvc_annotation_wide_str) << Arg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/ms-annotation.c"]={"clang/test/Sema/ms-annotation.c:7:16: error: arguments to __annotation must be wide string constants","clang/test/Sema/ms-annotation.c:10:30: error: arguments to __annotation must be wide string constants"}
		}
	},
	["err_mt_message"]={
		[c]="err_mt_message",
		[d]="[rewriter] %0",
		[g]="[rewriter] A",
		[h]=k,
		[i]="\\[rewriter\\] (.*?)",
		[b]=a,
		[f]=w,
		[e]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions","ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use proper diagnostic messages. The old use was\nbased on incorrect example code from the documentation.\n\nThe logic of the previous report() functions has been retained to support any\nexternal consumers that might be intercepting diagnostic messages through the\nold interface.\n\nNote that the change in test/Misc/warning-flags.c isn\'t a new warning without a\nflag, rather one that was previously invisible to the test. Adding a flag might\nbe a good idea though.\n\nllvm-svn: 200124"},
		[j]={{"clang/lib/ARCMigrate/TransformActions.cpp",690,"void TransformActions::reportError(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::err_mt_message, range) << message; }"}},
		[l]={
			["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:53:10: error: [rewriter] it is not safe to cast to \'CFStringRef\' the result of \'autorelease\' message; a __bridge cast may result in a pointer to a destroyed object and a __bridge_retained may leak the object"}
		}
	},
	["err_multichar_character_literal"]={
		[c]={{nil,K,"err_multichar_character_literal"}},
		[d]={{nil,K,"%select{wide|Unicode}0 character literals may not contain multiple characters"}},
		[g]={{nil,K,{{"wide","Unicode"}," character literals may not contain multiple characters"}}},
		[h]=k,
		[i]="(?:wide|Unicode) character literals may not contain multiple characters",
		[b]=a,
		[f]={{nil,K,y}},
		[e]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
		[j]={{"clang/lib/Lex/LiteralSupport.cpp",1800,"/// \\verbatim\n///       user-defined-character-literal: [C++11 lex.ext]\n///         character-literal ud-suffix\n///       ud-suffix:\n///         identifier\n///       character-literal: [C++11 lex.ccon]\n///         \' c-char-sequence \'\n///         u\' c-char-sequence \'\n///         U\' c-char-sequence \'\n///         L\' c-char-sequence \'\n///         u8\' c-char-sequence \' [C++1z lex.ccon]\n///       c-char-sequence:\n///         c-char\n///         c-char-sequence c-char\n///       c-char:\n///         any member of the source character set except the single-quote \',\n///           backslash \\, or new-line character\n///         escape-sequence\n///         universal-character-name\n///       escape-sequence:\n///         simple-escape-sequence\n///         octal-escape-sequence\n///         hexadecimal-escape-sequence\n///       simple-escape-sequence:\n///         one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///       octal-escape-sequence:\n///         \\ octal-digit\n///         \\ octal-digit octal-digit\n///         \\ octal-digit octal-digit octal-digit\n///       hexadecimal-escape-sequence:\n///         \\x hexadecimal-digit\n///         hexadecimal-escape-sequence hexadecimal-digit\n///       universal-character-name: [C++11 lex.charset]\n///         \\u hex-quad\n///         \\U hex-quad hex-quad\n///       hex-quad:\n///         hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  if (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n    // ...\n    else if (isOrdinary())\n    // ...\n    else {\n      PP.Diag(Loc, diag::err_multichar_character_literal) << (isWide() ? 0 : 1);"}},
		[l]={
			["clang/test/Lexer/wchar.c"]={"clang/test/Lexer/wchar.c:6:9: error: wide character literals may not contain multiple characters","clang/test/Lexer/wchar.c:8:9: error: wide character literals may not contain multiple characters"}
		}
	},
	["err_multiple_base_initialization"]={
		[c]="err_multiple_base_initialization",
		[d]="multiple initializations given for base %0",
		[g]="multiple initializations given for base A",
		[h]=k,
		[i]="multiple initializations given for base (.*?)",
		[b]=a,
		[f]=m,
		[e]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
		[j]={{I,5640,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n  // ...\n  else {\n    // ...\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_base_initialization) << QualType(BaseClass, 0) << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:14:5: error: multiple initializations given for base \'S\'","clang/test/SemaCXX/class-base-member-init.cpp:35:7: error: multiple initializations given for base \'A<T>\'","clang/test/SemaCXX/class-base-member-init.cpp:42:7: error: multiple initializations given for base \'T\'","clang/test/SemaCXX/class-base-member-init.cpp:86:14: error: multiple initializations given for base \'decltype(Base(1))\' (aka \'test5::Base\')"}
		}
	},
	["err_multiple_def_index"]={
		[c]={{nil,r,"err_multiple_def_index"}},
		[d]={{nil,r,"multiple definitions are found for the same key in index "}},
		[g]={{nil,r,"multiple definitions are found for the same key in index "}},
		[h]=k,
		[i]="multiple definitions are found for the same key in index ",
		[b]=a,
		[f]={{nil,r,w}},
		[e]={"e350b0a19629",1506078661,"Add Cross Translation Unit support library","Add Cross Translation Unit support library\n\nThis patch introduces a class that can help to build tools that require cross\ntranslation unit facilities. This class allows function definitions to be loaded\nfrom external AST files based on an index. In order to use this functionality an\nindex is required. The index format is a flat text file but it might be\nreplaced with a different solution in the near future. USRs are used as names to\nlook up the functions definitions. This class also does caching to avoid\nredundant loading of AST files.\n\nRight now only function defnitions can be loaded using this API because this is\nwhat the in progress cross translation unit feature of the Static Analyzer\nrequires. In to future this might be extended to classes, types etc.\n\nDifferential Revision: https://reviews.llvm.org/D34512\n\nllvm-svn: 313975"},
		[j]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",382,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::multiple_definitions:\n    Context.getDiagnostics().Report(diag::err_multiple_def_index) << IE.getLineNum();"}}
	},
	["err_multiple_default_labels_defined"]={
		[c]="err_multiple_default_labels_defined",
		[d]="multiple default labels in one switch",
		[g]="multiple default labels in one switch",
		[h]=k,
		[i]="multiple default labels in one switch",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{G,1280,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue; SC = SC->getNextSwitchCase()) {\n    if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {\n      if (TheDefaultStmt) {\n        Diag(DS->getDefaultLoc(), diag::err_multiple_default_labels_defined);"}},
		[l]={
			["clang/test/CXX/stmt.stmt/stmt.label/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.label/p1.cpp:22:5: error: multiple default labels in one switch"}
		}
	},
	["err_multiple_final_overriders"]={
		[c]="err_multiple_final_overriders",
		[d]="virtual function %q0 has more than one final overrider in %1",
		[g]="virtual function A has more than one final overrider in B",
		[h]=k,
		[i]="virtual function (.*?) has more than one final overrider in (.*?)",
		[b]=a,
		[f]=m,
		[e]={"4165bd677248",1269388076,"Implement computation of the final overriders for each virtual","Implement computation of the final overriders for each virtual\nfunction within a class hierarchy (C++ [class.virtual]p2).\n\nWe use the final-overrider computation to determine when a particular\nclass is ill-formed because it has multiple final overriders for a\ngiven virtual function (e.g., because two virtual functions override\nthe same virtual function in the same virtual base class). Fixes\nPR5973.\n\nWe also use the final-overrider computation to determine which virtual\nmember functions are pure when determining whether a class is\nabstract or diagnosing the improper use of an abstract class. The\nprior approach to determining whether there were any pure virtual\nfunctions in a class didn\'t cope with virtual base class subobjects\nproperly, and could not easily be fixed to deal with the oddities of\nsubobject hiding. Fixes PR6631.\n\nllvm-svn: 99351"},
		[j]={{n,18999,"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 (CXXRecord) {\n      // ...\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            // ...\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                // ...\n                Diag(Record->getLocation(), diag::err_multiple_final_overriders) << (const NamedDecl *)M->first << Record;"}},
		[l]={
			["clang/test/CXX/class.derived/class.virtual/p2.cpp"]={"clang/test/CXX/class.derived/class.virtual/p2.cpp:18:8: error: virtual function \'A::f\' has more than one final overrider in \'D\'","clang/test/CXX/class.derived/class.virtual/p2.cpp:22:8: error: virtual function \'A::f\' has more than one final overrider in \'E\'"}
		}
	},
	["err_multiple_mem_initialization"]={
		[c]="err_multiple_mem_initialization",
		[d]="multiple initializations given for non-static member %0",
		[g]="multiple initializations given for non-static member A",
		[h]=k,
		[i]="multiple initializations given for non\\-static member (.*?)",
		[b]=a,
		[f]=m,
		[e]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
		[j]={{I,5633,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:12:5: error: multiple initializations given for non-static member \'b1\'","clang/test/SemaCXX/class-base-member-init.cpp:51:7: error: multiple initializations given for non-static member \'t\'","clang/test/SemaCXX/class-base-member-init.cpp:97:11: error: multiple initializations given for non-static member \'a\'"}
		}
	},
	["err_multiple_mem_union_initialization"]={
		[c]="err_multiple_mem_union_initialization",
		[d]="initializing multiple members of union",
		[g]="initializing multiple members of union",
		[h]=k,
		[i]="initializing multiple members of union",
		[b]=a,
		[f]=m,
		[e]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case.  Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
		[j]={{n,5484,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n  // ...\n  S.Diag(DefaultInitLoc, diag::err_multiple_mem_union_initialization);"},{I,5665,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  // ...\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n      // ...\n      if (En.first && En.first != Child) {\n        S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_union_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
		[l]={
			["clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp"]={"clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:20:8: error: initializing multiple members of union","clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:26:15: error: initializing multiple members of union"}
		}
	},
	["err_multiple_template_declarators"]={
		[c]="err_multiple_template_declarators",
		[d]="%select{|a template declaration|an explicit template specialization|an explicit template instantiation}0 can only %select{|declare|declare|instantiate}0 a single entity",
		[g]={{nil,nil,{{a,"a template declaration","an explicit template specialization","an explicit template instantiation"}," can only ",{a,"declare","declare","instantiate"}," a single entity"}}},
		[h]=k,
		[i]="(?:|a template declaration|an explicit template specialization|an explicit template instantiation) can only (?:|declare|declare|instantiate) a single entity",
		[b]=a,
		[f]=D,
		[e]={"2399628cea7b",1242163911,"Refactor the parsing of declarations so that template declarations can","Refactor the parsing of declarations so that template declarations can\nparse just a single declaration and provide a reasonable diagnostic\nwhen the \"only one declarator per template declaration\" rule is\nviolated. This eliminates some ugly, ugly hackery where we used to\nrequire thatn the layout of a DeclGroup of a single element be the\nsame as the layout of a single declaration.\n\nllvm-svn: 71596"},
		[j]={{"clang/lib/Parse/ParseTemplate.cpp",367,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  // ...\n  if (Tok.is(tok::comma)) {\n    Diag(Tok, diag::err_multiple_template_declarators) << (int)TemplateInfo.Kind;"}},
		[l]={
			["clang/test/CXX/temp/p3.cpp"]={"clang/test/CXX/temp/p3.cpp:7:33: error: a template declaration can only declare a single entity"}
		}
	},
	["err_multiversion_after_used"]={
		[c]={{nil,o,"err_multiversion_after_used"}},
		[d]={{nil,o,"function declaration cannot become a multiversioned function after first usage"}},
		[g]={{nil,o,"function declaration cannot become a multiversioned function after first usage"}},
		[h]=k,
		[i]="function declaration cannot become a multiversioned function after first usage",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11187,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  // Only allow transition to MultiVersion if it hasn\'t been used.\n  if (OldFD && CausesMV && OldFD->isUsed(false))\n    return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"},{n,11661,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (!OldFD->isMultiVersion()) {\n    // ...\n    case MultiVersionKind::TargetClones:\n      if (OldFD->isUsed(false)) {\n        // ...\n        return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"}},
		[l]={
			["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:82:62: error: function declaration cannot become a multiversioned function after first usage"}
		}
	},
	["err_multiversion_diff"]={
		[c]={{nil,o,"err_multiversion_diff"}},
		[d]={{nil,K,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|linkage|language linkage}0"},{t,o,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0"}},
		[g]={{nil,K,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","linkage","language linkage"}}},{t,o,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","storage class","linkage"}}}},
		[h]=k,
		[i]="multiversioned function declaration has a different (?:calling convention|return type|constexpr specification|inline specification|linkage|language linkage)",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11197,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"}},
		[l]={
			[ic]={"clang/test/Sema/attr-target-mv.c:108:63: error: multiversioned function declaration has a different calling convention","clang/test/Sema/attr-target-mv.c:112:52: error: multiversioned function declaration has a different return type"}
		}
	},
	["err_multiversion_disallowed_other_attr"]={
		[c]={{nil,E,"err_multiversion_disallowed_other_attr"}},
		[d]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioning cannot be combined with attribute %1"},{q,K,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioning cannot be combined with attribute %1"},{t,E,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioning cannot be combined with attribute %1"}},
		[g]={{nil,p,{Jb,{a,zb,Ab,Eb,"target_clones","target_version"},"\' multiversioning cannot be combined with attribute B"}},{q,K,{Jb,{a,zb,Ab,Eb,"target_clones"},"\' multiversioning cannot be combined with attribute B"}},{t,E,{Jb,{zb,Ab,Eb},"\' multiversioning cannot be combined with attribute B"}}},
		[h]=k,
		[i]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioning cannot be combined with attribute (.*?)",
		[b]=a,
		[f]={{nil,E,w}},
		[e]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[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"},
		[j]={{n,11014,"static bool checkNonMultiVersionCompatAttributes(Sema &S, const FunctionDecl *FD, const FunctionDecl *CausedFD, MultiVersionKind MVKind) {\n  const auto Diagnose = [FD, CausedFD, MVKind](Sema &S, const Attr *A) {\n    S.Diag(FD->getLocation(), diag::err_multiversion_disallowed_other_attr) << static_cast<unsigned>(MVKind) << A;"}},
		[l]={
			[ic]={"clang/test/Sema/attr-target-mv.c:91:1: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:94:68: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:98:66: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:104:75: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:135:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:140:83: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:155:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:162:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'"}
		}
	},
	["err_multiversion_doesnt_support"]={
		[c]={{nil,o,"err_multiversion_doesnt_support"}},
		[d]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{q,K,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{t,x,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function}1"},{gb,o,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1"}},
		[g]={{nil,p,{Jb,{a,zb,Ab,Eb,"target_clones","target_version"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{q,K,{Jb,{a,zb,Ab,Eb,"target_clones"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{t,x,{Jb,{zb,Ab,Eb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function"}}},{gb,o,{Jb,{zb,Ab,Eb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions"}}}},
		[h]=k,
		[i]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioned functions do not yet support (?:function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas)",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11194,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"},{T,3662,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: We could probably figure out how to get this to work for lambdas\n  // someday.\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(D->getLocation(), diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MultiVersionKind::TargetClones) << /*Lambda*/ 9;"}},
		[l]={
			["clang/test/SemaCXX/attr-target-clones-aarch64.cpp"]={"clang/test/SemaCXX/attr-target-clones-aarch64.cpp:5:12: error: attribute \'target_clones\' multiversioned functions do not yet support lambdas","clang/test/SemaCXX/attr-target-clones-aarch64.cpp:8:12: error: attribute \'target_clones\' multiversioned functions do not yet support lambdas"}
		}
	},
	["err_multiversion_duplicate"]={
		[c]={{nil,o,"err_multiversion_duplicate"}},
		[d]={{nil,o,"multiversioned function redeclarations require identical target attributes"}},
		[g]={{nil,o,"multiversioned function redeclarations require identical target attributes"}},
		[h]=k,
		[i]="multiversioned function redeclarations require identical target attributes",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11301,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTA) {\n    // ...\n    if (OldParsed == NewParsed) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{n,11317,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTVA) {\n    // ...\n    if (Feats == NewFeats) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{n,11438,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::Target: {\n      // ...\n      if (CurParsed == NewParsed) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{n,11459,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::TargetVersion: {\n      // ...\n      if (CurFeats == NewFeats) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"}},
		[l]={
			[ic]={"clang/test/Sema/attr-target-mv.c:75:57: error: multiversioned function redeclarations require identical target attributes"}
		}
	},
	["err_multiversion_noproto"]={
		[c]={{nil,o,"err_multiversion_noproto"}},
		[d]={{nil,o,"multiversioned function must have a prototype"}},
		[g]={{nil,o,"multiversioned function must have a prototype"}},
		[h]=k,
		[i]="multiversioned function must have a prototype",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11190,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"}},
		[l]={
			[ic]={"clang/test/Sema/attr-target-mv.c:20:39: error: multiversioned function must have a prototype"}
		}
	},
	["err_multiversion_not_allowed_on_main"]={
		[c]={{nil,o,"err_multiversion_not_allowed_on_main"}},
		[d]={{nil,o,"\'main\' cannot be a multiversioned function"}},
		[g]={{nil,o,"\'main\' cannot be a multiversioned function"}},
		[h]=k,
		[i]="\'main\' cannot be a multiversioned function",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11601,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Main isn\'t allowed to become a multiversion function, however it IS\n  // permitted to have \'main\' be marked with the \'target\' optimization hint,\n  // for \'target_version\' only default is allowed.\n  if (NewFD->isMain()) {\n    if (MVKind != MultiVersionKind::None && !(MVKind == MultiVersionKind::Target && !NewTA->isDefaultVersion()) && !(MVKind == MultiVersionKind::TargetVersion && NewTVA->isDefaultVersion())) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_not_allowed_on_main);"}},
		[l]={
			["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:84:48: error: \'main\' cannot be a multiversioned function"}
		}
	},
	["err_multiversion_not_supported"]={
		[c]={{nil,o,"err_multiversion_not_supported"}},
		[d]={{nil,o,"function multiversioning is not supported on the current target"}},
		[g]={{nil,o,"function multiversioning is not supported on the current target"}},
		[h]=k,
		[i]="function multiversioning is not supported on the current target",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={Hb,1515447257,Mb,Kb},
		[j]={{n,11168,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported);"}},
		[l]={
			["clang/test/Sema/attr-target-mv-bad-target.c"]={"clang/test/Sema/attr-target-mv-bad-target.c:6:37: error: function multiversioning is not supported on the current target","clang/test/Sema/attr-target-mv-bad-target.c:9:40: error: function multiversioning is not supported on the current target"}
		}
	},
	["err_multiversion_required_in_redecl"]={
		[c]={{nil,o,"err_multiversion_required_in_redecl"}},
		[d]={{nil,p,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\'}0 attribute in a multiversioned function"},{q,o,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'}0 attribute in a multiversioned function"}},
		[g]={{nil,p,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'","\'target_version\'"}," attribute in a multiversioned function"}},{q,o,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'"}," attribute in a multiversioned function"}}},
		[h]=k,
		[i]="function declaration is missing (?:\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\') attribute in a multiversioned function",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
		[j]={{n,11332,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  for (const auto *FD : OldFD->redecls()) {\n    // ...\n    // We allow forward declarations before ANY multiversioning attributes, but\n    // nothing after the fact.\n    if (PreviousDeclsHaveMultiVersionAttribute(FD) && ((NewTA && (!CurTA || CurTA->isInherited())) || (NewTVA && (!CurTVA || CurTVA->isInherited())))) {\n      S.Diag(FD->getLocation(), diag::err_multiversion_required_in_redecl) << (NewTA ? 0 : 2);"},{n,11646,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Multiversioned redeclarations aren\'t allowed to omit the attribute, except\n  // for target_clones and target_version.\n  if (OldFD->isMultiVersion() && MVKind == MultiVersionKind::None && OldFD->getMultiVersionKind() != MultiVersionKind::TargetClones && OldFD->getMultiVersionKind() != MultiVersionKind::TargetVersion) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_required_in_redecl) << (OldFD->getMultiVersionKind() != MultiVersionKind::Target);"}},
		[l]={
			[ic]={"clang/test/Sema/attr-target-mv.c:83:5: error: function declaration is missing \'target\' attribute in a multiversioned function","clang/test/Sema/attr-target-mv.c:123:5: error: function declaration is missing \'target\' attribute in a multiversioned function"}
		}
	},
	["err_multiversion_types_mixed"]={
		[c]={{nil,o,"err_multiversion_types_mixed"}},
		[d]={{nil,o,"multiversioning attributes cannot be combined"}},
		[g]={{nil,o,"multiversioning attributes cannot be combined"}},
		[h]=k,
		[i]="multiversioning attributes cannot be combined",
		[b]=a,
		[f]={{nil,o,w}},
		[e]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
		[j]={{n,11372,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Disallow mixing of multiversioning types.\n  if (!MultiVersionTypesCompatible(OldMVKind, NewMVKind)) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_types_mixed);"}},
		[l]={
			["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:32:57: error: multiversioning attributes cannot be combined"}
		}
	},
	["err_musttail_callconv_mismatch"]={
		[c]={{nil,t,"err_musttail_callconv_mismatch"}},
		[d]={{nil,t,"cannot perform a tail call to function%select{| %1}0 because it uses an incompatible calling convention"}},
		[g]={{nil,t,{"cannot perform a tail call to function",{a," B"}," because it uses an incompatible calling convention"}}},
		[h]=k,
		[i]="cannot perform a tail call to function(?:| (.*?)) because it uses an incompatible calling convention",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,774,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << true << ND->getDeclName();"},{G,777,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << false;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:157:3: error: cannot perform a tail call to function \'RegCallReturnsInt\' because it uses an incompatible calling convention"}
		}
	},
	["err_musttail_forbidden_from_this_context"]={
		[c]={{nil,t,"err_musttail_forbidden_from_this_context"}},
		[d]={{nil,t,"%0 attribute cannot be used from %select{a block|an Objective-C function|this context}1"}},
		[g]={{nil,t,{"A attribute cannot be used from ",{"a block","an Objective-C function","this context"}}}},
		[h]=k,
		[i]="(.*?) attribute cannot be used from (?:a block|an Objective\\-C function|this context)",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,711,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find caller function signature.\n  if (!CallerDecl) {\n    // ...\n    Diag(St->getBeginLoc(), diag::err_musttail_forbidden_from_this_context) << &MTA << ContextType;"}},
		[l]={
			["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:5:31: error: \'musttail\' attribute cannot be used from a block","clang/test/Sema/attr-musttail.m:23:29: error: \'musttail\' attribute cannot be used from an Objective-C function"}
		}
	},
	["err_musttail_member_mismatch"]={
		[c]={{nil,t,"err_musttail_member_mismatch"}},
		[d]={{nil,t,"%select{non-member|static member|non-static member}0 function cannot perform a tail call to %select{non-member|static member|non-static member|pointer-to-member}1 function%select{| %3}2"}},
		[g]={{nil,t,{{"non-member","static member","non-static member"}," function cannot perform a tail call to ",{"non-member","static member","non-static member","pointer-to-member"}," function",{a," D"}}}},
		[h]=k,
		[i]="(?:non\\-member|static member|non\\-static member) function cannot perform a tail call to (?:non\\-member|static member|non\\-static member|pointer\\-to\\-member) function(?:| (.*?))",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,793,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {\n      Diag(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << true << ND->getDeclName();"},{G,799,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {\n    // ...\n    } else\n      Diag(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << false;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:41:3: error: non-member function cannot perform a tail call to non-static member function \'MemberFunction\'","clang/test/SemaCXX/attr-musttail.cpp:48:5: error: non-static member function cannot perform a tail call to non-member function \'ReturnsVoid\'","clang/test/SemaCXX/attr-musttail.cpp:87:3: error: non-member function cannot perform a tail call to pointer-to-member function \'p_mem\'","clang/test/SemaCXX/attr-musttail.cpp:163:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:175:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:253:3: error: static member function cannot perform a tail call to pointer-to-member function"}
		}
	},
	["err_musttail_mismatch"]={
		[c]={{nil,t,"err_musttail_mismatch"}},
		[d]={{nil,t,"cannot perform a tail call to function%select{| %1}0 because its signature is incompatible with the calling function"}},
		[g]={{nil,t,{"cannot perform a tail call to function",{a," B"}," because its signature is incompatible with the calling function"}}},
		[h]=k,
		[i]="cannot perform a tail call to function(?:| (.*?)) because its signature is incompatible with the calling function",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,854,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << true << ND->getDeclName();"},{G,857,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << false;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:20:3: error: cannot perform a tail call to function \'NoParams\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:26:3: error: cannot perform a tail call to function \'LongParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:32:3: error: cannot perform a tail call to function \'ReturnsLong\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:136:3: error: cannot perform a tail call to function \'TakesShortParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:140:3: error: cannot perform a tail call to function \'TakesIntParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:150:5: error: cannot perform a tail call to function \'ToFunction\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:234:3: error: cannot perform a tail call to function because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:111:3: error: cannot perform a tail call to function \'TemplateFunc\' because its signature is incompatible with the calling function"}
		}
	},
	["err_musttail_needs_call"]={
		[c]={{nil,t,"err_musttail_needs_call"}},
		[d]={{nil,t,"%0 attribute requires that the return value is the result of a function call"}},
		[g]={{nil,t,"A attribute requires that the return value is the result of a function call"}},
		[h]=k,
		[i]="(.*?) attribute requires that the return value is the result of a function call",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,653,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CE) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_call) << &MTA;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:7:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:12:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:78:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:204:23: error: \'musttail\' attribute requires that the return value is the result of a function call"}
		}
	},
	["err_musttail_needs_prototype"]={
		[c]={{nil,t,"err_musttail_needs_prototype"}},
		[d]={{nil,t,"%0 attribute requires that both caller and callee functions have a prototype"}},
		[g]={{nil,t,"A attribute requires that both caller and callee functions have a prototype"}},
		[h]=k,
		[i]="(.*?) attribute requires that both caller and callee functions have a prototype",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,755,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_prototype) << &MTA;"}},
		[l]={
			["clang/test/Sema/attr-musttail.c"]={"clang/test/Sema/attr-musttail.c:5:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype","clang/test/Sema/attr-musttail.c:10:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype"}
		}
	},
	["err_musttail_needs_trivial_args"]={
		[c]={{nil,t,"err_musttail_needs_trivial_args"}},
		[d]={{nil,t,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
		[g]={{nil,t,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
		[h]=k,
		[i]="tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,659,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (const auto *EWC = dyn_cast<ExprWithCleanups>(E)) {\n    if (EWC->cleanupsHaveSideEffects()) {\n      Diag(St->getBeginLoc(), diag::err_musttail_needs_trivial_args) << &MTA;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:66:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:74:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:124:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:179:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}
		}
	},
	["err_musttail_no_variadic"]={
		[c]={{nil,t,"err_musttail_no_variadic"}},
		[d]={{nil,t,"%0 attribute may not be used with variadic functions"}},
		[g]={{nil,t,"A attribute may not be used with variadic functions"}},
		[h]=k,
		[i]="(.*?) attribute may not be used with variadic functions",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,786,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (CalleeType.Func->isVariadic() || CallerType.Func->isVariadic()) {\n    Diag(St->getBeginLoc(), diag::err_musttail_no_variadic) << &MTA;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:129:23: error: \'musttail\' attribute may not be used with variadic functions"}
		}
	},
	["err_musttail_scope"]={
		[c]={{nil,t,"err_musttail_scope"}},
		[d]={{nil,t,"cannot perform a tail call from this return statement"}},
		[g]={{nil,t,"cannot perform a tail call from this return statement"}},
		[h]=k,
		[i]="cannot perform a tail call from this return statement",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{"clang/lib/Sema/JumpDiagnostics.cpp",1006,"void JumpScopeChecker::VerifyMustTailStmts() {\n  for (AttributedStmt *AS : MustTailStmts) {\n    for (unsigned I = LabelAndGotoScopes[AS]; I; I = Scopes[I].ParentScope) {\n      if (Scopes[I].OutDiag) {\n        S.Diag(AS->getBeginLoc(), diag::err_musttail_scope);"}},
		[l]={
			["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:13:3: error: cannot perform a tail call from this return statement"}
		}
	},
	["err_musttail_structors_forbidden"]={
		[c]={{nil,t,"err_musttail_structors_forbidden"}},
		[d]={{nil,t,"cannot perform a tail call %select{from|to}0 a %select{constructor|destructor}1"}},
		[g]={{nil,t,{"cannot perform a tail call ",{"from","to"}," a ",{z,A}}}},
		[h]=k,
		[i]="cannot perform a tail call (?:from|to) a (?:constructor|destructor)",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={jb,1607502387,ib,hb},
		[j]={{G,682,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << IsCallee << isa<CXXDestructorDecl>(CMD);"},{G,743,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  // ...\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  // ...\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << /* IsCallee = */ 1 << /* IsDestructor = */ 1;"}},
		[l]={
			[Bb]={"clang/test/SemaCXX/attr-musttail.cpp:186:5: error: cannot perform a tail call from a destructor","clang/test/SemaCXX/attr-musttail.cpp:193:5: error: cannot perform a tail call to a destructor","clang/test/SemaCXX/attr-musttail.cpp:212:3: error: cannot perform a tail call to a constructor","clang/test/SemaCXX/attr-musttail.cpp:241:3: error: cannot perform a tail call to a destructor"}
		}
	},
	["err_mutable_const"]={
		[c]="err_mutable_const",
		[d]="\'mutable\' and \'const\' cannot be mixed",
		[g]="\'mutable\' and \'const\' cannot be mixed",
		[h]=k,
		[i]="\'mutable\' and \'const\' cannot be mixed",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{n,18189,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  // Check that \'mutable\' is consistent with the type of the declaration.\n  if (!InvalidDecl && Mutable) {\n    // ...\n    if (T->isReferenceType())\n    // ...\n    else if (T.isConstQualified())\n      DiagID = diag::err_mutable_const;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:7:3: error: \'mutable\' and \'const\' cannot be mixed","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:8:3: error: \'mutable\' and \'const\' cannot be mixed"}
		}
	},
	["err_mutable_function"]={
		[c]="err_mutable_function",
		[d]="\'mutable\' cannot be applied to functions",
		[g]="\'mutable\' cannot be applied to functions",
		[h]=k,
		[i]="\'mutable\' cannot be applied to functions",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{I,3486,"/// 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  case DeclSpec::SCS_mutable:\n    if (isFunc) {\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:12:3: error: \'mutable\' cannot be applied to functions"}
		}
	},
	["err_mutable_nonmember"]={
		[c]="err_mutable_nonmember",
		[d]="\'mutable\' can only be applied to member variables",
		[g]="\'mutable\' can only be applied to member variables",
		[h]=k,
		[i]="\'mutable\' can only be applied to member variables",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{n,5290,"/// 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  // Note that a linkage-specification sets a storage class, but\n  // \'extern \"C\" struct foo;\' is actually valid and not theoretically\n  // useless.\n  if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    if (SCS == DeclSpec::SCS_mutable)\n      // ...\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_nonmember);"},{n,5716,"/// BuildAnonymousStructOrUnion - Handle the declaration of an\n/// anonymous structure or union. Anonymous unions are a C++ feature\n/// (C++ [class.union]) and a C11 feature; anonymous structures\n/// are a C11 feature and GNU C++ extension.\nDecl *Sema::BuildAnonymousStructOrUnion(Scope *S, DeclSpec &DS, AccessSpecifier AS, RecordDecl *Record, const PrintingPolicy &Policy) {\n  // ...\n  if (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {\n  // ...\n  } else {\n    // ...\n    if (SCSpec == DeclSpec::SCS_mutable) {\n      // ...\n      Diag(Record->getLocation(), diag::err_mutable_nonmember);"},{n,7484,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (SCSpec == DeclSpec::SCS_mutable) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:11:3: error: \'mutable\' can only be applied to member variables"}
		}
	},
	["err_mutable_reference"]={
		[c]="err_mutable_reference",
		[d]="\'mutable\' cannot be applied to references",
		[g]="\'mutable\' cannot be applied to references",
		[h]=k,
		[i]="\'mutable\' cannot be applied to references",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{n,18187,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  // Check that \'mutable\' is consistent with the type of the declaration.\n  if (!InvalidDecl && Mutable) {\n    // ...\n    if (T->isReferenceType())\n      DiagID = getLangOpts().MSVCCompat ? diag::ext_mutable_reference : diag::err_mutable_reference;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:9:3: error: \'mutable\' cannot be applied to references","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:10:3: error: \'mutable\' cannot be applied to references"}
		}
	},
	["err_namespace_nonnamespace_scope"]={
		[c]="err_namespace_nonnamespace_scope",
		[d]="namespaces can only be defined in global or namespace scope",
		[g]="namespaces can only be defined in global or namespace scope",
		[h]=k,
		[i]="namespaces can only be defined in global or namespace scope",
		[b]=a,
		[f]=D,
		[e]={"05cfc295f45d",1273813702,"Namespaces can only be defined at global or namespace scope. Fixes PR6596.","Namespaces can only be defined at global or namespace scope. Fixes PR6596.\n\nllvm-svn: 103767"},
		[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",164,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///       namespace-definition: [C++: namespace.def]\n///         named-namespace-definition\n///         unnamed-namespace-definition\n///         nested-namespace-definition\n///\n///       named-namespace-definition:\n///         \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///         namespace-body \'}\'\n///\n///       unnamed-namespace-definition:\n///         \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///       nested-namespace-definition:\n///         \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///         identifier \'{\' namespace-body \'}\'\n///\n///       enclosing-namespace-specifier:\n///         identifier\n///         enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///       namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///         \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (getCurScope()->isClassScope() || getCurScope()->isTemplateParamScope() || getCurScope()->isInObjcMethodScope() || getCurScope()->getBlockParent() || getCurScope()->getFnParent()) {\n    Diag(T.getOpenLocation(), diag::err_namespace_nonnamespace_scope);"}},
		[l]={
			["clang/test/Parser/namespaces.cpp"]={"clang/test/Parser/namespaces.cpp:7:15: error: namespaces can only be defined in global or namespace scope"}
		}
	},
	["err_need_header_before_placement_new"]={
		[c]={{nil,t,"err_need_header_before_placement_new"}},
		[d]={{nil,t,"no matching %0 function for non-allocating placement new expression; include <new>"}},
		[g]={{nil,t,"no matching A function for non-allocating placement new expression; include <new>"}},
		[h]=k,
		[i]="no matching (.*?) function for non\\-allocating placement new expression; include \\<new\\>",
		[b]=a,
		[f]={{nil,t,m}},
		[e]={"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"},
		[j]={{eb,2568,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n    if (Diagnose) {\n      // If this is an allocation of the form \'new (p) X\' for some object\n      // pointer p (or an expression that will decay to such a pointer),\n      // diagnose the missing inclusion of <new>.\n      if (!R.isClassLookup() && Args.size() == 2 && (Args[1]->getType()->isObjectPointerType() || Args[1]->getType()->isArrayType())) {\n        S.Diag(R.getNameLoc(), diag::err_need_header_before_placement_new) << R.getLookupName() << Range;"}},
		[l]={
			["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:136:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:152:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:153:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:154:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>"}
		}
	},
	["err_need_header_before_typeid"]={
		[c]="err_need_header_before_typeid",
		[d]="you need to include <typeinfo> before using the \'typeid\' operator",
		[g]="you need to include <typeinfo> before using the \'typeid\' operator",
		[h]=k,
		[i]="you need to include \\<typeinfo\\> before using the \'typeid\' operator",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{eb,661,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  // Find the std::type_info type.\n  if (!getStdNamespace())\n    return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"},{eb,675,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!CXXTypeInfoDecl) {\n    // ...\n    if (!CXXTypeInfoDecl)\n      return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:109:3: error: you need to include <typeinfo> before using the \'typeid\' operator","clang/test/SemaCXX/cxx1z-copy-omission.cpp:110:3: error: you need to include <typeinfo> before using the \'typeid\' operator","clang/test/SemaCXX/cxx1z-copy-omission.cpp:112:3: error: you need to include <typeinfo> before using the \'typeid\' operator"}
		}
	},
	["err_nested_name_member_ref_lookup_ambiguous"]={
		[c]="err_nested_name_member_ref_lookup_ambiguous",
		[d]="lookup of %0 in member access expression is ambiguous",
		[g]="lookup of A in member access expression is ambiguous",
		[h]=k,
		[i]="lookup of (.*?) in member access expression is ambiguous",
		[b]=a,
		[f]=m,
		[e]={"b7bfe794129f",1251932376,"Rewrite of our handling of name lookup in C++ member access expressions, e.g.,","Rewrite of our handling of name lookup in C++ member access expressions, e.g.,\n\n  x->Base::f\n\nWe no longer try to \"enter\" the context of the type that \"x\" points\nto. Instead, we drag that object type through the parser and pass it\ninto the Sema routines that need to know how to perform lookup within\nmember access expressions.\n\nWe now implement most of the crazy name lookup rules in C++\n[basic.lookup.classref] for non-templated code, including performing\nlookup both in the context of the type referred to by the member\naccess and in the scope of the member access itself and then detecting\nambiguities when the two lookups collide (p1 and p4; p3 and p7 are\nstill TODO). This change also corrects our handling of name lookup\nwithin template arguments of template-ids inside the\nnested-name-specifier (p6; we used to look into the scope of the\nobject expression for them) and fixes PR4703.\n\nI have disabled some tests that involve member access expressions\nwhere the object expression has dependent type, because we don\'t yet\nhave the ability to describe dependent nested-name-specifiers starting\nwith an identifier.\n\nllvm-svn: 80843"},
		[j]={{Db,682,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///       \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      // ...\n      if (isAcceptableNestedNameSpecifier(OuterDecl) && OuterDecl->getCanonicalDecl() != SD->getCanonicalDecl() && (!isa<TypeDecl>(OuterDecl) || !isa<TypeDecl>(SD) || !Context.hasSameType(Context.getTypeDeclType(cast<TypeDecl>(OuterDecl)), Context.getTypeDeclType(cast<TypeDecl>(SD))))) {\n        // ...\n        Diag(IdInfo.IdentifierLoc, diag::err_nested_name_member_ref_lookup_ambiguous) << IdInfo.Identifier;"}},
		[l]={
			["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:98:10: error: lookup of \'base\' in member access expression is ambiguous"}
		}
	},
	["err_nested_name_spec_is_not_class"]={
		[c]="err_nested_name_spec_is_not_class",
		[d]="%0 cannot appear before \'::\' because it is not a class%select{ or namespace|, namespace, or enumeration}1; did you mean \':\'?",
		[g]={{nil,nil,{"A cannot appear before \'::\' because it is not a class",{" or namespace",", namespace, or enumeration"},"; did you mean \':\'?"}}},
		[h]=k,
		[i]="(.*?) cannot appear before \'\\:\\:\' because it is not a class(?: or namespace|, namespace, or enumeration); did you mean \'\\:\'\\?",
		[b]=a,
		[f]=m,
		[e]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon.\n\nParse of nested name spacifier is modified so that it properly recovers\nif colon is mistyped as double colon in case statement.\nThis patch fixes PR15133.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2870\n\nllvm-svn: 206135"},
		[j]={{Db,589,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///       \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (Found.empty() && !ErrorRecoveryLookup) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      // The identifier is found in ordinary lookup. If correction to colon is\n      // allowed, suggest replacement to \':\'.\n      if (IsCorrectedToColon) {\n        // ...\n        Diag(IdInfo.CCLoc, diag::err_nested_name_spec_is_not_class) << IdInfo.Identifier << getLangOpts().CPlusPlus << FixItHint::CreateReplacement(IdInfo.CCLoc, \":\");"}},
		[l]={
			["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:160:16: error: \'V1\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:161:16: error: \'V2\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:162:16: error: \'V3\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:163:12: error: \'V4\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:164:12: error: \'V6\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:170:17: error: \'V5\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:192:21: error: \'n\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:195:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:198:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?"}
		}
	},
	["err_nested_name_spec_non_tag"]={
		[c]="err_nested_name_spec_non_tag",
		[d]="type %0 cannot be used prior to \'::\' because it has no members",
		[g]="type A cannot be used prior to \'::\' because it has no members",
		[h]=k,
		[i]="type (.*?) cannot be used prior to \'\\:\\:\' because it has no members",
		[b]=a,
		[f]=m,
		[e]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template\ninstantiation for C++ typename-specifiers such as\n\n  typename T::type\n\nThe parsing of typename-specifiers is relatively easy thanks to\nannotation tokens. When we see the \"typename\", we parse the\ntypename-specifier and produce a typename annotation token. There are\nonly a few places where we need to handle this. We currently parse the\ntypename-specifier form that terminates in an identifier, but not the\nsimple-template-id form, e.g.,\n\n  typename T::template apply<U, V>\n\nParsing of nested-name-specifiers has a similar problem, since at this\npoint we don\'t have any representation of a class template\nspecialization whose template-name is unknown.\n\nSemantic analysis is only partially complete, with some support for\ntemplate instantiation that works for simple examples. \n\nllvm-svn: 67875"},
		[j]={{Db,961,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  // Alias template specializations can produce types which are not valid\n  // nested name specifiers.\n  if (!T->isDependentType() && !T->getAs<TagType>()) {\n    Diag(TemplateNameLoc, diag::err_nested_name_spec_non_tag) << T;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",1635,"NamedDecl *TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc) {\n  // If the first part of the nested-name-specifier was a template type\n  // parameter, instantiate that type parameter down to a tag type.\n  if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {\n    // ...\n    if (TTP->getDepth() < TemplateArgs.getNumLevels()) {\n      // ...\n      getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:37:42: error: type \'int (*)() __attribute__((noreturn))\' cannot be used prior to \'::\' because it has no members"}
		}
	},
	["err_nested_non_static_member_use"]={
		[c]="err_nested_non_static_member_use",
		[d]="%select{call to non-static member function|use of non-static data member}0 %2 of %1 from nested type %3",
		[g]={{nil,nil,{{"call to non-static member function","use of non-static data member"}," C of B from nested type D"}}},
		[h]=k,
		[i]="(?:call to non\\-static member function|use of non\\-static data member) (.*?) of (.*?) from nested type (.*?)",
		[b]=a,
		[f]=m,
		[e]={"fa0a1f531f7d",1333588384,"Improve diagnostics for invalid use of non-static members / this:","Improve diagnostics for invalid use of non-static members / this:\n\n* s/nonstatic/non-static/ in the diagnostics, since the latter form outvoted\n  the former by 28-2 in our diagnostics.\n* Fix the \"use of member in static member function\" diagnostic to correctly\n  detect this situation inside a block or lambda.\n* Produce a more specific \"invalid use of non-static member\" diagnostic for\n  the case where a nested class member refers to a member of a\n  lexically-surrounding class.\n\nllvm-svn: 154073"},
		[j]={{Cb,228,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n    // ...\n    SemaRef.Diag(Loc, diag::err_nested_non_static_member_use) << IsField << RepClass << nameInfo.getName() << ContextClass << Range;"}},
		[l]={
			["clang/test/CXX/temp/temp.res/temp.dep/p3.cpp"]={"clang/test/CXX/temp/temp.res/temp.dep/p3.cpp:60:24: error: call to non-static member function \'f\' of \'A\' from nested type \'D\'"}
		}
	},
	["err_nested_pointer_qualifier_mismatch"]={
		[c]={{nil,C,"err_nested_pointer_qualifier_mismatch"}},
		[d]={{nil,C,"%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 discards qualifiers in nested pointer types"}},
		[g]={{nil,C,{{{{"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"}}}," discards qualifiers in nested pointer types"}}},
		[h]=k,
		[i]="(?:(?: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)) discards qualifiers in nested pointer types",
		[b]=a,
		[f]={{nil,C,m}},
		[e]={"6f3de50ca73e",1257666394,"Test commit - minor terminology change to my recent patch suggested by John McCall","Test commit - minor terminology change to my recent patch suggested by John McCall\n\nllvm-svn: 86442"},
		[j]={{S,17640,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleNestedPointerQualifiers:\n    if (getLangOpts().CPlusPlus) {\n      // ...\n      DiagKind = diag::err_nested_pointer_qualifier_mismatch;"}}
	},
	["err_nested_redefinition"]={
		[c]="err_nested_redefinition",
		[d]="nested redefinition of %0",
		[g]="nested redefinition of A",
		[h]=k,
		[i]="nested redefinition of (.*?)",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{n,17384,"/// 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            } else {\n              // ...\n              if (TD->isBeingDefined()) {\n                Diag(NameLoc, diag::err_nested_redefinition) << Name;"}},
		[l]={
			["clang/test/Sema/nested-redef.c"]={"clang/test/Sema/nested-redef.c:3:10: error: nested redefinition of \'X\'"}
		}
	},
	["err_new_abi_tag_on_redeclaration"]={
		[c]="err_new_abi_tag_on_redeclaration",
		[d]="\'abi_tag\' %0 missing in original declaration",
		[g]="\'abi_tag\' A missing in original declaration",
		[h]=k,
		[i]="\'abi_tag\' (.*?) missing in original declaration",
		[b]=a,
		[f]=m,
		[e]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews.llvm.org/D12834\n\nDifference between original and this one:\n- fixed all comments in original code review\n- added more tests, all new diagnostics now covered by tests\n- moved abi_tag on re-declaration checks to Sema::mergeDeclAttributes\n  where they actually may work as designed\n- clang-format + other stylistic changes\n\nMangle part will be sent for review as a separate patch.\n\nDifferential Revision: http://reviews.llvm.org/D17567\n\nllvm-svn: 263015"},
		[j]={{n,3257,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  // Re-declaration cannot add abi_tag\'s.\n  if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {\n    if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {\n      for (const auto &NewTag : NewAbiTagAttr->tags()) {\n        if (!llvm::is_contained(OldAbiTagAttr->tags(), NewTag)) {\n          Diag(NewAbiTagAttr->getLocation(), diag::err_new_abi_tag_on_redeclaration) << NewTag;"}},
		[l]={
			["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:27:16: error: \'abi_tag\' C missing in original declaration"}
		}
	},
	["err_new_array_init_args"]={
		[c]="err_new_array_init_args",
		[d]="array \'new\' cannot have initialization arguments",
		[g]="array \'new\' cannot have initialization arguments",
		[h]=k,
		[i]="array \'new\' cannot have initialization arguments",
		[b]=a,
		[f]=m,
		[e]={"c6bb0e117f98",1272901523,"The array form of \'new\' can never have initializers.","The array form of \'new\' can never have initializers.\n\nllvm-svn: 102917"},
		[j]={{eb,2377,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  // Array \'new\' can\'t have any initializers except empty parentheses.\n  // Initializer lists are also allowed, in C++11. Rely on the parser for the\n  // dialect distinction.\n  if (ArraySize && !isLegalArrayNewInitializer(initStyle, Initializer)) {\n    // ...\n    Diag(StartLoc, diag::err_new_array_init_args) << InitRange;"}},
		[l]={
			["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:343:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:346:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:351:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:356:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:561:22: error: array \'new\' cannot have initialization arguments"}
		}
	},
	["err_new_array_nonconst"]={
		[c]="err_new_array_nonconst",
		[d]="only the first dimension of an allocated array may have dynamic size",
		[g]="only the first dimension of an allocated array may have dynamic size",
		[h]=k,
		[i]="only the first dimension of an allocated array may have dynamic size",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{eb,1899,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///   if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // Every dimension shall be of constant size.\n  if (ArraySize) {\n    for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {\n      // ...\n      if (Expr *NumElts = (Expr *)Array.NumElts) {\n        if (!NumElts->isTypeDependent() && !NumElts->isValueDependent()) {\n          // FIXME: GCC permits constant folding here. We should either do so consistently\n          // or not do so at all, rather than changing behavior in C++14 onwards.\n          if (getLangOpts().CPlusPlus14) {\n          // ...\n          } else {\n            Array.NumElts = VerifyIntegerConstantExpression(NumElts, nullptr, diag::err_new_array_nonconst, AllowFold).get();"}},
		[l]={
			["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:99:20: error: only the first dimension of an allocated array may have dynamic size","clang/test/SemaCXX/new-delete.cpp:100:21: error: only the first dimension of an allocated array may have dynamic size"}
		}
	},
	["err_new_array_of_auto"]={
		[c]="err_new_array_of_auto",
		[d]="cannot allocate array of \'auto\'",
		[g]="cannot allocate array of \'auto\'",
		[h]=k,
		[i]="cannot allocate array of \'auto\'",
		[b]=a,
		[f]=m,
		[e]={"30482bc78659",1298171975,"Implement the C++0x deduced \'auto\' feature.","Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069"},
		[j]={{eb,1863,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///   if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    // ...\n    if (D.getDeclSpec().hasAutoTypeSpec())\n      return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto) << D.getSourceRange());"}}
	},
	["err_new_array_size_unknown_from_init"]={
		[c]={{nil,x,"err_new_array_size_unknown_from_init"}},
		[d]={{nil,x,"cannot determine allocated array size from initializer"}},
		[g]={{nil,x,"cannot determine allocated array size from initializer"}},
		[h]=k,
		[i]="cannot determine allocated array size from initializer",
		[b]=a,
		[f]={{nil,x,m}},
		[e]={"b9fb121a62de",1557114435,"[c++20] Implement P1009R2: allow omitting the array bound in an array","[c++20] Implement P1009R2: allow omitting the array bound in an array\nnew expression.\n\nThis was voted into C++20 as a defect report resolution, so we\nretroactively apply it to all prior language modes (though it can never\nactually be used before C++11 mode).\n\nllvm-svn: 360006"},
		[j]={{eb,2426,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  // If we can perform the initialization, and we\'ve not already done so,\n  // do it now.\n  if (!AllocType->isDependentType() && !Expr::hasAnyTypeDependentArguments(Exprs)) {\n    // ...\n    if (ArraySize && !*ArraySize) {\n      // ...\n      if (CAT) {\n      // ...\n      } else {\n        Diag(TypeRange.getEnd(), diag::err_new_array_size_unknown_from_init) << Initializer->getSourceRange();"}},
		[l]={
			["clang/test/AST/issue53742.cpp"]={"clang/test/AST/issue53742.cpp:11:14: error: cannot determine allocated array size from initializer"}
		}
	},
	["err_new_incomplete_or_sizeless_type"]={
		[c]={{nil,C,"err_new_incomplete_or_sizeless_type"}},
		[d]={{nil,C,"allocation of %select{incomplete|sizeless}0 type %1"}},
		[g]={{nil,C,{"allocation of ",{"incomplete","sizeless"}," type B"}}},
		[h]=k,
		[i]="allocation of (?:incomplete|sizeless) type (.*?)",
		[b]=a,
		[f]={{nil,C,m}},
		[e]={fc,1576908663,ec,ac},
		[j]={{eb,2465,"/// Checks that a type is suitable as the allocated type\n/// in a new-expression.\nbool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, SourceRange R) {\n  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))"}},
		[l]={
			["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:12:13: error: allocation of incomplete type \'void\'"}
		}
	},
	["err_no_accessor_for_property"]={
		[c]="err_no_accessor_for_property",
		[d]="no %select{getter|setter}0 defined for property %1",
		[g]={{nil,nil,{lb,{"getter","setter"}," defined for property B"}}},
		[h]=k,
		[i]="no (?:getter|setter) defined for property (.*?)",
		[b]=a,
		[f]=m,
		[e]={"213cf41a5874",1388075704,"s/getter_setter/accessor No functional changes intended.","s/getter_setter/accessor No functional changes intended.\n\nThanks to Alp Toker for the naming suggestion!\n\nllvm-svn: 198052"},
		[j]={{Ub,1471,"ExprResult MSPropertyOpBuilder::buildGet() {\n  if (!RefExpr->getPropertyDecl()->hasGetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 0 /* getter */ << RefExpr->getPropertyDecl();"},{Ub,1500,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  if (!RefExpr->getPropertyDecl()->hasSetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 1 /* setter */ << RefExpr->getPropertyDecl();"}},
		[l]={
			["clang/test/SemaCUDA/cuda-builtin-vars.cu"]={"clang/test/SemaCUDA/cuda-builtin-vars.cu:9:13: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:11:13: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:13:13: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:16:12: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:18:12: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:20:12: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:23:12: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:25:12: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:27:12: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:30:11: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:32:11: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:34:11: error: no setter defined for property \'z\'"}
		}
	},
	["err_no_base_classes"]={
		[c]="err_no_base_classes",
		[d]="invalid use of \'__super\', %0 has no base classes",
		[g]="invalid use of \'__super\', A has no base classes",
		[h]=k,
		[i]="invalid use of \'__super\', (.*?) has no base classes",
		[b]=a,
		[f]=m,
		[e]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236).\n\nWe build a NestedNameSpecifier that records the CXXRecordDecl in which\n__super appeared. Name lookup is performed in all base classes of the\nrecorded CXXRecordDecl. Use of __super is allowed only inside class and\nmember function scope.\n\nllvm-svn: 218484"},
		[j]={{Db,337,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  // ...\n  if (!RD) {\n  // ...\n  } else if (RD->getNumBases() == 0) {\n    Diag(SuperLoc, diag::err_no_base_classes) << RD->getName();"}},
		[l]={
			["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:5:3: error: invalid use of \'__super\', Errors has no base classes"}
		}
	},
	["err_no_declarators"]={
		[c]={{nil,E,"err_no_declarators"}},
		[d]={{nil,E,"declaration does not declare anything"}},
		[g]={{nil,E,"declaration does not declare anything"}},
		[h]=k,
		[i]="declaration does not declare anything",
		[b]=a,
		[f]={{nil,E,m}},
		[e]={U,1236199783,V,X},
		[j]={{n,5265,"/// 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  // C 6.7/2:\n  //   A declaration [...] shall declare at least a declarator [...], a tag,\n  //   or the members of an enumeration.\n  // C++ [dcl.dcl]p3:\n  //   [If there are no declarators], and except for the declaration of an\n  //   unnamed bit-field, the decl-specifier-seq shall introduce one or more\n  //   names into the program, or shall redeclare a name introduced by a\n  //   previous declaration.\n  if (!DeclaresAnything) {\n    // ...\n    Diag(DS.getBeginLoc(), (IsExplicitInstantiation || !TemplateParams.empty()) ? diag::err_no_declarators : diag::ext_no_declarators) << DS.getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:13:2: error: declaration does not declare anything"}
		}
	},
	["err_no_dynamic_cast_with_fno_rtti"]={
		[c]="err_no_dynamic_cast_with_fno_rtti",
		[d]={{nil,o,"use of dynamic_cast requires -frtti"},{r,nil,"cannot use dynamic_cast with -fno-rtti"}},
		[g]={{nil,o,"use of dynamic_cast requires -frtti"},{r,nil,"cannot use dynamic_cast with -fno-rtti"}},
		[h]=k,
		[i]="use of dynamic_cast requires \\-frtti",
		[b]=a,
		[f]=m,
		[e]={"cb6f943ada4c",1375345712,"Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.","Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.\n\nllvm-svn: 187564"},
		[j]={{"clang/lib/Sema/SemaCast.cpp",922,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n  // ...\n  // dynamic_cast is not available with -fno-rtti.\n  // As an exception, dynamic_cast to void* is available because it doesn\'t\n  // use RTTI.\n  if (!Self.getLangOpts().RTTI && !DestPointee->isVoidType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_no_dynamic_cast_with_fno_rtti);"}},
		[l]={
			["clang/test/SemaCXX/no-rtti.cpp"]={"clang/test/SemaCXX/no-rtti.cpp:23:10: error: use of dynamic_cast requires -frtti"}
		}
	},
	["err_no_external_assembler"]={
		[c]="err_no_external_assembler",
		[d]="there is no external assembler that can be used on this platform",
		[g]="there is no external assembler that can be used on this platform",
		[h]=k,
		[i]="there is no external assembler that can be used on this platform",
		[b]=a,
		[f]=w,
		[e]={"c8d4f0fa1d27",1385108866,"Tidy up the no-external-assembler diag","Tidy up the no-external-assembler diag\n\nDiags aren\'t usually in the first person, and \'windows\' isn\'t the correct\nproduct spelling to use in prose. Sidestep issues completely by making this\nerror message platform-neutral.\n\nllvm-svn: 195422"},
		[j]={{"clang/lib/Driver/ToolChains/MSVC.cpp",463,"Tool *MSVCToolChain::buildAssembler() const {\n  // ...\n  getDriver().Diag(clang::diag::err_no_external_assembler);"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",333,"Tool *toolchains::PS5CPU::buildAssembler() const {\n  // ...\n  getDriver().Diag(clang::diag::err_no_external_assembler);"}}
	},
	["err_no_matching_local_friend"]={
		[c]="err_no_matching_local_friend",
		[d]="no matching function found in local scope",
		[g]="no matching function found in local scope",
		[h]=k,
		[i]="no matching function found in local scope",
		[b]=a,
		[f]=m,
		[e]={"f7cfb2212c65",1286948715,"Support friend function declarations in local classes correctly.","Support friend function declarations in local classes correctly.\nFixes a crash and diagnoses the error condition of an unqualified\nfriend which doesn\'t resolve to something.  I\'m still not certain how\nthis is useful.\n\nllvm-svn: 116393"},
		[j]={{n,8956,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"}},
		[l]={
			["clang/test/CXX/class.access/class.friend/p11.cpp"]={"clang/test/CXX/class.access/class.friend/p11.cpp:16:19: error: no matching function found in local scope","clang/test/CXX/class.access/class.friend/p11.cpp:36:21: error: no matching function found in local scope","clang/test/CXX/class.access/class.friend/p11.cpp:89:23: error: no matching function found in local scope"}
		}
	},
	["err_no_matching_local_friend_suggest"]={
		[c]="err_no_matching_local_friend_suggest",
		[d]="no matching function %0 found in local scope; did you mean %3?",
		[g]="no matching function A found in local scope; did you mean D?",
		[h]=k,
		[i]="no matching function (.*?) found in local scope; did you mean (.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={"fd81a350e262",1313691552,"Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when","Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when\ndiagnosing invalid function redeclarations.\n\nllvm-svn: 137966"},
		[j]={{n,9041,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
		[l]={
			["clang/test/SemaCXX/function-redecl.cpp"]={"clang/test/SemaCXX/function-redecl.cpp:49:19: error: no matching function \'bar\' found in local scope; did you mean \'Bar\'?"}
		}
	},
	["err_no_matching_param"]={
		[c]="err_no_matching_param",
		[d]="parameter named %0 is missing",
		[g]="parameter named A is missing",
		[h]=k,
		[i]="parameter named (.*?) is missing",
		[b]=a,
		[f]=D,
		[e]={U,1236199783,V,X},
		[j]={{wb,1564,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // Handle the full declarator list.\n    while (true) {\n      // ...\n      if (Param &&\n        // ...\n        // Scan the argument list looking for the correct param to apply this\n        // type.\n        for (unsigned i = 0;; ++i) {\n          // C99 6.9.1p6: those declarators shall declare only identifiers from\n          // the identifier list.\n          if (i == FTI.NumParams) {\n            Diag(ParmDeclarator.getIdentifierLoc(), diag::err_no_matching_param) << ParmDeclarator.getIdentifier();"}}
	},
	["err_no_member"]={
		[c]="err_no_member",
		[d]="no member named %0 in %1",
		[g]="no member named A in B",
		[h]=k,
		[i]="no member named (.*?) in (.*?)",
		[b]=a,
		[f]=m,
		[e]={"e40876a50cf3",1255468604,"Unify our diagnostic printing for errors of the form, \"we didn\'t like","Unify our diagnostic printing for errors of the form, \"we didn\'t like\nwhat we found when we looked into <blah>\", where <blah> is a\nDeclContext*. We can now format DeclContext*\'s in nice ways, e.g.,\n\"namespace N\", \"the global namespace\", \"\'class Foo\'\".\n\nThis is part of PR3990, but we\'re not quite there yet.\n\nllvm-svn: 84028"},
		[j]={{"clang/lib/Sema/SemaCoroutine.cpp",316,"static ExprResult buildMemberCall(Sema &S, Expr *Base, SourceLocation Loc, StringRef Name, MultiExprArg Args) {\n  // ...\n  // We meant exactly what we asked for. No need for typo correction.\n  if (auto *TE = dyn_cast<TypoExpr>(Result.get())) {\n    // ...\n    S.Diag(Loc, diag::err_no_member) << NameInfo.getName() << Base->getType()->getAsCXXRecordDecl() << Base->getSourceRange();"},{Db,823,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///       \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (!Found.empty()) {\n  // ...\n  } else if (SS.isSet())\n    Diag(IdInfo.IdentifierLoc, diag::err_no_member) << IdInfo.Identifier << LookupCtx << SS.getRange();"},{n,8033,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n    // ...\n    } else if (D.getCXXScopeSpec().isSet()) {\n      // ...\n      Diag(D.getIdentifierLoc(), diag::err_no_member) << Name << computeDeclContext(D.getCXXScopeSpec(), true) << D.getCXXScopeSpec().getRange();"},{I,12762,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///   instantiation of an unresolved using declaration.  We treat\n///   the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  // ...\n  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    } else {\n      Diag(IdentLoc, diag::err_no_member) << NameInfo.getName() << LookupContext << SS.getRange();"},{S,2277,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!TC) {\n    // Emit a special diagnostic for failed member lookups.\n    // FIXME: computing the declaration context might fail here (?)\n    if (Ctx)\n      SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << Ctx << SS.getRange();"},{S,2525,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n  // ...\n  // Emit a special diagnostic for failed member lookups.\n  // FIXME: computing the declaration context might fail here (?)\n  if (!SS.isEmpty()) {\n    Diag(R.getNameLoc(), diag::err_no_member) << Name << computeDeclContext(SS, false) << SS.getRange();"},{S,2869,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  // ...\n  if (R.empty()) {\n    // ...\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{S,16687,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (!MemberDecl)\n      return ExprError(Diag(BuiltinLoc, diag::err_no_member) << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, OC.LocEnd));"},{Cb,720,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n        // ...\n        } else {\n          SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << DC << BaseRange;"},{Cb,1029,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // ...\n  if (R.empty()) {\n    // ...\n    Diag(R.getNameLoc(), diag::err_no_member) << MemberName << DC << (BaseExpr ? BaseExpr->getSourceRange() : SourceRange());"},{O,5035,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // ...\n  if (R.empty()) {\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{O,5159,"/// Form a template name from a name that is syntactically required to name a\n/// template, either due to use of the \'template\' keyword or because a name in\n/// this syntactic context is assumed to name a template (C++ [temp.names]p2-4).\n///\n/// This action forms a template name given the name of the template and its\n/// optional scope specifier. This is used when the \'template\' keyword is used\n/// or when the parsing context unambiguously treats a following \'<\' as\n/// introducing a template argument list. Note that this may produce a\n/// non-dependent template name if we can perform the lookup now and identify\n/// the named template.\n///\n/// For example, given \"x.MetaFun::template apply\", the scope specifier\n/// \\p SS will be \"MetaFun::\", \\p TemplateKWLoc contains the location\n/// of the \"template\" keyword, and \"apply\" is the \\p Name.\nTemplateNameKind Sema::ActOnTemplateName(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext, TemplateTy &Result, bool AllowInjectedClassName) {\n  // ...\n  if (!MemberOfUnknownSpecialization) {\n    // ...\n    if (!LookupTemplateName(R, S, SS, ObjectType.get(), EnteringContext, MOUS, RTK, nullptr, /*AllowTypoCorrection=*/false) && !R.isAmbiguous()) {\n      if (LookupCtx)\n        Diag(Name.getBeginLoc(), diag::err_no_member) << DNI.getName() << LookupCtx << SS.getRange();"}},
		[l]={
			["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:9:17: error: no member named \'operator+\' in \'C1<int>\'"}
		}
	},
	["err_no_member_overloaded_arrow"]={
		[c]="err_no_member_overloaded_arrow",
		[d]="no member named %0 in %1; did you mean to use \'->\' instead of \'.\'?",
		[g]="no member named A in B; did you mean to use \'->\' instead of \'.\'?",
		[h]=k,
		[i]="no member named (.*?) in (.*?); did you mean to use \'\\-\\>\' instead of \'\\.\'\\?",
		[b]=a,
		[f]=m,
		[e]={"76e07347ba02",1335383394,"Add an error message with fixit hint for changing \'.\' to \'->\'.","Add an error message with fixit hint for changing \'.\' to \'->\'.\n\nThis is mainly for attempting to recover in cases where a class provides\na custom operator-> and a \'.\' was accidentally used instead of \'->\' when\naccessing a member of the object returned by the current object\'s\noperator->.\n\nllvm-svn: 155580"},
		[j]={{Cb,1023,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // ...\n  if (R.empty()) {\n    // ...\n    if (ExtraArgs) {\n      // ...\n      if (RetryExpr.isUsable()) {\n        Diag(OpLoc, diag::err_no_member_overloaded_arrow) << MemberName << DC << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
		[l]={
			["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:61:9: error: no member named \'DoSomething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?","clang/test/SemaCXX/arrow-operator.cpp:62:9: error: no member named \'DoSamething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?"}
		}
	},
	["err_no_member_suggest"]={
		[c]="err_no_member_suggest",
		[d]="no member named %0 in %1; did you mean %select{|simply }2%3?",
		[g]={{nil,nil,{"no member named A in B; did you mean ",{a,"simply "},"D?"}}},
		[h]=k,
		[i]="no member named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,\n\ntypo.cpp:22:10: error: use of undeclared identifier \'radious\'; did\n      you mean \'radius\'?\n  return radious * pi;\n         ^~~~~~~\n         radius\n\nThis was super-easy, since we already had decent recovery by looking\nfor names in dependent base classes.\n\nllvm-svn: 92341"},
		[j]={{Db,623,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///       \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (Found.empty() && !ErrorRecoveryLookup && !getLangOpts().MSVCCompat) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, LookupCtx, EnteringContext)) {\n      if (LookupCtx) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"},{n,1010,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        unsigned QualifiedDiag = diag::err_no_member_suggest;"},{I,12722,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///   instantiation of an unresolved using declaration.  We treat\n///   the lookup differently for these declarations.\nNamedDecl *Sema::BuildUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS, DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList, bool IsInstantiation, bool IsUsingIfExists) {\n  // ...\n  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << NameInfo.getName() << LookupContext << 0 << SS.getRange());"},{S,2294,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!Ctx)\n  // ...\n  else\n    SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << Ctx << DroppedSpecifier << SS.getRange(), SemaRef.PDiag(NoteID));"},{S,2511,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n  // ...\n  if (S && Out) {\n  // ...\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    // ...\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      // ...\n      if (SS.isEmpty())\n      // ...\n      else\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << computeDeclContext(SS, false) << DroppedSpecifier << SS.getRange(), PDiag(NoteID), AcceptableWithRecovery);"},{Cb,716,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n          // ...\n          SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << DC << DroppedSpecifier << SS.getRange());"},{"clang/unittests/Sema/ExternalSemaSourceTest.cpp",65,"/// Counts the number of typo-correcting diagnostics correcting from one name to\n/// another while still passing all diagnostics along a chain of consumers.\nclass DiagnosticWatcher : public clang::DiagnosticConsumer {\n  // ...\n  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n    // ...\n    } else if (Info.getID() == diag::err_no_member_suggest) {"}},
		[l]={
			["clang/test/SemaCXX/pr13394-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr13394-crash-on-invalid.cpp:27:5: error: no member named \'Bar\' in namespace \'Foo\'; did you mean simply \'Bar\'?"}
		}
	},
	["err_no_member_template"]={
		[c]={{nil,s,"err_no_member_template"}},
		[d]={{nil,s,"no template named %0 in %1"}},
		[g]={{nil,s,"no template named A in B"}},
		[h]=k,
		[i]="no template named (.*?) in (.*?)",
		[b]=a,
		[f]={{nil,s,m}},
		[e]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
		[j]={{n,812,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  // ...\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n    Diag(IILoc, IsTemplateName ? diag::err_no_member_template : diag::err_typename_nested_not_found) << II << DC << SS->getRange();"}}
	},
	["err_no_member_template_suggest"]={
		[c]="err_no_member_template_suggest",
		[d]="no template named %0 in %1; did you mean %select{|simply }2%3?",
		[g]={{nil,nil,{"no template named A in B; did you mean ",{a,"simply "},"D?"}}},
		[h]=k,
		[i]="no template named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n       basic_string\n\nllvm-svn: 92348"},
		[j]={{n,764,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n    // ...\n    } else {\n      // We found a similarly-named type or interface; suggest that.\n      if (!SS || !SS->isSet()) {\n      // ...\n      } else if (DeclContext *DC = computeDeclContext(*SS, false)) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_member_template_suggest : diag::err_unknown_nested_typename_suggest) << II << DC << DroppedSpecifier << SS->getRange(), CanRecover);"},{n,1017,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n          // ...\n          QualifiedDiag = diag::err_no_member_template_suggest;"},{O,535,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n          // ...\n          diagnoseTypo(Corrected, PDiag(diag::err_no_member_template_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"}},
		[l]={
			["clang/test/SemaTemplate/typo-dependent-name.cpp"]={"clang/test/SemaTemplate/typo-dependent-name.cpp:40:18: error: no template named \'inner\' in \'Y<T>\'; did you mean \'Inner\'?"}
		}
	},
	["err_no_nsconstant_string_class"]={
		[c]="err_no_nsconstant_string_class",
		[d]="cannot find interface declaration for %0",
		[g]="cannot find interface declaration for A",
		[h]=k,
		[i]="cannot find interface declaration for (.*?)",
		[b]=a,
		[f]=m,
		[e]={"0731763efc6f",1272064744,"With -fno-constant-cfstrrings, class NSConstantString","With -fno-constant-cfstrrings, class NSConstantString\nmust be there or it is error (Next runtime).\n\nllvm-svn: 102223"},
		[j]={{mb,113,"ExprResult Sema::BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S) {\n  // ...\n  if (!Ty.isNull()) {\n  // ...\n  } else if (getLangOpts().NoConstantCFStrings) {\n    // ...\n    if (ObjCInterfaceDecl *StrIF = dyn_cast_or_null<ObjCInterfaceDecl>(IF)) {\n    // ...\n    } else {\n      // ...\n      Diag(S->getBeginLoc(), diag::err_no_nsconstant_string_class) << NSIdent << S->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:34:17: error: cannot find interface declaration for \'Q\'"}
		}
	},
	["err_no_submodule"]={
		[c]="err_no_submodule",
		[d]="no submodule named %0 in module \'%1\'",
		[g]="no submodule named A in module \'B\'",
		[h]=k,
		[i]="no submodule named (.*?) in module \'(.*?)\'",
		[b]=a,
		[f]=w,
		[e]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
		[j]={{fb,2093,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      getDiagnostics().Report(Path[I].second, diag::err_no_submodule) << Path[I].first << Module->getFullModuleName() << SourceRange(Path[0].second, Path[I - 1].second);"}},
		[l]={
			["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:19:20: error: no submodule named \'compare\' in module \'std.vector\'"}
		}
	},
	["err_no_submodule_suggest"]={
		[c]="err_no_submodule_suggest",
		[d]="no submodule named %0 in module \'%1\'; did you mean \'%2\'?",
		[g]="no submodule named A in module \'B\'; did you mean \'C\'?",
		[h]=k,
		[i]="no submodule named (.*?) in module \'(.*?)\'; did you mean \'(.*?)\'\\?",
		[b]=a,
		[f]=w,
		[e]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
		[j]={{fb,2080,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      // If there was a clear winner, user it.\n      if (Best.size() == 1) {\n        getDiagnostics().Report(Path[I].second, diag::err_no_submodule_suggest) << Path[I].first << Module->getFullModuleName() << Best[0] << SourceRange(Path[0].second, Path[I - 1].second) << FixItHint::CreateReplacement(SourceRange(Path[I].second), Best[0]);"}},
		[l]={
			["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:14:13: error: no submodule named \'typetraits\' in module \'std\'; did you mean \'type_traits\'?"}
		}
	},
	["err_no_subobject_property_setting"]={
		[c]="err_no_subobject_property_setting",
		[d]="expression is not assignable",
		[g]="expression is not assignable",
		[h]=k,
		[i]="expression is not assignable",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{S,14417,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_SubObjCPropertySetting:\n    DiagID = diag::err_no_subobject_property_setting;"}},
		[l]={
			["clang/test/Sema/va_arg_x86_32.c"]={"clang/test/Sema/va_arg_x86_32.c:4:3: error: expression is not assignable"}
		}
	},
	["err_no_suitable_delete_member_function_found"]={
		[c]="err_no_suitable_delete_member_function_found",
		[d]="no suitable member %0 in %1",
		[g]="no suitable member A in B",
		[h]=k,
		[i]="no suitable member (.*?) in (.*?)",
		[b]=a,
		[f]=m,
		[e]={"2c9e274e57c6",1258303395,"If we find a deallocation function in the class scope, but it is a placement function we should not ...","If we find a deallocation function in the class scope, but it is a placement function we should not look for a deallocation function in the global scope.\n\nllvm-svn: 88851"},
		[j]={{eb,3312,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // We did find operator delete/operator delete[] declarations, but\n  // none of them were suitable.\n  if (!Found.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_no_suitable_delete_member_function_found) << Name << RD;"}},
		[l]={
			["clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp"]={"clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:24:6: error: no suitable member \'operator delete\' in \'promise_type\'","clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:24:6: error: no suitable member \'operator delete\' in \'promise_type\'"}
		}
	},
	["err_no_super_class_message"]={
		[c]="err_no_super_class_message",
		[d]="no @interface declaration found in class messaging of %0",
		[g]="no @interface declaration found in class messaging of A",
		[h]=k,
		[i]="no @interface declaration found in class messaging of (.*?)",
		[b]=a,
		[f]=m,
		[e]={Nb,1480718311,Pb,Lb},
		[j]={{mb,2397,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (!Class) {\n    Diag(SuperLoc, diag::err_no_super_class_message) << Method->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/undef-class-messagin-error.m"]={"clang/test/SemaObjC/undef-class-messagin-error.m:12:24: error: no @interface declaration found in class messaging of \'flushCache2\'"}
		}
	},
	["err_no_template"]={
		[c]={{nil,s,"err_no_template"}},
		[d]={{nil,s,"no template named %0"}},
		[g]={{nil,s,"no template named A"}},
		[h]=k,
		[i]="no template named (.*?)",
		[b]=a,
		[f]={{nil,s,m}},
		[e]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
		[j]={{n,808,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n    Diag(IILoc, IsTemplateName ? diag::err_no_template : diag::err_unknown_typename) << II;"},{O,4120,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Diagnose)\n    Diag(R.getNameLoc(), diag::err_no_template) << R.getLookupName();"}},
		[l]={
			["clang/test/FixIt/typo-crash.cpp"]={"clang/test/FixIt/typo-crash.cpp:5:3: error: no template named \'template_id2\'"}
		}
	},
	["err_no_template_suggest"]={
		[c]="err_no_template_suggest",
		[d]="no template named %0; did you mean %1?",
		[g]="no template named A; did you mean B?",
		[h]=k,
		[i]="no template named (.*?); did you mean (.*?)\\?",
		[b]=a,
		[f]=m,
		[e]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n       basic_string\n\nllvm-svn: 92348"},
		[j]={{n,747,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II);"},{n,755,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    if (Corrected.isKeyword()) {\n    // ...\n    } else {\n      // We found a similarly-named type or interface; suggest that.\n      if (!SS || !SS->isSet()) {\n        diagnoseTypo(Corrected, PDiag(IsTemplateName ? diag::err_no_template_suggest : diag::err_unknown_typename_suggest) << II, CanRecover);"},{n,1016,"Corrected:\n  // ...\n  case LookupResult::NotFound:\n    // ...\n    // Perform typo correction to determine if there is another name that is\n    // close to this name.\n    if (!SecondTry && CCC) {\n      // ...\n      if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n        // ...\n        if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n          UnqualifiedDiag = diag::err_no_template_suggest;"},{O,539,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n        // ...\n        } else {\n          diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << Name);"},{O,4113,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Corrected && Corrected.getFoundDecl()) {\n    diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << ATN->getDeclName());"}},
		[l]={
			["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:9:10: error: no template named \'X\'; did you mean \'N::X\'?"}
		}
	},
	["err_no_typeid_with_fno_rtti"]={
		[c]="err_no_typeid_with_fno_rtti",
		[d]={{nil,o,"use of typeid requires -frtti"},{r,nil,"cannot use typeid with -fno-rtti"}},
		[g]={{nil,o,"use of typeid requires -frtti"},{r,nil,"cannot use typeid with -fno-rtti"}},
		[h]=k,
		[i]="use of typeid requires \\-frtti",
		[b]=a,
		[f]=m,
		[e]={"1b7f39de3d58",1337477241,"Error when using typeid() with -fno-rtti. PR 12888.","Error when using typeid() with -fno-rtti. PR 12888.\n\nllvm-svn: 157139"},
		[j]={{eb,679,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!getLangOpts().RTTI) {\n    return ExprError(Diag(OpLoc, diag::err_no_typeid_with_fno_rtti));"}},
		[l]={
			["clang/test/SemaCXX/no-rtti.cpp"]={"clang/test/SemaCXX/no-rtti.cpp:9:9: error: use of typeid requires -frtti"}
		}
	},
	["err_no_viable_destructor"]={
		[c]={{nil,q,"err_no_viable_destructor"}},
		[d]={{nil,q,"no viable destructor found for class %0"}},
		[g]={{nil,q,"no viable destructor found for class A"}},
		[h]=k,
		[i]="no viable destructor found for class (.*?)",
		[b]=a,
		[f]={{nil,q,m}},
		[e]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
		[j]={{n,18545,"/// [class.dtor]p4:\n///   At the end of the definition of a class, overload resolution is\n///   performed among the prospective destructors declared in that class with\n///   an empty argument list to select the destructor for the class, also\n///   known as the selected destructor.\n///\n/// We do the overload resolution here, then mark the selected constructor in the AST.\n/// Later CXXRecordDecl::getDestructor() will return the selected constructor.\nstatic void ComputeSelectedDestructor(Sema &S, CXXRecordDecl *Record) {\n  // ...\n  case OR_No_Viable_Function:\n    Msg = diag::err_no_viable_destructor;"}},
		[l]={
			["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:61:17: error: no viable destructor found for class \'D<0>\'"}
		}
	},
	["err_nogetter_property_compound_assignment"]={
		[c]="err_nogetter_property_compound_assignment",
		[d]="a getter method is needed to perform a compound assignment on a property",
		[g]="a getter method is needed to perform a compound assignment on a property",
		[h]=k,
		[i]="a getter method is needed to perform a compound assignment on a property",
		[b]=a,
		[f]=m,
		[e]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
		[j]={{Ub,917,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // Verify that we can do a compound assignment.\n  if (opcode != BO_Assign && !findGetter()) {\n    S.Diag(opcLoc, diag::err_nogetter_property_compound_assignment) << LHS->getSourceRange() << RHS->getSourceRange();"}}
	},
	["err_nogetter_property_incdec"]={
		[c]="err_nogetter_property_incdec",
		[d]="no getter method %1 for %select{increment|decrement}0 of property",
		[g]={{nil,nil,{"no getter method B for ",{"increment","decrement"}," of property"}}},
		[h]=k,
		[i]="no getter method (.*?) for (?:increment|decrement) of property",
		[b]=a,
		[f]=m,
		[e]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
		[j]={{Ub,963,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // ...\n  // We also need a getter.\n  if (!findGetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nogetter_property_incdec) << unsigned(UnaryOperator::isDecrementOp(opcode)) << GetterSelector << op->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/error-implicit-property.m"]={"clang/test/SemaObjC/error-implicit-property.m:18:8: error: no getter method \'P\' for increment of property","clang/test/SemaObjC/error-implicit-property.m:19:3: error: no getter method \'P\' for decrement of property"}
		}
	},
	["err_non_asm_stmt_in_naked_function"]={
		[c]="err_non_asm_stmt_in_naked_function",
		[d]="non-ASM statement in naked function is not supported",
		[g]="non-ASM statement in naked function is not supported",
		[h]=k,
		[i]="non\\-ASM statement in naked function is not supported",
		[b]=a,
		[f]=m,
		[e]={"d62cdd2c14c4",1409869000,"Don\'t allow non-ASM statements in naked functions","Don\'t allow non-ASM statements in naked functions\n\nNaked functions don\'t have prologues or epilogues, so doing\ncodegen for anything other than inline assembly would be completely\nhit or miss.\n\nDifferential Revision: http://reviews.llvm.org/D5183\n\nllvm-svn: 217199"},
		[j]={{n,15935,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    // Verify and clean out per-function state.\n    if (Body && (!FD || !FD->isDefaulted())) {\n      // ...\n      if (FD && FD->hasAttr<NakedAttr>()) {\n        for (const Stmt *S : Body->children()) {\n          // ...\n          if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {\n            Diag(S->getBeginLoc(), diag::err_non_asm_stmt_in_naked_function);"}},
		[l]={
			["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:14:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:53:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:57:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:61:3: error: non-ASM statement in naked function is not supported"}
		}
	},
	["err_non_bool_atomic_constraint"]={
		[c]={{nil,v,"err_non_bool_atomic_constraint"}},
		[d]={{nil,v,"atomic constraint must be of type \'bool\' (found %0)"}},
		[g]={{nil,v,"atomic constraint must be of type \'bool\' (found A)"}},
		[h]=k,
		[i]="atomic constraint must be of type \'bool\' \\(found (.*?)\\)",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={"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"},
		[j]={{"clang/lib/Sema/SemaConcept.cpp",149,"bool Sema::CheckConstraintExpression(const Expr *ConstraintExpression, Token NextToken, bool *PossibleNonPrimary, bool IsTrailingRequiresClause) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Type, Context.BoolTy)) {\n    Diag(ConstraintExpression->getExprLoc(), diag::err_non_bool_atomic_constraint) << Type << ConstraintExpression->getSourceRange();"}},
		[l]={
			["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:26:34: error: atomic constraint must be of type \'bool\' (found \'int\')","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:75:34: error: atomic constraint must be of type \'bool\' (found \'int\')"}
		}
	},
	["err_non_c_like_anon_struct_in_typedef"]={
		[c]={{nil,C,"err_non_c_like_anon_struct_in_typedef"}},
		[d]={{nil,C,"anonymous non-C-compatible type given name for linkage purposes by %select{typedef|alias}0 declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}},
		[g]={{nil,C,{"anonymous non-C-compatible type given name for linkage purposes by ",{kb,"alias"}," declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}}},
		[h]=k,
		[i]="anonymous non\\-C\\-compatible type given name for linkage purposes by (?:typedef|alias) declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
		[b]=a,
		[f]={{nil,C,m}},
		[e]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
		[j]={{n,5017,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  // ...\n  if (NonCLike || ChangesLinkage) {\n    // ...\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n      // ...\n      else\n        DiagID = diag::err_non_c_like_anon_struct_in_typedef;"}},
		[l]={
			["clang/test/SemaCXX/linkage2.cpp"]={"clang/test/SemaCXX/linkage2.cpp:250:17: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}
		}
	},
	["err_non_constant_constraint_expression"]={
		[c]={{nil,v,"err_non_constant_constraint_expression"}},
		[d]={{nil,v,"substitution into constraint expression resulted in a non-constant expression"}},
		[g]={{nil,v,"substitution into constraint expression resulted in a non-constant expression"}},
		[h]=k,
		[i]="substitution into constraint expression resulted in a non\\-constant expression",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={"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"},
		[j]={{"clang/lib/Sema/SemaConcept.cpp",276,"template <typename AtomicEvaluator> static ExprResult calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction, AtomicEvaluator &&Evaluator) {\n  // ...\n  if (!SubstitutedAtomicExpr.get()->EvaluateAsConstantExpr(EvalResult, S.Context) || !EvaluationDiags.empty()) {\n    // ...\n    S.Diag(SubstitutedAtomicExpr.get()->getBeginLoc(), diag::err_non_constant_constraint_expression) << SubstitutedAtomicExpr.get()->getSourceRange();"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:29:14: error: substitution into constraint expression resulted in a non-constant expression"}
		}
	},
	["err_non_consteval_override"]={
		[c]={{nil,C,"err_non_consteval_override"}},
		[d]={{nil,C,"non-consteval function %0 cannot override a consteval function"}},
		[g]={{nil,C,"non-consteval function A cannot override a consteval function"}},
		[h]=k,
		[i]="non\\-consteval function (.*?) cannot override a consteval function",
		[b]=a,
		[f]={{nil,C,m}},
		[e]={fc,1576908663,ec,ac},
		[j]={{I,7041,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:460:10: error: non-consteval function \'f\' cannot override a consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:472:28: error: non-consteval function \'operator==\' cannot override a consteval function"}
		}
	},
	["err_non_default_visibility_dllimport"]={
		[c]={{nil,p,"err_non_default_visibility_dllimport"}},
		[d]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
		[g]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
		[h]=k,
		[i]="non\\-default visibility cannot be applied to \'dllimport\' declaration",
		[b]=a,
		[f]={{nil,p,w}},
		[e]={"6f9c4851ab7c",1663023396,"[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllim...","[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport\n\nHidden visibility is incompatible with dllexport.\nHidden and protected visibilities are incompatible with dllimport.\n(PlayStation uses dllexport protected.)\n\nWhen an explicit visibility attribute applies on a dllexport/dllimport\ndeclaration, report a Frontend error (Sema does not compute visibility).\n\nReviewed By: mstorsjo\n\nDifferential Revision: https://reviews.llvm.org/D133266"},
		[j]={{"clang/lib/CodeGen/CodeGenModule.cpp",1388,"void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const {\n  // ...\n  if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) {\n    // ...\n    if (GV->hasDLLExportStorageClass()) {\n    // ...\n    } else if (LV.getVisibility() != DefaultVisibility) {\n      getDiags().Report(D->getLocation(), diag::err_non_default_visibility_dllimport);"}}
	},
	["err_non_deleted_override"]={
		[c]="err_non_deleted_override",
		[d]="non-deleted function %0 cannot override a deleted function",
		[g]="non-deleted function A cannot override a deleted function",
		[h]=k,
		[i]="non\\-deleted function (.*?) cannot override a deleted function",
		[b]=a,
		[f]=m,
		[e]={"7e414261f647",1350434878,"Implement C++ 10.3p16 - overrides involving deleted functions must match.","Implement C++ 10.3p16 - overrides involving deleted functions must match.\n\nOnly deleted functions may override deleted functions and non-deleted functions\nmay only override non-deleted functions.\n\nllvm-svn: 166082"},
		[j]={{I,7027,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isDeleted() ? diag::err_deleted_override : diag::err_non_deleted_override, MD, [&](const CXXMethodDecl *V) { return MD->isDeleted() != V->isDeleted(); })) {"}},
		[l]={
			["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:10:16: error: non-deleted function \'b\' cannot override a deleted function"}
		}
	},
	["err_non_designated_init_used"]={
		[c]={{nil,q,"err_non_designated_init_used"}},
		[d]={{nil,q,"a randomized struct can only be initialized with a designated initializer"}},
		[g]={{nil,q,"a randomized struct can only be initialized with a designated initializer"}},
		[h]=k,
		[i]="a randomized struct can only be initialized with a designated initializer",
		[b]=a,
		[f]={{nil,q,w}},
		[e]={"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"},
		[j]={{"clang/lib/Sema/SemaInit.cpp",2320,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // ...\n  while (Index < IList->getNumInits()) {\n    // ...\n    // Don\'t allow non-designated initializers on randomized structures.\n    if (RD->isRandomized() && !IsZeroInitializer(Init)) {\n      if (!VerifyOnly)\n        SemaRef.Diag(InitLoc, diag::err_non_designated_init_used);"}},
		[l]={
			["clang/test/Sema/init-randomized-struct.c"]={"clang/test/Sema/init-randomized-struct.c:41:30: error: a randomized struct can only be initialized with a designated initializer","clang/test/Sema/init-randomized-struct.c:52:26: error: a randomized struct can only be initialized with a designated initializer","clang/test/Sema/init-randomized-struct.c:53:59: error: a randomized struct can only be initialized with a designated initializer"}
		}
	},
	["err_non_extern_extern"]={
		[c]="err_non_extern_extern",
		[d]="non-extern declaration of %0 follows extern declaration",
		[g]="non-extern declaration of A follows extern declaration",
		[h]=k,
		[i]="non\\-extern declaration of (.*?) follows extern declaration",
		[b]=a,
		[f]=m,
		[e]={"819f61094216",1296457486,"Diagnose if extern local variable is followed by non-extern and vice-versa.","Diagnose if extern local variable is followed by non-extern and vice-versa.\n\nllvm-svn: 124579"},
		[j]={{n,4667,"/// 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  if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && !New->hasExternalStorage()) {\n    Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();"}},
		[l]={
			["clang/test/Sema/private-extern.c"]={"clang/test/Sema/private-extern.c:34:7: error: non-extern declaration of \'g8\' follows extern declaration","clang/test/Sema/private-extern.c:39:7: error: non-extern declaration of \'g9\' follows extern declaration"}
		}
	},
	["err_non_first_default_compare_deletes"]={
		[c]={{nil,v,"err_non_first_default_compare_deletes"}},
		[d]={{nil,v,"defaulting %select{this %select{<ERROR>|equality|three-way|equality|relational}1 comparison operator|the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'}0 would delete it after its first declaration"}},
		[g]={{nil,v,{"defaulting ",{{"this ",{"equality","three-way","equality","relational"}," comparison operator"},"the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'"}," would delete it after its first declaration"}}},
		[h]=k,
		[i]="defaulting (?:this (?:equality|three\\-way|equality|relational) comparison operator|the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\') would delete it after its first declaration",
		[b]=a,
		[f]={{nil,v,m}},
		[e]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
		[j]={{I,8889,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    if (Info.Deleted) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_deletes) << FD->isImplicit() << (int)DCK;"}},
		[l]={
			["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:147:15: error: defaulting this equality comparison operator would delete it after its first declaration","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:149:15: error: defaulting this three-way comparison operator would delete it after its first declaration"}
		}
	},
	["err_non_first_default_compare_in_class"]={
		[c]={{nil,p,"err_non_first_default_compare_in_class"}},
		[d]={{nil,p,"defaulting this %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is not allowed because it was already declared outside the class"}},
		[g]={{nil,p,{"defaulting this ",{"equality","three-way","equality","relational"}," comparison operator is not allowed because it was already declared outside the class"}}},
		[h]=k,
		[i]="defaulting this (?:equality|three\\-way|equality|relational) comparison operator is not allowed because it was already declared outside the class",
		[b]=a,
		[f]={{nil,p,m}},
		[e]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
		[j]={{I,8900,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    // ...\n    if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_in_class) << (int)DCK;"}},
		[l]={
			["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:148:15: error: defaulting this equality comparison operator is not allowed because it was already declared outside the class","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:150:15: error: defaulting this relational comparison operator is not allowed because it was already declared outside the class"}
		}
	},
	["err_non_local_variable_decl_in_for"]={
		[c]="err_non_local_variable_decl_in_for",
		[d]="declaration of non-local variable in \'for\' loop",
		[g]="declaration of non-local variable in \'for\' loop",
		[h]=k,
		[i]="declaration of non\\-local variable in \'for\' loop",
		[b]=a,
		[f]=m,
		[e]={"2eb1c57b9daf",1365454344,"<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteratio...","<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteration declaration.\n\nllvm-svn: 179053"},
		[j]={{G,2150,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n      for (auto *DI : DS->decls()) {\n        if (VarDecl *VD = dyn_cast<VarDecl>(DI)) {\n          // ...\n          if (VD->isLocalVarDecl() && !VD->hasLocalStorage()) {\n            Diag(DI->getLocation(), diag::err_non_local_variable_decl_in_for);"},{G,2308,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n      // ...\n      // C99 6.8.5p3: The declaration part of a \'for\' statement shall only\n      // declare identifiers for objects having storage class \'auto\' or\n      // \'register\'.\n      if (!D->hasLocalStorage())\n        return StmtError(Diag(D->getLocation(), diag::err_non_local_variable_decl_in_for));"}},
		[l]={
			["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:6:34: error: declaration of non-local variable in \'for\' loop","clang/test/Sema/for.c:11:48: error: declaration of non-local variable in \'for\' loop"}
		}
	},
	["err_non_static_static"]={
		[c]="err_non_static_static",
		[d]="non-static declaration of %0 follows static declaration",
		[g]="non-static declaration of A follows static declaration",
		[h]=k,
		[i]="non\\-static declaration of (.*?) follows static declaration",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{n,4653,"/// 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  // C99 6.2.2p4:\n  //   For an identifier declared with the storage-class specifier\n  //   extern in a scope in which a prior declaration of that\n  //   identifier is visible,23) if the prior declaration specifies\n  //   internal or external linkage, the linkage of the identifier at\n  //   the later declaration is the same as the linkage specified at\n  //   the prior declaration. If no prior declaration is visible, or\n  //   if the prior declaration specifies no linkage, then the\n  //   identifier has external linkage.\n  if (New->hasExternalStorage() && Old->hasLinkage())\n  // ...\n  else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && !New->isStaticDataMember() && Old->getCanonicalDecl()->getStorageClass() == SC_Static) {\n    Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();"}},
		[l]={
			["clang/test/Sema/warn-shadow.c"]={"clang/test/Sema/warn-shadow.c:85:7: error: non-static declaration of \'i\' follows static declaration"}
		}
	},
	["err_non_template_in_member_template_id_suggest"]={
		[c]={{nil,s,"err_non_template_in_member_template_id_suggest"}},
		[d]={{nil,s,"member %0 of %1 is not a template; did you mean %select{|simply }2%3?"}},
		[g]={{nil,s,{"member A of B is not a template; did you mean ",{a,"simply "},"D?"}}},
		[h]=k,
		[i]="member (.*?) of (.*?) is not a template; did you mean (?:|simply )(.*?)\\?",
		[b]=a,
		[f]={{nil,s,m}},
		[e]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.\n\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n   cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
		[j]={{O,704,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n        // ...\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_member_template_id_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange(), false);"}},
		[l]={
			["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:28:35: error: member \'goo\' of \'InExpr::Derived2\' is not a template; did you mean \'foo\'?"}
		}
	},
	["err_non_template_in_template_id"]={
		[c]={{nil,s,"err_non_template_in_template_id"}},
		[d]={{nil,s,"%0 does not name a template but is followed by template arguments"}},
		[g]={{nil,s,"A does not name a template but is followed by template arguments"}},
		[h]=k,
		[i]="(.*?) does not name a template but is followed by template arguments",
		[b]=a,
		[f]={{nil,s,m}},
		[e]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.\n\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n   cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
		[j]={{O,719,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  Diag(NameInfo.getLoc(), diag::err_non_template_in_template_id) << Name << SourceRange(Less, Greater);"}},
		[l]={
			["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:23:33: error: \'foo\' does not name a template but is followed by template arguments"}
		}
	},
	["err_non_template_in_template_id_suggest"]={
		[c]={{nil,s,"err_non_template_in_template_id_suggest"}},
		[d]={{nil,s,"%0 does not name a template but is followed by template arguments; did you mean %1?"}},
		[g]={{nil,s,"A does not name a template but is followed by template arguments; did you mean B?"}},
		[h]=k,
		[i]="(.*?) does not name a template but is followed by template arguments; did you mean (.*?)\\?",
		[b]=a,
		[f]={{nil,s,m}},
		[e]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.\n\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n   cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
		[j]={{O,709,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n      // ...\n      } else {\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_template_id_suggest) << Name, false);"}},
		[l]={
			["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:8:21: error: \'typo_first_a\' does not name a template but is followed by template arguments; did you mean \'typo_first_b\'?","clang/test/SemaTemplate/typo-template-name.cpp:13:18: error: \'typo_first_b\' does not name a template but is followed by template arguments; did you mean \'A::typo_first_b\'?","clang/test/SemaTemplate/typo-template-name.cpp:33:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?","clang/test/SemaTemplate/typo-template-name.cpp:34:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?","clang/test/SemaTemplate/typo-template-name.cpp:35:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?"}
		}
	},
	["err_non_thread_thread"]={
		[c]="err_non_thread_thread",
		[d]="non-thread-local declaration of %0 follows thread-local declaration",
		[g]="non-thread-local declaration of A follows thread-local declaration",
		[h]=k,
		[i]="non\\-thread\\-local declaration of (.*?) follows thread\\-local declaration",
		[b]=a,
		[f]=m,
		[e]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
		[j]={{n,4710,"/// 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  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n    // ...\n    } else if (!New->getTLSKind()) {\n      Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();"}},
		[l]={
			["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:13:8: error: non-thread-local declaration of \'d\' follows thread-local declaration"}
		}
	},
	["err_non_trivial_c_union_in_invalid_context"]={
		[c]={{nil,x,"err_non_trivial_c_union_in_invalid_context"}},
		[d]={{nil,x,"cannot %select{use type %1 for a function/method parameter|use type %1 for function/method return|default-initialize an object of type %1|declare an automatic variable of type %1|copy-initialize an object of type %1|assign to a variable of type %1|construct an automatic compound literal of type %1|capture a variable of type %1|cannot use volatile type %1 where it causes an lvalue-to-rvalue conversion}3 since it %select{contains|is}2 a union that is non-trivial to %select{default-initialize|destruct|copy}0"}},
		[g]={{nil,x,{"cannot ",{"use type B for a function/method parameter","use type B for function/method return","default-initialize an object of type B","declare an automatic variable of type B","copy-initialize an object of type B","assign to a variable of type B","construct an automatic compound literal of type B","capture a variable of type B","cannot use volatile type B where it causes an lvalue-to-rvalue conversion"}," since it ",{"contains","is"}," a union that is non-trivial to ",{"default-initialize","destruct","copy"}}}},
		[h]=k,
		[i]="cannot (?:use type (.*?) for a function\\/method parameter|use type (.*?) for function\\/method return|default\\-initialize an object of type (.*?)|declare an automatic variable of type (.*?)|copy\\-initialize an object of type (.*?)|assign to a variable of type (.*?)|construct an automatic compound literal of type (.*?)|capture a variable of type (.*?)|cannot use volatile type (.*?) where it causes an lvalue\\-to\\-rvalue conversion) since it (?:contains|is) a union that is non\\-trivial to (?:default\\-initialize|destruct|copy)",
		[b]=a,
		[f]={{nil,x,m}},
		[e]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of","[Sema] Diagnose default-initialization, destruction, and copying of\nnon-trivial C union types\n\nThis patch diagnoses uses of non-trivial C unions and structs/unions\ncontaining non-trivial C unions in the following contexts, which require\ndefault-initialization, destruction, or copying of the union objects,\ninstead of disallowing fields of non-trivial types in C unions, which is\nwhat we currently do:\n\n- function parameters.\n- function returns.\n- assignments.\n- compound literals.\n- block captures except capturing of `__block` variables by non-escaping\n  blocks.\n- local and global variable definitions.\n- lvalue-to-rvalue conversions of volatile types.\n\nSee the discussion in https://reviews.llvm.org/D62988 for more background.\n\nrdar://problem/50679094\n\nDifferential Revision: https://reviews.llvm.org/D63753\n\nllvm-svn: 365985"},
		[j]={{n,12933,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 0 << OrigTy << IsUnion << UseContext;"},{n,12998,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 1 << OrigTy << IsUnion << UseContext;"},{n,13064,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n        S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 2 << OrigTy << IsUnion << UseContext;"}},
		[l]={
			["clang/test/SemaObjC/non-trivial-c-union.m"]={
				[1]="clang/test/SemaObjC/non-trivial-c-union.m:16:4: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[2]="clang/test/SemaObjC/non-trivial-c-union.m:18:4: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
				[3]="clang/test/SemaObjC/non-trivial-c-union.m:20:10: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[4]="clang/test/SemaObjC/non-trivial-c-union.m:22:11: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct",
				[5]="clang/test/SemaObjC/non-trivial-c-union.m:22:11: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy",
				[6]="clang/test/SemaObjC/non-trivial-c-union.m:22:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct",
				[7]="clang/test/SemaObjC/non-trivial-c-union.m:22:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy",
				[8]="clang/test/SemaObjC/non-trivial-c-union.m:23:11: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct",
				[9]="clang/test/SemaObjC/non-trivial-c-union.m:23:11: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy",
				[10]="clang/test/SemaObjC/non-trivial-c-union.m:23:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct",
				[11]="clang/test/SemaObjC/non-trivial-c-union.m:23:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy",
				[12]="clang/test/SemaObjC/non-trivial-c-union.m:26:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct",
				[13]="clang/test/SemaObjC/non-trivial-c-union.m:26:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy",
				[14]="clang/test/SemaObjC/non-trivial-c-union.m:26:13: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct",
				[15]="clang/test/SemaObjC/non-trivial-c-union.m:26:13: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy",
				[16]="clang/test/SemaObjC/non-trivial-c-union.m:27:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct",
				[17]="clang/test/SemaObjC/non-trivial-c-union.m:27:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy",
				[18]="clang/test/SemaObjC/non-trivial-c-union.m:27:13: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct",
				[19]="clang/test/SemaObjC/non-trivial-c-union.m:27:13: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy",
				[20]="clang/test/SemaObjC/non-trivial-c-union.m:31:14: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct",
				[21]="clang/test/SemaObjC/non-trivial-c-union.m:31:14: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy",
				[22]="clang/test/SemaObjC/non-trivial-c-union.m:31:9: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct",
				[23]="clang/test/SemaObjC/non-trivial-c-union.m:31:9: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy",
				[24]="clang/test/SemaObjC/non-trivial-c-union.m:32:14: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct",
				[25]="clang/test/SemaObjC/non-trivial-c-union.m:32:14: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy",
				[26]="clang/test/SemaObjC/non-trivial-c-union.m:32:9: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct",
				[27]="clang/test/SemaObjC/non-trivial-c-union.m:32:9: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy",
				[28]="clang/test/SemaObjC/non-trivial-c-union.m:35:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[29]="clang/test/SemaObjC/non-trivial-c-union.m:35:6: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[30]="clang/test/SemaObjC/non-trivial-c-union.m:36:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[31]="clang/test/SemaObjC/non-trivial-c-union.m:36:11: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
				[32]="clang/test/SemaObjC/non-trivial-c-union.m:37:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[33]="clang/test/SemaObjC/non-trivial-c-union.m:38:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[34]="clang/test/SemaObjC/non-trivial-c-union.m:39:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[35]="clang/test/SemaObjC/non-trivial-c-union.m:39:6: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
				[36]="clang/test/SemaObjC/non-trivial-c-union.m:40:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[37]="clang/test/SemaObjC/non-trivial-c-union.m:40:11: error: cannot copy-initialize an object of type \'S0\' since it contains a union that is non-trivial to copy",
				[38]="clang/test/SemaObjC/non-trivial-c-union.m:41:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[39]="clang/test/SemaObjC/non-trivial-c-union.m:41:13: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
				[40]="clang/test/SemaObjC/non-trivial-c-union.m:42:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[41]="clang/test/SemaObjC/non-trivial-c-union.m:42:19: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
				[42]="clang/test/SemaObjC/non-trivial-c-union.m:43:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[43]="clang/test/SemaObjC/non-trivial-c-union.m:43:11: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[44]="clang/test/SemaObjC/non-trivial-c-union.m:47:3: error: cannot assign to a variable of type \'U0\' since it is a union that is non-trivial to copy",
				[45]="clang/test/SemaObjC/non-trivial-c-union.m:48:3: error: cannot assign to a variable of type \'S0\' since it contains a union that is non-trivial to copy",
				[46]="clang/test/SemaObjC/non-trivial-c-union.m:51:10: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
				[47]="clang/test/SemaObjC/non-trivial-c-union.m:52:10: error: cannot copy-initialize an object of type \'S0\' since it contains a union that is non-trivial to copy",
				[48]="clang/test/SemaObjC/non-trivial-c-union.m:53:16: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[49]="clang/test/SemaObjC/non-trivial-c-union.m:56:19: error: cannot construct an automatic compound literal of type \'U0\' since it is a union that is non-trivial to destruct",
				[50]="clang/test/SemaObjC/non-trivial-c-union.m:57:19: error: cannot construct an automatic compound literal of type \'U0\' since it is a union that is non-trivial to destruct",
				[51]="clang/test/SemaObjC/non-trivial-c-union.m:58:19: error: cannot construct an automatic compound literal of type \'S0\' since it contains a union that is non-trivial to destruct",
				[52]="clang/test/SemaObjC/non-trivial-c-union.m:58:31: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
				[53]="clang/test/SemaObjC/non-trivial-c-union.m:59:19: error: cannot construct an automatic compound literal of type \'S0\' since it contains a union that is non-trivial to destruct",
				[54]="clang/test/SemaObjC/non-trivial-c-union.m:59:23: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[55]="clang/test/SemaObjC/non-trivial-c-union.m:67:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[56]="clang/test/SemaObjC/non-trivial-c-union.m:67:6: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[57]="clang/test/SemaObjC/non-trivial-c-union.m:68:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[58]="clang/test/SemaObjC/non-trivial-c-union.m:68:6: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
				[59]="clang/test/SemaObjC/non-trivial-c-union.m:69:14: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[60]="clang/test/SemaObjC/non-trivial-c-union.m:69:14: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
				[61]="clang/test/SemaObjC/non-trivial-c-union.m:70:14: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[62]="clang/test/SemaObjC/non-trivial-c-union.m:70:14: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
				[63]="clang/test/SemaObjC/non-trivial-c-union.m:72:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[64]="clang/test/SemaObjC/non-trivial-c-union.m:72:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy",
				[65]="clang/test/SemaObjC/non-trivial-c-union.m:77:18: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[66]="clang/test/SemaObjC/non-trivial-c-union.m:77:18: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy",
				[67]="clang/test/SemaObjC/non-trivial-c-union.m:76:18: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[68]="clang/test/SemaObjC/non-trivial-c-union.m:76:18: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy",
				[69]="clang/test/SemaObjC/non-trivial-c-union.m:75:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[70]="clang/test/SemaObjC/non-trivial-c-union.m:75:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy",
				[71]="clang/test/SemaObjC/non-trivial-c-union.m:74:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct",
				[72]="clang/test/SemaObjC/non-trivial-c-union.m:74:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy",
				[73]="clang/test/SemaObjC/non-trivial-c-union.m:73:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct",
				[74]="clang/test/SemaObjC/non-trivial-c-union.m:73:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy",
				[75]="clang/test/SemaObjC/non-trivial-c-union.m:83:9: error: cannot cannot use volatile type \'volatile U0\' where it causes an lvalue-to-rvalue conversion since it is a union that is non-trivial to destruct",
				[76]="clang/test/SemaObjC/non-trivial-c-union.m:83:9: error: cannot cannot use volatile type \'volatile U0\' where it causes an lvalue-to-rvalue conversion since it is a union that is non-trivial to copy",
				[77]="clang/test/SemaObjC/non-trivial-c-union.m:88:42: error: cannot use type \'U1_SystemHeader\' for a function/method parameter since it is a union that is non-trivial to destruct",
				[78]="clang/test/SemaObjC/non-trivial-c-union.m:88:42: error: cannot use type \'U1_SystemHeader\' for a function/method parameter since it is a union that is non-trivial to copy"
			}
		}
	},
	["err_non_type_template_arg_addr_label_diff"]={
		[c]="err_non_type_template_arg_addr_label_diff",
		[d]="template argument / label address difference / what did you expect?",
		[g]="template argument / label address difference / what did you expect?",
		[h]=k,
		[i]="template argument \\/ label address difference \\/ what did you expect\\?",
		[b]=a,
		[f]=m,
		[e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
		[j]={{O,7397,"/// 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  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::AddrLabelDiff:\n      return Diag(StartLoc, diag::err_non_type_template_arg_addr_label_diff);"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:58:18: error: template argument / label address difference / what did you expect?"}
		}
	},
	["err_non_type_template_arg_subobject"]={
		[c]="err_non_type_template_arg_subobject",
		[d]="non-type template argument refers to subobject \'%0\'",
		[g]="non-type template argument refers to subobject \'A\'",
		[h]=k,
		[i]="non\\-type template argument refers to subobject \'(.*?)\'",
		[b]=a,
		[f]=m,
		[e]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
		[j]={{O,7369,"/// 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  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::LValue: {\n      // ...\n      // -- a subobject\n      // FIXME: Until C++20\n      if (Value.hasLValuePath() && Value.getLValuePath().size() == 1 && VD && VD->getType()->isArrayType() && Value.getLValuePath()[0].getAsArrayIndex() == 0 && !Value.isLValueOnePastTheEnd() && ParamType->isPointerType()) {\n      // ...\n      } else if (!Value.hasLValuePath() || Value.getLValuePath().size() || Value.isLValueOnePastTheEnd()) {\n        Diag(StartLoc, diag::err_non_type_template_arg_subobject) << Value.getAsString(Context, ParamType);"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:20:20: error: non-type template argument refers to subobject \'&n + 1\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:21:20: error: non-type template argument refers to subobject \'&n + 1\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:23:20: error: non-type template argument refers to subobject \'&s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:24:20: error: non-type template argument refers to subobject \'&s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:26:20: error: non-type template argument refers to subobject \'&s.n[3]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:27:20: error: non-type template argument refers to subobject \'&s.n[3]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:33:20: error: non-type template argument refers to subobject \'s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:34:20: error: non-type template argument refers to subobject \'s.n[2]\'"}
		}
	},
	["err_non_type_template_arg_unsupported"]={
		[c]={{nil,E,"err_non_type_template_arg_unsupported"}},
		[d]={{nil,E,"sorry, non-type template argument of type %0 is not yet supported"}},
		[g]={{nil,E,"sorry, non-type template argument of type A is not yet supported"}},
		[h]=k,
		[i]="sorry, non\\-type template argument of type (.*?) is not yet supported",
		[b]=a,
		[f]={{nil,E,m}},
		[e]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[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"},
		[j]={{O,7404,"/// 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  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::FixedPoint:\n    case APValue::Float:\n    case APValue::ComplexInt:\n    case APValue::ComplexFloat:\n    case APValue::Vector:\n    case APValue::Array:\n      return Diag(StartLoc, diag::err_non_type_template_arg_unsupported) << ParamType;"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:11:18: error: sorry, non-type template argument of type \'float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:12:18: error: sorry, non-type template argument of type \'float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:51:23: error: sorry, non-type template argument of type \'_Complex int\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:52:23: error: sorry, non-type template argument of type \'_Complex int\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:55:25: error: sorry, non-type template argument of type \'_Complex float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:56:25: error: sorry, non-type template argument of type \'_Complex float\' is not yet supported"}
		}
	},
	["err_non_type_template_in_nested_name_specifier"]={
		[c]="err_non_type_template_in_nested_name_specifier",
		[d]="qualified name refers into a specialization of %select{function|variable}0 template %1",
		[g]={{nil,nil,{"qualified name refers into a specialization of ",{"function","variable"}," template B"}}},
		[h]=k,
		[i]="qualified name refers into a specialization of (?:function|variable) template (.*?)",
		[b]=a,
		[f]=m,
		[e]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType\nto cope with non-type templates by providing appropriate\nerrors. Previously, we would either assert, crash, or silently build a\ndependent type when we shouldn\'t. Fixes PR9226.\n\nllvm-svn: 127037"},
		[j]={{Db,946,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  if (Template.getAsOverloadedTemplate() || DTN || isa<FunctionTemplateDecl>(TD) || isa<VarTemplateDecl>(TD)) {\n    // ...\n    Diag(CCLoc, diag::err_non_type_template_in_nested_name_specifier) << (TD && isa<VarTemplateDecl>(TD)) << Template << R;"}},
		[l]={
			["clang/test/SemaTemplate/nested-name-spec-template.cpp"]={"clang/test/SemaTemplate/nested-name-spec-template.cpp:114:9: error: qualified name refers into a specialization of function template \'nt\'","clang/test/SemaTemplate/nested-name-spec-template.cpp:124:11: error: qualified name refers into a specialization of function template \'f\'"}
		}
	},
	["err_non_type_template_parm_type_deduction_failure"]={
		[c]="err_non_type_template_parm_type_deduction_failure",
		[d]="non-type template parameter %0 with type %1 has incompatible initializer of type %2",
		[g]="non-type template parameter A with type B has incompatible initializer of type C",
		[h]=k,
		[i]="non\\-type template parameter (.*?) with type (.*?) has incompatible initializer of type (.*?)",
		[b]=a,
		[f]=m,
		[e]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in","P0127R2: Support type deduction for types of non-type template parameters in\nC++1z.\n\nPatch by James Touton! Some bugfixes and rebasing by me.\n\nllvm-svn: 282651"},
		[j]={{O,7171,"/// 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  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    // ...\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n    // ...\n    } else {\n      // ...\n      if (Result == TDK_AlreadyDiagnosed) {\n      // ...\n      } else if (Result != TDK_Success) {\n        Diag(Arg->getExprLoc(), diag::err_non_type_template_parm_type_deduction_failure) << Param->getDeclName() << Param->getType() << Arg->getType() << Arg->getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:465:5: error: non-type template parameter \'f\' with type \'auto (*)() -> auto\' has incompatible initializer of type \'std::nullptr_t\'"}
		}
	},
	["err_non_variable_decl_in_for"]={
		[c]="err_non_variable_decl_in_for",
		[d]="non-variable declaration in \'for\' loop",
		[g]="non-variable declaration in \'for\' loop",
		[h]=k,
		[i]="non\\-variable declaration in \'for\' loop",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{G,100,"void Sema::ActOnForEachDeclStmt(DeclGroupPtrTy dg) {\n  // ...\n  if (!var) {\n    Diag(decl->getLocation(), diag::err_non_variable_decl_in_for);"},{G,2164,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n      // Diagnose if we saw a non-variable declaration but no variable\n      // declarations.\n      if (NonVarSeen && !VarDeclSeen)\n        Diag(NonVarSeen->getLocation(), diag::err_non_variable_decl_in_for);"}},
		[l]={
			["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:5:28: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:7:35: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:10:30: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:13:31: error: non-variable declaration in \'for\' loop"}
		}
	},
	["err_non_virtual_pure"]={
		[c]="err_non_virtual_pure",
		[d]="%0 is not virtual and cannot be declared pure",
		[g]="A is not virtual and cannot be declared pure",
		[h]=k,
		[i]="(.*?) is not virtual and cannot be declared pure",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{I,18141,"/// Mark the given method pure.\n///\n/// \\param Method the method to be marked pure.\n///\n/// \\param InitRange the source range that covers the \"0\" initializer.\nbool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {\n  // ...\n  if (!Method->isInvalidDecl())\n    Diag(Method->getLocation(), diag::err_non_virtual_pure) << Method->getDeclName() << InitRange;"}},
		[l]={
			["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:7:8: error: \'h\' is not virtual and cannot be declared pure","clang/test/SemaCXX/virtuals.cpp:25:8: error: \'g\' is not virtual and cannot be declared pure"}
		}
	},
	["err_nonfunction_block_type"]={
		[c]="err_nonfunction_block_type",
		[d]="block pointer to non-function type is invalid",
		[g]="block pointer to non-function type is invalid",
		[h]=k,
		[i]="block pointer to non\\-function type is invalid",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{lc,3138,"/// Build a block pointer type.\n///\n/// \\param T The type to which we\'ll be building a block pointer.\n///\n/// \\param Loc The source location, used for diagnostics.\n///\n/// \\param Entity The name of the entity that involves the block pointer\n/// type, if known.\n///\n/// \\returns A suitable block pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildBlockPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n  if (!T->isFunctionType()) {\n    Diag(Loc, diag::err_nonfunction_block_type);"}},
		[l]={
			["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:61:14: error: block pointer to non-function type is invalid"}
		}
	},
	["err_nonstatic_member_out_of_line"]={
		[c]="err_nonstatic_member_out_of_line",
		[d]="non-static data member defined out-of-line",
		[g]="non-static data member defined out-of-line",
		[h]=k,
		[i]="non\\-static data member defined out\\-of\\-line",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{n,8026,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n      if (Previous.isSingleResult() && isa<FieldDecl>(Previous.getFoundDecl()) && D.getCXXScopeSpec().isSet()) {\n        // ...\n        Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line) << D.getCXXScopeSpec().getRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:12:21: error: non-static data member defined out-of-line"}
		}
	},
	["err_nontemporal_builtin_must_be_pointer"]={
		[c]="err_nontemporal_builtin_must_be_pointer",
		[d]="address argument to nontemporal builtin must be a pointer (%0 invalid)",
		[g]="address argument to nontemporal builtin must be a pointer (A invalid)",
		[h]=k,
		[i]="address argument to nontemporal builtin must be a pointer \\((.*?) invalid\\)",
		[b]=a,
		[f]=m,
		[e]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
		[j]={{N,5289,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!PtrType) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{N,7934,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"}}
	},
	["err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector"]={
		[c]="err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector",
		[d]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (%0 invalid)",
		[g]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (A invalid)",
		[h]=k,
		[i]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types \\((.*?) invalid\\)",
		[b]=a,
		[f]=m,
		[e]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
		[j]={{N,5300,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType() && !ValType->isRVVType()) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"},{N,7947,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType()) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"}}
	},
	["err_noreturn_block_has_return_expr"]={
		[c]="err_noreturn_block_has_return_expr",
		[d]="block declared \'noreturn\' should not return",
		[g]="block declared \'noreturn\' should not return",
		[h]=k,
		[i]="block declared \'noreturn\' should not return",
		[b]=a,
		[f]=m,
		[e]={"88788feddd21",1241031793,"Sema and CodeGen support for attributes on blocks.  Radar 6441502","Sema and CodeGen support for attributes on blocks.  Radar 6441502\n\nllvm-svn: 70403"},
		[j]={{dc,597,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{dc,601,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{G,3657,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n    if (CurBlock->FunctionType->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_block_has_return_expr);"}},
		[l]={
			["clang/test/Sema/block-return-2.c"]={"clang/test/Sema/block-return-2.c:4:40: error: block declared \'noreturn\' should not return"}
		}
	},
	["err_noreturn_lambda_has_return_expr"]={
		[c]="err_noreturn_lambda_has_return_expr",
		[d]="lambda declared \'noreturn\' should not return",
		[g]="lambda declared \'noreturn\' should not return",
		[h]=k,
		[i]="lambda declared \'noreturn\' should not return",
		[b]=a,
		[f]="Lambda Issue",
		[e]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
		[j]={{dc,612,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{dc,616,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForLambda() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{G,3668,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n  // ...\n  } else {\n    // ...\n    if (CurLambda->CallOperator->getType()->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_lambda_has_return_expr);"}}
	},
	["err_noreturn_non_function"]={
		[c]="err_noreturn_non_function",
		[d]="\'_Noreturn\' can only appear on functions",
		[g]="\'_Noreturn\' can only appear on functions",
		[h]=k,
		[i]="\'_Noreturn\' can only appear on functions",
		[b]=a,
		[f]=m,
		[e]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet.","Parsing support for C11\'s _Noreturn keyword. No semantics yet.\n\nllvm-svn: 172761"},
		[j]={{n,6653,"/// Diagnose function specifiers on a declaration of an identifier that\n/// does not identify a function.\nvoid Sema::DiagnoseFunctionSpecifiers(const DeclSpec &DS) {\n  // ...\n  if (DS.isNoreturnSpecified())\n    Diag(DS.getNoreturnSpecLoc(), diag::err_noreturn_non_function);"}},
		[l]={
			["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:9:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:10:6: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:12:9: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:14:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:15:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:16:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:22:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:23:11: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:24:8: error: \'_Noreturn\' can only appear on functions"}
		}
	},
	["err_nosetter_property_assignment"]={
		[c]="err_nosetter_property_assignment",
		[d]="%select{assignment to readonly property|no setter method %1 for assignment to property}0",
		[g]={{nil,nil,{{"assignment to readonly property","no setter method B for assignment to property"}}}},
		[h]=k,
		[i]="(?:assignment to readonly property|no setter method (.*?) for assignment to property)",
		[b]=a,
		[f]=m,
		[e]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
		[j]={{Ub,906,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_assignment) << unsigned(RefExpr->isImplicitProperty()) << SetterSelector << LHS->getSourceRange() << RHS->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/property-category-1.m"]={"clang/test/SemaObjC/property-category-1.m:51:11: error: assignment to readonly property"}
		}
	},
	["err_nosetter_property_incdec"]={
		[c]="err_nosetter_property_incdec",
		[d]="%select{%select{increment|decrement}1 of readonly property|no setter method %2 for %select{increment|decrement}1 of property}0",
		[g]={{nil,nil,{{{{"increment","decrement"}," of readonly property"},{"no setter method C for ",{"increment","decrement"}," of property"}}}}},
		[h]=k,
		[i]="(?:(?:increment|decrement) of readonly property|no setter method (.*?) for (?:increment|decrement) of property)",
		[b]=a,
		[f]=m,
		[e]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
		[j]={{Ub,950,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_incdec) << unsigned(RefExpr->isImplicitProperty()) << unsigned(UnaryOperator::isDecrementOp(opcode)) << SetterSelector << op->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/error-implicit-property.m"]={"clang/test/SemaObjC/error-implicit-property.m:22:8: error: no setter method \'setP:\' for increment of property","clang/test/SemaObjC/error-implicit-property.m:23:8: error: no setter method \'setP:\' for decrement of property"}
		}
	},
	["err_not_class_template_specialization"]={
		[c]="err_not_class_template_specialization",
		[d]="cannot specialize a %select{dependent template|template template parameter}0",
		[g]={{nil,nil,{"cannot specialize a ",{"dependent template","template template parameter"}}}},
		[h]=k,
		[i]="cannot specialize a (?:dependent template|template template parameter)",
		[b]=a,
		[f]=m,
		[e]={"dd6c0356bae5",1257986780,"Improve recovery in a wonky case where one tries to specialize a","Improve recovery in a wonky case where one tries to specialize a\ntemplate template parameter.\n\nWhen building a template-id type, check whether the template-name\nitself is dependent (even if the template arguments are not!) and\nhandle it as a template-id type.\n\nllvm-svn: 86913"},
		[j]={{O,8632,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_not_class_template_specialization) << (Name.getAsTemplateDecl() && isa<TemplateTemplateParmDecl>(Name.getAsTemplateDecl()));"}},
		[l]={
			["clang/test/CXX/temp/temp.spec/part.spec.cpp"]={"clang/test/CXX/temp/temp.spec/part.spec.cpp:339:96: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:345:96: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:371:99: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:374:99: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:399:97: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:402:97: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:449:98: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:472:73: error: cannot specialize a dependent template"}
		}
	},
	["err_not_direct_base_or_virtual"]={
		[c]="err_not_direct_base_or_virtual",
		[d]="type %0 is not a direct or virtual base of %1",
		[g]="type A is not a direct or virtual base of B",
		[h]=k,
		[i]="type (.*?) is not a direct or virtual base of (.*?)",
		[b]=a,
		[f]=m,
		[e]={"7baa71e2dd9c",1246383292,"More diagnostics related to initialization of direct bases","More diagnostics related to initialization of direct bases\nin ctor-initializer list.\n\nllvm-svn: 74541"},
		[j]={{I,4743,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!Dependent) {\n    // ...\n    // C++ [base.class.init]p2:\n    // Unless the mem-initializer-id names a nonstatic data member of the\n    // constructor\'s class or a direct or virtual base of that class, the\n    // mem-initializer is ill-formed.\n    if (!DirectBaseSpec && !VirtualBaseSpec) {\n      // If the class has any dependent bases, then it\'s possible that\n      // one of those types will resolve to the same type as\n      // BaseType. Therefore, just treat this as a dependent base\n      // class initialization.  FIXME: Should we try to check the\n      // initialization anyway? It seems odd.\n      if (ClassDecl->hasAnyDependentBases())\n      // ...\n      else\n        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual) << BaseType << Context.getTypeDeclType(ClassDecl) << BaseTInfo->getTypeLoc().getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/class-template-ctor-initializer.cpp"]={"clang/test/SemaTemplate/class-template-ctor-initializer.cpp:26:14: error: type \'TmplB<int>\' is not a direct or virtual base of \'TmplC\'","clang/test/SemaTemplate/class-template-ctor-initializer.cpp:32:13: error: type \'Tmpl<int>\' is not a direct or virtual base of \'TmplD\'"}
		}
	},
	["err_not_found_by_two_phase_lookup"]={
		[c]="err_not_found_by_two_phase_lookup",
		[d]="call to function %0 that is neither visible in the template definition nor found by argument-dependent lookup",
		[g]="call to function A that is neither visible in the template definition nor found by argument-dependent lookup",
		[h]=k,
		[i]="call to function (.*?) that is neither visible in the template definition nor found by argument\\-dependent lookup",
		[b]=a,
		[f]=m,
		[e]={"998a591e3261",1307313768,"Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept...","Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept due to a lack of proper support for two-phase name lookup.\n\nllvm-svn: 132672"},
		[j]={{hc,13203,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  // ...\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) << R.getLookupName();"}},
		[l]={
			["clang/test/SemaTemplate/dependent-names-no-std.cpp"]={"clang/test/SemaTemplate/dependent-names-no-std.cpp:14:7: error: call to function \'f\' that is neither visible in the template definition nor found by argument-dependent lookup"}
		}
	},
	["err_not_integral_type_anon_bitfield"]={
		[c]="err_not_integral_type_anon_bitfield",
		[d]="anonymous bit-field has non-integral type %0",
		[g]="anonymous bit-field has non-integral type A",
		[h]=k,
		[i]="anonymous bit\\-field has non\\-integral type (.*?)",
		[b]=a,
		[f]=m,
		[e]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"},
		[j]={{n,17901,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield) << FieldTy << BitWidth->getSourceRange();"}},
		[l]={
			["clang/test/Sema/bitfield.c"]={"clang/test/Sema/bitfield.c:27:3: error: anonymous bit-field has non-integral type \'float\'","clang/test/Sema/bitfield.c:44:3: error: anonymous bit-field has non-integral type \'double\'"}
		}
	},
	["err_not_integral_type_bitfield"]={
		[c]="err_not_integral_type_bitfield",
		[d]="bit-field %0 has non-integral type %1",
		[g]="bit-field A has non-integral type B",
		[h]=k,
		[i]="bit\\-field (.*?) has non\\-integral type (.*?)",
		[b]=a,
		[f]=m,
		[e]={U,1236199783,V,X},
		[j]={{n,17899,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_not_integral_type_bitfield) << FieldName << FieldTy << BitWidth->getSourceRange();"},{I,3635,"/// 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  } else {\n    // ...\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      // ...\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n      // ...\n      } else if (isa<TypedefDecl>(Member)) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_not_integral_type_bitfield) << Name << cast<ValueDecl>(Member)->getType() << BitWidth->getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-field.cpp"]={"clang/test/SemaTemplate/instantiate-field.cpp:8:5: error: bit-field \'bitfield\' has non-integral type \'float\'"}
		}
	},
	["err_not_tag_in_scope"]={
		[c]="err_not_tag_in_scope",
		[d]="no %select{struct|interface|union|class|enum}0 named %1 in %2",
		[g]={{nil,nil,{lb,{"struct","interface","union",db,"enum"}," named B in C"}}},
		[h]=k,
		[i]="no (?:struct|interface|union|class|enum) named (.*?) in (.*?)",
		[b]=a,
		[f]=m,
		[e]={ab,1237025389,Z,Y},
		[j]={{n,16976,"/// 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 (Name && SS.isNotEmpty()) {\n    // ...\n    if (Previous.empty()) {\n      // ...\n      Diag(NameLoc, diag::err_not_tag_in_scope) << Kind << Name << DC << SS.getRange();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1659,"Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {\n  // ...\n  if (isFriend) {\n    // ...\n    if (!PrevClassTemplate && QualifierLoc) {\n      SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope) << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC << QualifierLoc.getSourceRange();"}},
		[l]={
			["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:215:10: error: no struct named \'foo\' in the global namespace"}
		}
	},
	["err_ns_attribute_wrong_parameter_type"]={
		[c]="err_ns_attribute_wrong_parameter_type",
		[d]="%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters",
		[g]={{nil,nil,{"A attribute only applies to ",{"Objective-C object","pointer","pointer-to-CF-pointer"}," parameters"}}},
		[h]=k,
		[i]="(.*?) attribute only applies to (?:Objective\\-C object|pointer|pointer\\-to\\-CF\\-pointer) parameters",
		[b]=a,
		[f]=m,
		[e]={"3b5a8f5ffc83",1456963803,"Improve some infrastructure for extended parameter infos and","Improve some infrastructure for extended parameter infos and\nfix a bug with the instantiation of ns_consumed parameter\nattributes in ARC.\n\nllvm-svn: 262551"},
		[j]={{T,5910,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n  // ...\n  case RetainOwnershipKind::NS:\n    handleSimpleAttributeOrDiagnose<NSConsumedAttr>(*this, VD, CI, isValidSubjectOfNSAttribute(VD->getType()),\n                                                    // ...\n                                                    ((IsTemplateInstantiation && getLangOpts().ObjCAutoRefCount) ? diag::err_ns_attribute_wrong_parameter_type : diag::warn_ns_attribute_wrong_parameter_type),"}}
	},
	["err_nsconsumed_attribute_mismatch"]={
		[c]="err_nsconsumed_attribute_mismatch",
		[d]="overriding method has mismatched ns_consumed attribute on its parameter",
		[g]="overriding method has mismatched ns_consumed attribute on its parameter",
		[h]=k,
		[i]="overriding method has mismatched ns_consumed attribute on its parameter",
		[b]=a,
		[f]=m,
		[e]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
		[j]={{"clang/lib/Sema/SemaDeclObjC.cpp",215,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n    // ...\n    if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n      Diag(newDecl->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsconsumed_attribute_mismatch : diag::warn_nsconsumed_attribute_mismatch);"}},
		[l]={
			["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:126:45: error: overriding method has mismatched ns_consumed attribute on its parameter"}
		}
	},
	["err_nserrordomain_invalid_decl"]={
		[c]={{nil,E,"err_nserrordomain_invalid_decl"}},
		[d]={{nil,E,"domain argument %select{|%1 }0does not refer to global constant"}},
		[g]={{nil,E,{"domain argument ",{a,"B "},"does not refer to global constant"}}},
		[h]=k,
		[i]="domain argument (?:|(.*?) )does not refer to global constant",
		[b]=a,
		[f]={{nil,E,m}},
		[e]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[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"},
		[j]={{T,6151,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!DRE) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 0;"},{T,6157,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!VD) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 1 << DRE->getDecl();"}},
		[l]={
			["clang/test/Sema/ns_error_enum.m"]={"clang/test/Sema/ns_error_enum.m:76:58: error: domain argument does not refer to global constant","clang/test/Sema/ns_error_enum.m:80:66: error: domain argument \'foo\' does not refer to global constant"}
		}
	},
	["err_nserrordomain_wrong_type"]={
		[c]={{nil,E,"err_nserrordomain_wrong_type"}},
		[d]={{nil,E,"domain argument %0 does not point to an NSString or CFString constant"}},
		[g]={{nil,E,"domain argument A does not point to an NSString or CFString constant"}},
		[h]=k,
		[i]="domain argument (.*?) does not point to an NSString or CFString constant",
		[b]=a,
		[f]={{nil,E,m}},
		[e]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[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"},
		[j]={{T,6163,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isNSStringType(VD->getType(), S.Context) && !isCFStringType(VD->getType(), S.Context)) {\n    S.Diag(Loc, diag::err_nserrordomain_wrong_type) << VD;"}},
		[l]={
			["clang/test/Sema/ns_error_enum.m"]={"clang/test/Sema/ns_error_enum.m:55:37: error: domain argument \'WrongErrorDomainType\' does not point to an NSString or CFString constant"}
		}
	},
	["err_nsnumber_nonliteral_unary"]={
		[c]="err_nsnumber_nonliteral_unary",
		[d]="@%0 must be followed by a number to form an NSNumber object",
		[g]="@A must be followed by a number to form an NSNumber object",
		[h]=k,
		[i]="@(.*?) must be followed by a number to form an NSNumber object",
		[b]=a,
		[f]=D,
		[e]={"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"},
		[j]={{"clang/lib/Parse/ParseObjc.cpp",2852,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n  // ...\n  case tok::minus:\n  case tok::plus: {\n    // ...\n    if (!Tok.is(tok::numeric_constant)) {\n      // ...\n      Diag(Tok, diag::err_nsnumber_nonliteral_unary) << Symbol;"}},
		[l]={
			["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:66:5: error: @- must be followed by a number to form an NSNumber object","clang/test/SemaObjC/objc-literal-nsnumber.m:67:5: error: @+ must be followed by a number to form an NSNumber object"}
		}
	}
};