Module:ClangDiags/DiagsLongData1

From emmtrix Wiki
Jump to navigation Jump to search

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

local a="";
local b="regex1";
local c="id_hist";
local d="message_hist";
local e="commit";
local f="hierarchical_hist";
local g="regex2";
local h="regex3";
local i="category_hist";
local j="source";
local k="(?:error|fatal error)\\: ";
local l="tests2";
local m="Semantic Issue";
local n="9.0";
local o="11.0";
local p="10.0";
local q="clang/lib/Sema/SemaDeclAttr.cpp";
local r="clang/lib/Sema/SemaDecl.cpp";
local s="clang/lib/Sema/SemaCast.cpp";
local t="13.0";
local u="clang/lib/Sema/SemaType.cpp";
local v="14.0";
local w="clang/lib/Sema/SemaDeclCXX.cpp";
local x="Update tablegen diagnostic files to be in sync with the def files.";
local y="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local z="5a8987ca5113";
local A="clang/lib/Sema/SemaChecking.cpp";
local B="8.0";
local C="15.0";
local D="clang/lib/Sema/SemaExprCXX.cpp";
local E="7.0";
local F="clang/lib/Sema/SemaExpr.cpp";
local G="None";
local H="12.0";
local I="16.0";
local J="C-style cast";
local K="reinterpret_cast";
local L="clang/lib/Parse/ParseDecl.cpp";
local M="Parse Issue";
local N="function";
local O="b1c4d5507fad";
local P="6.0";
local Q="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local R="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 S="5.0";
local T="constexpr";
local U="consteval";
local V="constructor";
local W="const_cast";
local X="functional-style cast";
local Y="dynamic_cast";
local Z="clang/lib/Sema/SemaDeclObjC.cpp";
local ab="static_cast";
local bb="clang/lib/Sema/SemaStmt.cpp";
local cb="clang/lib/Parse/ParseDeclCXX.cpp";
local db="constexpr: semantic checking for constexpr functions and constructors. Based in\npart on patches by Peter Collingbourne.\n\nWe diverge from the C++11 standard in a few areas, mostly related to checking\nconstexpr function declarations, and not just definitions. See WG21 paper\nN3308=11-0078 for details.\n\nFunction invocation substitution is not available in this patch; constexpr\nfunctions cannot yet be used from within constant expressions.\n\nllvm-svn: 140926";
local eb="constexpr: semantic checking for constexpr functions and constructors. Based in";
local fb="eb3c10c248ac";
local gb="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local hb="Implement P2361 Unevaluated string literals";
local ib="95f50964fbf5";
local jb="Implement most of N3638 (return type deduction for normal functions).";
local kb="Implement most of N3638 (return type deduction for normal functions).\nMissing (somewhat ironically) is support for the new deduction rules\nin lambda functions, plus PCH support for return type patching.\n\nllvm-svn: 181108";
local lb="clang/lib/Sema/SemaLambda.cpp";
local mb="2a7d481faf54";
local nb="Emit !callback metadata and introduce the callback attribute\n\n  With commit r351627, LLVM gained the ability to apply (existing) IPO\n  optimizations on indirections through callbacks, or transitive calls.\n  The general idea is that we use an abstraction to hide the middle man\n  and represent the callback call in the context of the initial caller.\n  It is described in more detail in the commit message of the LLVM patch\n  r351627, the llvm::AbstractCallSite class description, and the\n  language reference section on callback-metadata.\n\n  This commit enables clang to emit !callback metadata that is\n  understood by LLVM. It does so in three different cases:\n    1) For known broker functions declarations that are directly\n       generated, e.g., __kmpc_fork_call for the OpenMP pragma parallel.\n    2) For known broker functions that are identified by their name and\n       source location through the builtin detection, e.g.,\n       pthread_create from the POSIX thread API.\n    3) For user annotated functions that carry the \"callback(callee, ...)\"\n       attribute. The attribute has to include the name, or index, of\n       the callback callee and how the passed arguments can be\n       identified (as many as the callback callee has). See the callback\n       attribute documentation for detailed information.\n\nDifferential Revision: https://reviews.llvm.org/D55483\n\nllvm-svn: 351629";
local ob="Emit !callback metadata and introduce the callback attribute";
local pb="ac991bbb4456";
local qb="\'auto\'";
local rb="30482bc78659";
local sb="Implement the C++0x deduced \'auto\' feature.";
local tb="class";
local ub="\'__auto_type\'";
local vb="Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069";
local wb="clang/lib/Sema/SemaExprObjC.cpp";
local xb="\'decltype(auto)\'";
local yb="clang/lib/Sema/SemaTemplateDeduction.cpp";
local zb="14f6bfcb52e7";
local Ab="Lexical or Preprocessor Issue";
local Bb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Cb="61d065e21ff3";
local Db="clang/test/SemaCXX/conversion-function.cpp";
local Eb="clang/test/Sema/attr-callback-broken.c";
local Fb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574";
local Gb="clang/test/Parser/cxx2a-concept-declaration.cpp";
local Hb="Let clang atomic builtins fetch add/sub support floating point types";
local Ib="[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 Jb="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";
local Kb="931fcd3ba011";
local Lb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local Mb="clang/lib/Sema/SemaObjCProperty.cpp";
local Nb="clang/test/SemaCXX/dynamic-cast.cpp";
local Ob="constinit";
local Pb="variables and functions";
local Qb="functions";
local Rb="non-K&R-style functions";
local Sb="kernel functions";
local Tb="unions";
local Ub="variables, data members and tag types";
local Vb="variables, functions and classes";
local Wb="types and namespaces";
local Xb="functions, methods and blocks";
local Yb="variables and fields";
local Zb="variables";
local ac="clang/lib/Parse/ParseTemplate.cpp";
local bc="functions and methods";
local cc="functions, methods, and parameters";
local dc="block";
local ec="method";
local fc="[ObjC] Implement @available in the Parser and AST\n\nThis patch adds a new AST node: ObjCAvailabilityCheckExpr, and teaches the\nParser and Sema to generate it. This node represents an availability check of\nthe form:\n\n  @available(macos 10.10, *);\n\nWhich will eventually compile to a runtime check of the host\'s OS version. This\nis the first patch of the feature I proposed here:\nhttp://lists.llvm.org/pipermail/cfe-dev/2016-July/049851.html\n\nDifferential Revision: https://reviews.llvm.org/D22171\n\nllvm-svn: 275654";
local gc="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local hc="Mass-rename the handful of error_* diagnostics to err_*.";
local ic="f881267db9a9";
local jc="interface";
local kc="struct";
local lc="clang/lib/Parse/ParseExpr.cpp";
local mc="[ObjC] Implement @available in the Parser and AST";
local nc="29099ded0c15";
local oc="clang/lib/Sema/SemaTemplate.cpp";

return {
	["err_attribute_pointers_only"]={
		[c]="err_attribute_pointers_only",
		[d]="%0 attribute only applies to%select{| constant}1 pointer arguments",
		[f]={{nil,nil,{"A attribute only applies to",{a," constant"}," pointer arguments"}}},
		[b]=k,
		[g]="(.*?) attribute only applies to(?:| constant) pointer arguments",
		[h]=a,
		[i]=m,
		[e]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n  buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
		[j]={{A,16689,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  // ...\n  for (ParmVarDecl *Param : Parameters) {\n    // ...\n    // Parameters with the pass_object_size attribute only need to be marked\n    // constant at function definitions. Because we lack information about\n    // whether we\'re on a declaration or definition when we\'re instantiating the\n    // attribute, we need to check for constness here.\n    if (const auto *Attr = Param->getAttr<PassObjectSizeAttr>())\n      if (!Param->getType().isConstQualified())\n        Diag(Param->getLocation(), diag::err_attribute_pointers_only) << Attr->getSpelling() << 1;"},{q,1198,"static void handlePassObjectSizeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // pass_object_size is only supported on constant pointer parameters; as a\n  // kindness to users, we allow the parameter to be non-const for declarations.\n  // At this point, we have no clue if `D` belongs to a function declaration or\n  // definition, so we defer the constness check until later.\n  if (!cast<ParmVarDecl>(D)->getType()->isPointerType()) {\n    S.Diag(D->getBeginLoc(), diag::err_attribute_pointers_only) << AL << 1;"},{q,5686,"static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (IsPointer) {\n    // ...\n    if (ArgumentIdxAST >= getFunctionOrMethodNumParams(D) || !getFunctionOrMethodParamType(D, ArgumentIdxAST)->isPointerType())\n      S.Diag(AL.getLoc(), diag::err_attribute_pointers_only) << AL << 0;"},{u,7382,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // Check the raw (i.e., desugared) Canonical type to see if it\n  // is a pointer type.\n  if (!isa<PointerType>(Desugared)) {\n    // Pointer type qualifiers can only operate on pointer types, but not\n    // pointer-to-member types.\n    if (Type->isMemberPointerType())\n    // ...\n    else\n      S.Diag(PAttr.getLoc(), diag::err_attribute_pointers_only) << PAttr << 0;"}},
		[l]={
			["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:14:32: error: \'ownership_holds\' attribute only applies to pointer arguments"}
		}
	},
	["err_attribute_preferred_name_arg_invalid"]={
		[c]={{nil,H,"err_attribute_preferred_name_arg_invalid"}},
		[d]={{nil,H,"argument %0 to \'preferred_name\' attribute is not a typedef for a specialization of %1"}},
		[f]={{nil,H,"argument A to \'preferred_name\' attribute is not a typedef for a specialization of B"}},
		[b]=k,
		[g]="argument (.*?) to \'preferred_name\' attribute is not a typedef for a specialization of (.*?)",
		[h]=a,
		[i]={{nil,H,m}},
		[e]={Cb,1590001902,Hb,Jb},
		[j]={{q,1461,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(AL.getLoc(), diag::err_attribute_preferred_name_arg_invalid) << T << CTD;"}},
		[l]={
			["clang/test/SemaTemplate/attributes.cpp"]={"clang/test/SemaTemplate/attributes.cpp:561:40: error: argument \'int\' to \'preferred_name\' attribute is not a typedef for a specialization of \'B\'","clang/test/SemaTemplate/attributes.cpp:566:40: error: argument \'C<int>\' to \'preferred_name\' attribute is not a typedef for a specialization of \'C\'","clang/test/SemaTemplate/attributes.cpp:568:40: error: argument \'const X\' (aka \'const C<int>\') to \'preferred_name\' attribute is not a typedef for a specialization of \'C\'","clang/test/SemaTemplate/attributes.cpp:569:40: error: argument \'Z\' (aka \'const C<double>\') to \'preferred_name\' attribute is not a typedef for a specialization of \'C\'"}
		}
	},
	["err_attribute_regparm_invalid_number"]={
		[c]="err_attribute_regparm_invalid_number",
		[d]="\'regparm\' parameter must be between 0 and %0 inclusive",
		[f]="\'regparm\' parameter must be between 0 and A inclusive",
		[b]=k,
		[g]="\'regparm\' parameter must be between 0 and (.*?) inclusive",
		[h]=a,
		[i]=m,
		[e]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also ","Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in CodeGen.\n\nllvm-svn: 67868"},
		[j]={{q,5587,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  // ...\n  if (numParams > Context.getTargetInfo().getRegParmMax()) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_invalid_number) << Context.getTargetInfo().getRegParmMax() << NumParamsExpr->getSourceRange();"}},
		[l]={
			["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:5:14: error: \'regparm\' parameter must be between 0 and 3 inclusive","clang/test/Sema/attr-regparm.c:6:14: error: \'regparm\' parameter must be between 0 and 3 inclusive"}
		}
	},
	["err_attribute_regparm_wrong_platform"]={
		[c]="err_attribute_regparm_wrong_platform",
		[d]="\'regparm\' is not valid on this platform",
		[f]="\'regparm\' is not valid on this platform",
		[b]=k,
		[g]="\'regparm\' is not valid on this platform",
		[h]=a,
		[i]=m,
		[e]={"7044b7670747",1238188007,"Finish off semantic analysis for regparm, and remove the warning.  Also ","Finish off semantic analysis for regparm, and remove the warning.  Also \nremove a redundant error in CodeGen.\n\nllvm-svn: 67868"},
		[j]={{q,5579,"/// Checks a regparm attribute, returning true if it is ill-formed and\n/// otherwise setting numParams to the appropriate value.\nbool Sema::CheckRegparmAttr(const ParsedAttr &AL, unsigned &numParams) {\n  // ...\n  if (Context.getTargetInfo().getRegParmMax() == 0) {\n    Diag(AL.getLoc(), diag::err_attribute_regparm_wrong_platform) << NumParamsExpr->getSourceRange();"}},
		[l]={
			["clang/test/CodeGen/WebAssembly/wasm-regparm.c"]={"clang/test/CodeGen/WebAssembly/wasm-regparm.c:4:21: error: \'regparm\' is not valid on this platform"}
		}
	},
	["err_attribute_requires_arguments"]={
		[c]="err_attribute_requires_arguments",
		[d]="parentheses must be omitted if %0 attribute\'s argument list is empty",
		[f]="parentheses must be omitted if A attribute\'s argument list is empty",
		[b]=k,
		[g]="parentheses must be omitted if (.*?) attribute\'s argument list is empty",
		[h]=a,
		[i]=M,
		[e]={"ef5d94caf067",1397522199,"Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amend...","Fixing a typo, updating the diagnostic wording and logic based on post-commit review feedback. Amends r206186.\n\nllvm-svn: 206229"},
		[j]={{L,743,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  // If this attribute\'s args were parsed, and it was expected to have\n  // arguments but none were provided, emit a diagnostic.\n  if (ExistingAttrs < Attrs.size() && Attrs.back().getMaxArgs() && !NumArgs) {\n    Diag(OpenParenLoc, diag::err_attribute_requires_arguments) << AttrName;"},{cb,4460,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n///         \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n///         balanced-token\n///         balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n///         \'(\' balanced-token-seq \')\'\n///         \'[\' balanced-token-seq \']\'\n///         \'{\' balanced-token-seq \'}\'\n///         any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n  // ...\n  if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) {\n    // ...\n    // If the attribute is a standard or built-in attribute and we are\n    // parsing an argument list, we need to determine whether this attribute\n    // was allowed to have an argument list (such as [[deprecated]]), and how\n    // many arguments were parsed (so we can diagnose on [[deprecated()]]).\n    if (Attr.getMaxArgs() && !NumArgs) {\n      // ...\n      Diag(LParenLoc, diag::err_attribute_requires_arguments) << AttrName;"}},
		[l]={
			["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:73:22: error: parentheses must be omitted if \'deprecated\' attribute\'s argument list is empty"}
		}
	},
	["err_attribute_requires_opencl_version"]={
		[c]="err_attribute_requires_opencl_version",
		[d]={{nil,v,"attribute %0 is supported in the OpenCL version %1%select{| onwards}2"},{t,nil,"%0 attribute requires OpenCL version %1%select{| or above}2"}},
		[f]={{nil,v,{"attribute A is supported in the OpenCL version B",{a," onwards"}}},{t,nil,{"A attribute requires OpenCL version B",{a," or above"}}}},
		[b]=k,
		[g]="attribute (.*?) is supported in the OpenCL version (.*?)(?:| onwards)",
		[h]=a,
		[i]=m,
		[e]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute","[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attribute from OpenCL v2.0 s6.11.5.\n\nReusing most of metadata generation from CGLoopInfo helper class.\n\nThe code is based on Khronos OpenCL compiler:\nhttps://github.com/KhronosGroup/SPIR/tree/spirv-1.0\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16686\n\nllvm-svn: 261350"},
		[j]={{q,8281,"static void handleOpenCLNoSVMAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (S.LangOpts.getOpenCLCompatibleVersion() < 200)\n    S.Diag(AL.getLoc(), diag::err_attribute_requires_opencl_version) << AL << \"2.0\" << 1;"}},
		[l]={
			["clang/test/SemaOpenCL/nosvm.cl"]={"clang/test/SemaOpenCL/nosvm.cl:7:30: error: attribute \'nosvm\' is supported in the OpenCL version 2.0 onwards"}
		}
	},
	["err_attribute_requires_positive_integer"]={
		[c]="err_attribute_requires_positive_integer",
		[d]={{nil,B,"%0 attribute requires a %select{positive|non-negative}1 integral compile time constant expression"},{"7.1",nil,"%0 attribute requires a positive integral compile time constant expression"}},
		[f]={{nil,B,{"A attribute requires a ",{"positive","non-negative"}," integral compile time constant expression"}},{"7.1",nil,"A attribute requires a positive integral compile time constant expression"}},
		[b]=k,
		[g]="(.*?) attribute requires a (?:positive|non\\-negative) integral compile time constant expression",
		[h]=a,
		[i]=m,
		[e]={"6bdbcbb3d91b",1455906611,"[OpenCL] Generate metadata for opencl_unroll_hint attribute","[OpenCL] Generate metadata for opencl_unroll_hint attribute\n\nAdd support for opencl_unroll_hint attribute from OpenCL v2.0 s6.11.5.\n\nReusing most of metadata generation from CGLoopInfo helper class.\n\nThe code is based on Khronos OpenCL compiler:\nhttps://github.com/KhronosGroup/SPIR/tree/spirv-1.0\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16686\n\nllvm-svn: 261350"},
		[j]={{q,241,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n  // ...\n  if (StrictlyUnsigned && I->isSigned() && I->isNegative()) {\n    S.Diag(getAttrLoc(AI), diag::err_attribute_requires_positive_integer) << &AI << /*non-negative*/ 1;"},{"clang/lib/Sema/SemaStmtAttr.cpp",471,"static Attr *handleOpenCLUnrollHint(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getNumArgs() == 1) {\n    // ...\n    if (Val <= 0) {\n      S.Diag(A.getRange().getBegin(), diag::err_attribute_requires_positive_integer) << A << /* positive */ 0;"}},
		[l]={
			["clang/test/SemaOpenCL/unroll-hint.cl"]={"clang/test/SemaOpenCL/unroll-hint.cl:15:18: error: \'opencl_unroll_hint\' attribute requires a positive integral compile time constant expression"}
		}
	},
	["err_attribute_riscv_rvv_bits_unsupported"]={
		[c]="err_attribute_riscv_rvv_bits_unsupported",
		[d]="%0 is only supported when \'-mrvv-vector-bits=<bits>\' is specified with a value of \"zvl\" or a power 2 in the range [64,65536]",
		[f]="A is only supported when \'-mrvv-vector-bits=<bits>\' is specified with a value of \"zvl\" or a power 2 in the range [64,65536]",
		[b]=k,
		[g]="(.*?) is only supported when \'\\-mrvv\\-vector\\-bits\\=\\<bits\\>\' is specified with a value of \"zvl\" or a power 2 in the range \\[64,65536\\]",
		[h]=a,
		[i]=m,
		[e]={ib,1625925174,hb,gb},
		[j]={{u,8348,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (!VScale || !VScale->first || VScale->first != VScale->second) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_riscv_rvv_bits_unsupported) << Attr;"}}
	},
	["err_attribute_section_invalid_for_target"]={
		[c]="err_attribute_section_invalid_for_target",
		[d]={{nil,E,"argument to %select{\'code_seg\'|\'section\'}1 attribute is not valid for this target: %0"},{P,nil,"argument to \'section\' attribute is not valid for this target: %0"}},
		[f]={{nil,E,{"argument to ",{"\'code_seg\'","\'section\'"}," attribute is not valid for this target: A"}},{P,nil,"argument to \'section\' attribute is not valid for this target: A"}},
		[b]=k,
		[g]="argument to (?:\'code_seg\'|\'section\') attribute is not valid for this target\\: (.*?)",
		[h]=a,
		[i]=m,
		[e]={"30ba674391ae",1249930984,"fix a couple of problems with section attributes:","fix a couple of problems with section attributes:\n\n1. Passing something that isn\'t a string used to cause:\n   \"argument to annotate attribute was not a string literal\"\n  make it say \"section attribute\" instead.\n\n2. Fix the location of the above message to point to the\n   bad argument instead of the section token.\n\n3. Implement rdar://4341926, by diagnosing invalid section\n   specifiers in the frontend rather than letting them slip all\n   the way to the assembler (a QoI win).\n\nAn example of #3 is that we used to produce something like this:\n\n/var/folders/n7/n7Yno9ihEm894640nJdSQU+++TI/-Tmp-//ccFPFGtT.s:2:Expected comma after segment-name\n/var/folders/n7/n7Yno9ihEm894640nJdSQU+++TI/-Tmp-//ccFPFGtT.s:2:Rest of line ignored. 1st junk character valued 46 (.).\n\nDaniel improved clang to use llvm_report_error, so now we got:\n\n$ clang t.c -c\nfatal error: error in backend: Global variable \'x\' has an invalid section specifier \'sadf\': mach-o section specifier\n      requires a segment and section separated by a comma.\n\nwith no loc info.  Now we get:\n\n$ clang t.c -fsyntax-only\nt.c:4:30: error: argument to \'section\' attribute is not valid for this target: mach-o section specifier requires a segment\n      and section separated by a comma\nint x __attribute__((section(\"sadf\")));\n                             ^\n\nwhich is nice :)\n\nllvm-svn: 78586"},
		[j]={{q,3328,"bool Sema::checkSectionName(SourceLocation LiteralLoc, StringRef SecName) {\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 1 /*\'section\'*/;"},{q,3362,"// This is used for `__declspec(code_seg(\"segname\"))` on a decl.\n// `#pragma code_seg(\"segname\")` uses checkSectionName() instead.\nstatic bool checkCodeSegName(Sema &S, SourceLocation LiteralLoc, StringRef CodeSegName) {\n  if (llvm::Error E = S.isValidSectionSpecifier(CodeSegName)) {\n    S.Diag(LiteralLoc, diag::err_attribute_section_invalid_for_target) << toString(std::move(E)) << 0 /*\'code-seg\'*/;"}},
		[l]={
			["clang/test/Sema/pragma-section-invalid.c"]={"clang/test/Sema/pragma-section-invalid.c:4:18: error: argument to \'section\' attribute is not valid for this target: mach-o section specifier requires a segment and section separated by a comma"}
		}
	},
	["err_attribute_selectany_non_extern_data"]={
		[c]="err_attribute_selectany_non_extern_data",
		[d]="\'selectany\' can only be applied to data items with external linkage",
		[f]="\'selectany\' can only be applied to data items with external linkage",
		[b]=k,
		[g]="\'selectany\' can only be applied to data items with external linkage",
		[h]=a,
		[i]=m,
		[e]={"b144d366934f",1369058557,"Implement __declspec(selectany) under -fms-extensions","Implement __declspec(selectany) under -fms-extensions\n\nselectany only applies to externally visible global variables.  It has\nthe effect of making the data weak_odr.\n\nThe MSDN docs suggest that unused definitions can only be dropped at\nlinktime, so Clang uses weak instead of linkonce.  MSVC optimizes away\nreferences to constant selectany data, so it must assume that there is\nonly one definition, hence weak_odr.\n\nReviewers: espindola\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D814\n\nllvm-svn: 182266"},
		[j]={{r,6979,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // \'selectany\' only applies to externally visible variable declarations.\n  // It does not apply to functions.\n  if (SelectAnyAttr *Attr = ND.getAttr<SelectAnyAttr>()) {\n    if (isa<FunctionDecl>(ND) || !ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_selectany_non_extern_data);"}},
		[l]={
			["clang/test/SemaCXX/declspec-selectany.cpp"]={"clang/test/SemaCXX/declspec-selectany.cpp:6:22: error: \'selectany\' can only be applied to data items with external linkage"}
		}
	},
	["err_attribute_sentinel_less_than_zero"]={
		[c]="err_attribute_sentinel_less_than_zero",
		[d]="\'sentinel\' parameter 1 less than zero",
		[f]="\'sentinel\' parameter 1 less than zero",
		[b]=k,
		[g]="\'sentinel\' parameter 1 less than zero",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{q,3060,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() > 0) {\n    // ...\n    if (Idx->isSigned() && Idx->isNegative()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_less_than_zero) << E->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/method-sentinel-attr.m"]={"clang/test/SemaObjC/method-sentinel-attr.m:14:45: error: \'sentinel\' parameter 1 less than zero"}
		}
	},
	["err_attribute_sentinel_not_zero_or_one"]={
		[c]="err_attribute_sentinel_not_zero_or_one",
		[d]="\'sentinel\' parameter 2 not 0 or 1",
		[f]="\'sentinel\' parameter 2 not 0 or 1",
		[b]=k,
		[g]="\'sentinel\' parameter 2 not 0 or 1",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{q,3082,"static void handleSentinelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getNumArgs() > 1) {\n    // ...\n    if ((Idx->isSigned() && Idx->isNegative()) || nullPos > 1) {\n      // ...\n      S.Diag(AL.getLoc(), diag::err_attribute_sentinel_not_zero_or_one) << E->getSourceRange();"}},
		[l]={
			["clang/test/Sema/sentinel-attribute.c"]={"clang/test/Sema/sentinel-attribute.c:14:37: error: \'sentinel\' parameter 2 not 0 or 1"}
		}
	},
	["err_attribute_size_too_large"]={
		[c]="err_attribute_size_too_large",
		[d]={{nil,o,"%0 size too large"},{p,nil,"vector size too large"}},
		[f]={{nil,o,"A size too large"},{p,nil,"vector size too large"}},
		[b]=k,
		[g]="(.*?) size too large",
		[h]=a,
		[i]=m,
		[e]={"efe9fa62f5b4",1374800027,"Tighten type-checking for vector attributes.","Tighten type-checking for vector attributes.\n\nBased on patch by Yunzhong Gao.\n\nllvm-svn: 187176"},
		[j]={{u,2742,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  // vecSize is specified in bytes - convert to bits.\n  if (!VecSize->isIntN(61)) {\n    // ...\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{u,2762,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (VectorSizeBits / TypeSize > std::numeric_limits<uint32_t>::max()) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << SizeExpr->getSourceRange() << \"vector\";"},{u,2814,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (!vecSize->isIntN(32)) {\n      Diag(AttrLoc, diag::err_attribute_size_too_large) << ArraySize->getSourceRange() << \"vector\";"},{u,2898,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(MatrixRows)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << RowRange << \"matrix row\";"},{u,2903,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(MatrixColumns)) {\n    Diag(AttrLoc, diag::err_attribute_size_too_large) << ColRange << \"matrix column\";"}},
		[l]={
			["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:25:42: error: matrix row size too large"}
		}
	},
	["err_attribute_sizeless_type"]={
		[c]={{nil,o,"err_attribute_sizeless_type"}},
		[d]={{nil,o,"%0 attribute cannot be applied to sizeless type %1"}},
		[f]={{nil,o,"A attribute cannot be applied to sizeless type B"}},
		[b]=k,
		[g]="(.*?) attribute cannot be applied to sizeless type (.*?)",
		[h]=a,
		[i]={{nil,o,m}},
		[e]={Kb,1576908663,Bb,Ib},
		[j]={{q,4610,"void Sema::CheckAlignasUnderalignment(Decl *D) {\n  // ...\n  if (Align && DiagTy->isSizelessType()) {\n    Diag(LastAlignedAttr->getLocation(), diag::err_attribute_sizeless_type) << LastAlignedAttr << DiagTy;"}},
		[l]={
			["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:63:27: error: \'aligned\' attribute cannot be applied to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:64:27: error: \'aligned\' attribute cannot be applied to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:65:12: error: \'_Alignas\' attribute cannot be applied to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
		}
	},
	["err_attribute_too_few_arguments"]={
		[c]="err_attribute_too_few_arguments",
		[d]="%0 attribute takes at least %1 argument%s1",
		[f]="A attribute takes at least B argumentB",
		[b]=k,
		[g]="(.*?) attribute takes at least (.*?) argument(.*?)",
		[h]=a,
		[i]=m,
		[e]={"63fa667c6874",1311883955,"Added basic parsing for all remaining attributes, thread safety","Added basic parsing for all remaining attributes, thread safety\nanalysis. This includes checking that the attributes are applied in the\ncorrect contexts and with the correct number of arguments.\n\nllvm-svn: 136383"},
		[j]={{"clang/lib/Sema/ParsedAttr.cpp",289,"bool ParsedAttr::checkAtLeastNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_few_arguments, std::less<unsigned>()); }"},{q,1834,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  case OwnershipAttr::Takes:\n  case OwnershipAttr::Holds:\n    if (AL.getNumArgs() < 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_few_arguments) << AL << 2;"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",215,"static void instantiateDependentAnnotationAttr(Sema &S, const MultiLevelTemplateArgumentList &TemplateArgs, const AnnotateAttr *Attr, Decl *New) {\n  // ...\n  if (HasDelayedArgs) {\n    if (Args.size() < 1) {\n      S.Diag(Attr->getLoc(), diag::err_attribute_too_few_arguments) << Attr << 1;"},{u,8478,"static void HandleAnnotateTypeAttr(TypeProcessingState &State, QualType &CurType, const ParsedAttr &PA) {\n  // ...\n  if (PA.getNumArgs() < 1) {\n    S.Diag(PA.getLoc(), diag::err_attribute_too_few_arguments) << PA << 1;"}},
		[l]={
			["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:22:41: error: \'callable_when\' attribute takes at least 1 argument"}
		}
	},
	["err_attribute_too_many_arguments"]={
		[c]="err_attribute_too_many_arguments",
		[d]="%0 attribute takes no more than %1 argument%s1",
		[f]="A attribute takes no more than B argumentB",
		[b]=k,
		[g]="(.*?) attribute takes no more than (.*?) argument(.*?)",
		[h]=a,
		[i]=m,
		[e]={"80ee5963fde8",1299068105,"Pretty up the wrong-number-of-arguments-for-attribute diagnostic by","Pretty up the wrong-number-of-arguments-for-attribute diagnostic by\nusing a custom plural form.  Split out the range diagnostics as their\nown message.\n\nllvm-svn: 126840"},
		[j]={{"clang/lib/Sema/ParsedAttr.cpp",294,"bool ParsedAttr::checkAtMostNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_too_many_arguments, std::greater<unsigned>()); }"},{q,1840,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  case OwnershipAttr::Returns:\n    if (AL.getNumArgs() > 2) {\n      S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{q,7354,"static void handleARMInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"},{q,7431,"static void handleMipsInterruptAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Only one optional argument permitted.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_too_many_arguments) << AL << 1;"}},
		[l]={
			["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:8:16: error: \'interrupt\' attribute takes no more than 1 argument"}
		}
	},
	["err_attribute_unsupported"]={
		[c]="err_attribute_unsupported",
		[d]={{nil,H,"%0 attribute is not supported on targets missing %1; specify an appropriate -march= or -mcpu="},{"11.1",nil,"%0 attribute is not supported for this target"}},
		[f]={{nil,H,"A attribute is not supported on targets missing B; specify an appropriate -march= or -mcpu="},{"11.1",nil,"A attribute is not supported for this target"}},
		[b]=k,
		[g]="(.*?) attribute is not supported on targets missing (.*?); specify an appropriate \\-march\\= or \\-mcpu\\=",
		[h]=a,
		[i]=m,
		[e]={"8c3de546d62e",1379354855,"Add error checking to reject neon_vector_type attribute on targets without NEON.","Add error checking to reject neon_vector_type attribute on targets without NEON.\n\nPatch by Artyom Skrobov.\n\nllvm-svn: 190801"},
		[j]={{u,8211,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Target must have NEON (or MVE, whose vectors are similar enough\n  // not to need a separate attribute)\n  if (!(S.Context.getTargetInfo().hasFeature(\"neon\") || S.Context.getTargetInfo().hasFeature(\"mve\") || IsTargetCUDAAndHostARM)) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'neon\' or \'mve\'\";"},{u,8256,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have SVE.\n  if (!S.Context.getTargetInfo().hasFeature(\"sve\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'sve\'\";"},{u,8340,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // Target must have vector extension.\n  if (!S.Context.getTargetInfo().hasFeature(\"zve32x\")) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_unsupported) << Attr << \"\'zve32x\'\";"}},
		[l]={
			["clang/test/Sema/riscv-vector-types-support.c"]={"clang/test/Sema/riscv-vector-types-support.c:3:24: error: \'riscv_rvv_vector_bits\' attribute is not supported on targets missing \'zve32x\'; specify an appropriate -march= or -mcpu="}
		}
	},
	["err_attribute_uuid_malformed_guid"]={
		[c]="err_attribute_uuid_malformed_guid",
		[d]="uuid attribute contains a malformed GUID",
		[f]="uuid attribute contains a malformed GUID",
		[b]=k,
		[g]="uuid attribute contains a malformed GUID",
		[h]=a,
		[i]={{nil,B,G},{"7.1",nil,m}},
		[e]={"7da1166da010",1292809309,"Validate Microsoft\'s uuid attribute string.","Validate Microsoft\'s uuid attribute string.\n\nllvm-svn: 122220"},
		[j]={{cb,4738,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  // ...\n  if (Tok.is(tok::string_literal)) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::r_paren)) {\n      if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n        Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{cb,4756,"/// Parse uuid() attribute when it appears in a [] Microsoft attribute.\nvoid Parser::ParseMicrosoftUuidAttributeArgs(ParsedAttributes &Attrs) {\n  // ...\n  if (Tok.is(tok::string_literal)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.hasLeadingSpace() || Tok.isAtStartOfLine()) {\n      Diag(Tok, diag::err_attribute_uuid_malformed_guid);"},{q,7007,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate GUID length.\n  if (StrRef.size() != 36) {\n    S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{q,7014,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      if (StrRef[i] != \'-\') {\n        S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"},{q,7018,"static void handleUuidAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 0; i < 36; ++i) {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n    // ...\n    } else if (!isHexDigit(StrRef[i])) {\n      S.Diag(LiteralLoc, diag::err_attribute_uuid_malformed_guid);"}},
		[l]={
			["clang/test/Parser/ms-square-bracket-attributes.mm"]={"clang/test/Parser/ms-square-bracket-attributes.mm:21:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:23:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:58:8: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:60:21: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:63:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:65:24: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:67:44: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:70:1: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:73:7: error: uuid attribute contains a malformed GUID","clang/test/Parser/ms-square-bracket-attributes.mm:95:7: error: uuid attribute contains a malformed GUID"}
		}
	},
	["err_attribute_vecreturn_only_pod_record"]={
		[c]="err_attribute_vecreturn_only_pod_record",
		[d]="the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)",
		[f]="the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)",
		[b]=k,
		[g]="the vecreturn attribute can only be used on a POD \\(plain old data\\) class or structure \\(i\\.e\\. no virtual functions\\)",
		[h]=a,
		[i]=m,
		[e]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn","Add more error checking to attribute vecreturn\n\nllvm-svn: 114251"},
		[j]={{q,2300,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!cast<CXXRecordDecl>(R)->isPOD()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_pod_record);"}},
		[l]={
			["clang/test/Parser/cxx-altivec.cpp"]={"clang/test/Parser/cxx-altivec.cpp:224:18: error: the vecreturn attribute can only be used on a POD (plain old data) class or structure (i.e. no virtual functions)"}
		}
	},
	["err_attribute_vecreturn_only_vector_member"]={
		[c]="err_attribute_vecreturn_only_vector_member",
		[d]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
		[f]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
		[b]=k,
		[g]="the vecreturn attribute can only be used on a class or structure with one member, which must be a vector",
		[h]=a,
		[i]=m,
		[e]={"9a587aaaa9e7",1284772327,"Add more error checking to attribute vecreturn","Add more error checking to attribute vecreturn\n\nllvm-svn: 114251"},
		[j]={{q,2295,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isa<CXXRecordDecl>(R)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"},{q,2306,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (const auto *I : R->fields()) {\n    if ((count == 1) || !I->getType()->isVectorType()) {\n      S.Diag(AL.getLoc(), diag::err_attribute_vecreturn_only_vector_member);"}},
		[l]={
			["clang/test/Parser/cxx-altivec.cpp"]={"clang/test/Parser/cxx-altivec.cpp:232:18: error: the vecreturn attribute can only be used on a class or structure with one member, which must be a vector"}
		}
	},
	["err_attribute_weak_static"]={
		[c]="err_attribute_weak_static",
		[d]="weak declaration cannot have internal linkage",
		[f]="weak declaration cannot have internal linkage",
		[b]=k,
		[g]="weak declaration cannot have internal linkage",
		[h]=a,
		[i]=m,
		[e]={"41136eec6bdb",1247706744,"Generate error on declaration containing \'static\' and \'__attribute__((weak))\'","Generate error on declaration containing \'static\' and \'__attribute__((weak))\'\nPatch by Ryan Flynn\n\nllvm-svn: 75879"},
		[j]={{r,6951,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // \'weak\' only applies to declarations with external linkage.\n  if (WeakAttr *Attr = ND.getAttr<WeakAttr>()) {\n    if (!ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weak_static);"}},
		[l]={
			["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:3:33: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:4:36: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:10:28: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:11:31: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:20:40: error: weak declaration cannot have internal linkage","clang/test/SemaCXX/attr-weak.cpp:40:16: error: weak declaration cannot have internal linkage"}
		}
	},
	["err_attribute_weakref_not_global_context"]={
		[c]="err_attribute_weakref_not_global_context",
		[d]="weakref declaration of %0 must be in a global context",
		[f]="weakref declaration of A must be in a global context",
		[b]=k,
		[g]="weakref declaration of (.*?) must be in a global context",
		[h]=a,
		[i]=m,
		[e]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ...","Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more strict on what uses of weakref we accept.\n\nllvm-svn: 96992"},
		[j]={{q,1933,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Ctx->isFileContext()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_weakref_not_global_context) << cast<NamedDecl>(D);"}},
		[l]={
			["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:19:31: error: weakref declaration of \'a\' must be in a global context","clang/test/SemaCXX/attr-weakref.cpp:24:31: error: weakref declaration of \'a\' must be in a global context","clang/test/SemaCXX/attr-weakref.cpp:25:33: error: weakref declaration of \'b\' must be in a global context"}
		}
	},
	["err_attribute_weakref_not_static"]={
		[c]="err_attribute_weakref_not_static",
		[d]="weakref declaration must have internal linkage",
		[f]="weakref declaration must have internal linkage",
		[b]=k,
		[g]="weakref declaration must have internal linkage",
		[h]=a,
		[i]=m,
		[e]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ...","Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more strict on what uses of weakref we accept.\n\nllvm-svn: 96992"},
		[j]={{r,6957,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  if (WeakRefAttr *Attr = ND.getAttr<WeakRefAttr>()) {\n    if (ND.isExternallyVisible()) {\n      S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static);"}},
		[l]={
			["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:27:25: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:28:23: error: weakref declaration must have internal linkage","clang/test/SemaCXX/attr-weakref.cpp:38:16: error: weakref declaration must have internal linkage"}
		}
	},
	["err_attribute_weakref_without_alias"]={
		[c]="err_attribute_weakref_without_alias",
		[d]="weakref declaration of %0 must also have an alias attribute",
		[f]="weakref declaration of A must also have an alias attribute",
		[b]=k,
		[g]="weakref declaration of (.*?) must also have an alias attribute",
		[h]=a,
		[i]=m,
		[e]={"c18086ae1755",1266962430,"Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more ...","Add support for the weakref attribute. We still produce \"alias weak\" as llvm-gcc does, but are more strict on what uses of weakref we accept.\n\nllvm-svn: 96992"},
		[j]={{q,9516,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle these cases in TableGen.\n  // GCC accepts\n  // static int a9 __attribute__((weakref));\n  // but that looks really pointless. We reject it.\n  if (D->hasAttr<WeakRefAttr>() && !D->hasAttr<AliasAttr>()) {\n    Diag(AttrList.begin()->getLoc(), diag::err_attribute_weakref_without_alias) << cast<NamedDecl>(D);"}},
		[l]={
			["clang/test/SemaCXX/attr-weakref.cpp"]={"clang/test/SemaCXX/attr-weakref.cpp:15:30: error: weakref declaration of \'a6\' must also have an alias attribute","clang/test/SemaCXX/attr-weakref.cpp:31:23: error: weakref declaration of \'a9\' must also have an alias attribute"}
		}
	},
	["err_attribute_webassembly_funcref"]={
		[c]="err_attribute_webassembly_funcref",
		[d]="\'__funcref\' attribute can only be applied to a function pointer type",
		[f]="\'__funcref\' attribute can only be applied to a function pointer type",
		[b]=k,
		[g]="\'__funcref\' attribute can only be applied to a function pointer type",
		[h]=a,
		[i]=m,
		[e]={ib,1625925174,hb,gb}
	},
	["err_attribute_wrong_decl_type"]={
		[c]="err_attribute_wrong_decl_type",
		[d]="%0%select{ attribute|}1 only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}2",
		[f]={{nil,nil,{"A",{" attribute",a}," only applies to ",{Qb,Tb,Pb,bc,Xb,cc,Zb,Yb,Ub,Wb,Vb,Sb,Rb}}},{I,E,{"A attribute only applies to ",{Qb,Tb,Pb,bc,Xb,cc,Zb,Yb,Ub,Wb,Vb,Sb,Rb}}},{P,P,{"A attribute only applies to ",{Qb,Tb,Pb,bc,Xb,cc,Zb,Yb,Ub,Wb,Vb,Sb,Rb,"variables, functions, methods, types, enumerations, enumerators, labels, and non-static data members"}}},{S,S,{"A attribute only applies to ",{Qb,Tb,Pb,"functions and global variables","functions, variables, and Objective-C interfaces",bc,"parameters",Xb,"functions, methods, and classes",cc,"functions, methods, and global variables","classes","enums",Zb,"methods","fields and global variables","structs","parameters and typedefs","variables and typedefs","thread-local variables",Yb,Ub,Wb,"Objective-C interfaces","methods and properties","functions, methods, and properties","struct or union","struct, union or class","types","Objective-C instance methods","init methods of interface or class extension declarations",Vb,"functions, variables, classes, and Objective-C interfaces","Objective-C protocols","variables with static or thread storage duration","functions, methods, properties, and global variables","structs, unions, and typedefs","structs and typedefs","interface or protocol declarations",Sb,Rb,"variables, enums, fields and typedefs","functions, methods, enums, and classes","structs, classes, variables, functions, and inline namespaces","variables, functions, methods, types, enumerations, enumerators, labels, and non-static data members","classes and enumerations","named declarations"}}},{nil,nil,{"A attribute only applies to ",{Qb,Tb,Pb,"functions and global variables","functions, variables, and Objective-C interfaces",bc,"parameters",Xb,"functions, methods, and classes",cc,"functions, methods, and global variables","classes","enums",Zb,"methods","fields and global variables","structs","parameters and typedefs","variables and typedefs","thread-local variables",Yb,Ub,Wb,"Objective-C interfaces","methods and properties","struct or union","struct, union or class","types","Objective-C instance methods","init methods of interface or class extension declarations",Vb,"functions, variables, classes, and Objective-C interfaces","Objective-C protocols","variables with static or thread storage duration","functions, methods, properties, and global variables","structs, unions, and typedefs","structs and typedefs","interface or protocol declarations",Sb,Rb,"variables, enums, fields and typedefs","functions, methods, enums, and classes","structs, classes, variables, functions, and inline namespaces","variables, functions, methods, types, enumerations, enumerators, labels, and non-static data members","classes and enumerations"}}}},
		[b]=k,
		[g]="(.*?)(?: attribute|) only applies to (?:functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non\\-K&R\\-style functions)",
		[h]=a,
		[i]=m,
		[e]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n   redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n   wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n   redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
		[j]={{q,2249,"static void handleAnalyzerNoReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The checking path for \'noreturn\' and \'analyzer_noreturn\' are different\n  // because \'analyzer_noreturn\' does not impact the type.\n  if (!isFunctionOrMethodOrBlock(D)) {\n    // ...\n    if (!VD || (!VD->getType()->isBlockPointerType() && !VD->getType()->isFunctionPointerType())) {\n      S.Diag(AL.getLoc(), AL.isStandardAttributeSyntax() ? diag::err_attribute_wrong_decl_type : diag::warn_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunctionMethodOrBlock;"},{q,2904,"static void handleVisibilityAttr(Sema &S, Decl *D, const ParsedAttr &AL, bool isTypeVisibility) {\n  // ...\n  // \'type_visibility\' can only go on a type or namespace.\n  if (isTypeVisibility && !(isa<TagDecl>(D) || isa<ObjCInterfaceDecl>(D) || isa<NamespaceDecl>(D))) {\n    S.Diag(AL.getRange().getBegin(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedTypeOrNamespace;"},{q,4429,"/// Perform checking of type validity\n///\n/// C++11 [dcl.align]p1:\n///   An alignment-specifier may be applied to a variable or to a class\n///   data member, but it shall not be applied to a bit-field, a function\n///   parameter, the formal parameter of a catch clause, or a variable\n///   declared with the register storage class specifier. An\n///   alignment-specifier may also be applied to the declaration of a class\n///   or enumeration type.\n/// CWG 2354:\n///   CWG agreed to remove permission for alignas to be applied to\n///   enumerations.\n/// C11 6.7.5/2:\n///   An alignment attribute shall not be specified in a declaration of\n///   a typedef, or a bit-field, or a function, or a parameter, or an\n///   object declared with the register storage-class specifier.\nstatic bool validateAlignasAppliedType(Sema &S, Decl *D, const AlignedAttr &Attr, SourceLocation AttrLoc) {\n  // ...\n  if (isa<ParmVarDecl>(D)) {\n  // ...\n  } else if (const auto *VD = dyn_cast<VarDecl>(D)) {\n  // ...\n  } else if (const auto *FD = dyn_cast<FieldDecl>(D)) {\n  // ...\n  } else if (const auto *ED = dyn_cast<EnumDecl>(D)) {\n  // ...\n  } else if (!isa<TagDecl>(D)) {\n    return S.Diag(AttrLoc, diag::err_attribute_wrong_decl_type) << &Attr << Attr.isRegularKeywordAttribute() << (Attr.isC11() ? ExpectedVariableOrField : ExpectedVariableFieldOrTag);"},{q,5706,"static void handleTypeTagForDatatypeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isa<VarDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{q,6289,"static void handleObjCOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  S.Diag(D->getBeginLoc(), diag::err_attribute_wrong_decl_type) << AL.getRange() << AL << AL.isRegularKeywordAttribute() << ExpectedVariable;"},{q,8253,"static void handleNoSanitizeSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (isGlobalVar(D) && SanitizerName != \"address\")\n    S.Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << AL << AL.isRegularKeywordAttribute() << ExpectedFunction;"},{q,9530,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n      // ...\n      // diag::err_attribute_wrong_decl_type + ExpectedKernelFunction."},{q,9544,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{q,9548,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{q,9552,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"},{q,9556,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n    // ...\n    } else if (!D->hasAttr<CUDAGlobalAttr>()) {\n      if (const auto *A = D->getAttr<AMDGPUFlatWorkGroupSizeAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUWavesPerEUAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumSGPRAttr>()) {\n      // ...\n      } else if (const auto *A = D->getAttr<AMDGPUNumVGPRAttr>()) {\n        Diag(D->getLocation(), diag::err_attribute_wrong_decl_type) << A << A->isRegularKeywordAttribute() << ExpectedKernelFunction;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p8.cpp:3:1: error: \'alignas\' attribute only applies to variables, data members and tag types"}
		}
	},
	["err_attribute_wrong_decl_type_str"]={
		[c]={{nil,P,"err_attribute_wrong_decl_type_str"}},
		[d]="%0%select{ attribute|}1 only applies to %2",
		[f]={{nil,nil,{"A",{" attribute",a}," only applies to C"}},{I,P,"A attribute only applies to B"}},
		[b]=k,
		[g]="(.*?)(?: attribute|) only applies to (.*?)",
		[h]=a,
		[i]={{nil,P,m}},
		[e]={"adf66b617461",1511726472,"Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. Th...","Determine the attribute subject for diagnostics based on declarative information in DeclNodes.td. This greatly reduces the number of enumerated values used for more complex diagnostics; these are now only required when the \"attribute only applies to\" diagnostic needs to be generated manually as part of semantic processing.\n\nThis also clarifies some terminology used by the diagnostic (methods -> Objective-C methods, fields -> non-static data members, etc).\n\nMany of the tests needed to be updated in multiple places for the diagnostic wording tweaks. The first instance of the diagnostic for that attribute is fully specified and subsequent instances cut off the complete list (to make it easier if additional subjects are added in the future for the attribute).\n\nllvm-svn: 319002"},
		[j]={{q,2173,"static void handleNakedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.isDeclspecAttribute()) {\n    // ...\n    // This form is not allowed to be written on a member function (static or\n    // nonstatic) when in Microsoft compatibility mode.\n    if (S.getLangOpts().MSVCCompat && isa<CXXMethodDecl>(D)) {\n      S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type_str) << AL << AL.isRegularKeywordAttribute() << \"non-member functions\";"}},
		[l]={
			["clang/test/SemaObjC/attr-objc-non-lazy.m"]={"clang/test/SemaObjC/attr-objc-non-lazy.m:9:16: error: \'objc_nonlazy_class\' attribute only applies to Objective-C interfaces and Objective-C implementation declarations","clang/test/SemaObjC/attr-objc-non-lazy.m:23:16: error: \'objc_nonlazy_class\' attribute only applies to Objective-C interfaces and Objective-C implementation declarations","clang/test/SemaObjC/attr-objc-non-lazy.m:27:16: error: \'objc_nonlazy_class\' attribute only applies to Objective-C interfaces and Objective-C implementation declarations"}
		}
	},
	["err_attribute_wrong_number_arguments"]={
		[c]="err_attribute_wrong_number_arguments",
		[d]="%0 attribute %plural{0:takes no arguments|1:takes one argument|:requires exactly %1 arguments}1",
		[f]={{nil,nil,{"A attribute ",{"takes no arguments","takes one argument","requires exactly B arguments"}}}},
		[b]=k,
		[g]="(.*?) attribute (?:takes no arguments|takes one argument|requires exactly (.*?) arguments)",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{"clang/lib/Sema/ParsedAttr.cpp",284,"bool ParsedAttr::checkExactlyNumArgs(Sema &S, unsigned Num) const { return checkAttributeNumArgsImpl(S, *this, Num, diag::err_attribute_wrong_number_arguments, std::not_equal_to<unsigned>()); }"},{q,1505,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The iboutletcollection attribute can have zero or one arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{q,1917,"static void handleWeakRefAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{q,3260,"static void handleVecTypeHint(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!AL.hasParsedType()) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{q,4162,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->getNumParams() > EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{q,4168,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->getNumParams() < EncodingIndices.size() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << (unsigned)(EncodingIndices.size() - 1);"},{q,4373,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // check the attribute arguments.\n  if (AL.getNumArgs() > 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 1;"},{u,6795,"static void HandleBTFTypeTagAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  // Check the number of attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,6837,"/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the\n/// specified type.  The attribute contains 1 argument, the id of the address\n/// space for the type.\nstatic void HandleAddressSpaceTypeAttribute(QualType &Type, const ParsedAttr &Attr, TypeProcessingState &State) {\n  // ...\n  if (Attr.getKind() == ParsedAttr::AT_AddressSpace) {\n    // Check the attribute arguments.\n    if (Attr.getNumArgs() != 1) {\n      S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,7114,"/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type\n/// attribute on the specified type.  Returns true to indicate that\n/// the attribute was handled, false to indicate that the type does\n/// not permit the attribute.\nstatic bool handleObjCGCTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (attr.getNumArgs() > 1) {\n    S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"},{u,8094,"/// HandleVectorSizeAttribute - this attribute is only applicable to integral\n/// and float scalars, although arrays, pointers, and function return values are\n/// allowed in conjunction with this construct. Aggregates with this attribute\n/// are invalid, even if they are of the same size as a corresponding scalar.\n/// The raw attribute should contain precisely 1 argument, the vector size for\n/// the variable, measured in bytes. If curType and rawAttr are well formed,\n/// this routine will return a new vector type.\nstatic void HandleVectorSizeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,8114,"/// Process the OpenCL-like ext_vector_type attribute when it occurs on\n/// a type.\nstatic void HandleExtVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,8218,"/// HandleNeonVectorTypeAttr - The \"neon_vector_type\" and\n/// \"neon_polyvector_type\" attributes are used to create vector types that\n/// are mangled according to ARM\'s ABI.  Otherwise, these types are identical\n/// to those created with the \"vector_size\" attribute.  Unlike \"vector_size\"\n/// the argument to these Neon attributes is the number of vector elements,\n/// not the vector size in bytes.  The vector width and element type must\n/// match one of the standard Neon vector types.\nstatic void HandleNeonVectorTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S, VectorType::VectorKind VecKind) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,8273,"/// HandleArmSveVectorBitsTypeAttr - The \"arm_sve_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless SVE types defined by\n/// the ACLE, such as svint32_t and svbool_t.\nstatic void HandleArmSveVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,8356,"/// HandleRISCVRVVVectorBitsTypeAttr - The \"riscv_rvv_vector_bits\" attribute is\n/// used to create fixed-length versions of sizeless RVV types such as\n/// vint8m1_t_t.\nstatic void HandleRISCVRVVVectorBitsTypeAttr(QualType &CurType, ParsedAttr &Attr, Sema &S) {\n  // ...\n  // Check the attribute arguments.\n  if (Attr.getNumArgs() != 1) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 1;"},{u,8461,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // ...\n  if (Attr.getNumArgs() != 2) {\n    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << Attr << 2;"},{u,8777,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::AT_AcquireHandle: {\n      // ...\n      if (attr.getNumArgs() != 1) {\n        state.getSema().Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << attr << 1;"}},
		[l]={
			["clang/test/SemaCXX/warn-consumed-parsing.cpp"]={"clang/test/SemaCXX/warn-consumed-parsing.cpp:20:41: error: \'set_typestate\' attribute takes one argument","clang/test/SemaCXX/warn-consumed-parsing.cpp:21:41: error: \'test_typestate\' attribute takes one argument"}
		}
	},
	["err_attribute_wrong_number_arguments_for"]={
		[c]={{nil,v,"err_attribute_wrong_number_arguments_for"}},
		[d]={{nil,v,"%0 attribute references function %1, which %plural{0:takes no arguments|1:takes one argument|:takes exactly %2 arguments}2"}},
		[f]={{nil,v,{"A attribute references function B, which ",{"takes no arguments","takes one argument","takes exactly C arguments"}}}},
		[b]=k,
		[g]="(.*?) attribute references function (.*?), which (?:takes no arguments|takes one argument|takes exactly (.*?) arguments)",
		[h]=a,
		[i]={{nil,v,m}},
		[e]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[j]={{q,1055,"static void handleDiagnoseAsBuiltinAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AttrFD->getNumParams() != AL.getNumArgs() - 1) {\n    S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments_for) << AL << AttrFD << AttrFD->getNumParams();"}},
		[l]={
			["clang/test/Sema/attr-diagnose-as-builtin.c"]={"clang/test/Sema/attr-diagnose-as-builtin.c:25:107: error: \'diagnose_as_builtin\' attribute references function \'__builtin_memcpy\', which takes exactly 3 arguments","clang/test/Sema/attr-diagnose-as-builtin.c:27:76: error: \'diagnose_as_builtin\' attribute references function \'__builtin_memcpy\', which takes exactly 3 arguments"}
		}
	},
	["err_attribute_zero_size"]={
		[c]="err_attribute_zero_size",
		[d]={{nil,o,"zero %0 size"},{p,nil,"zero vector size"}},
		[f]={{nil,o,"zero A size"},{p,nil,"zero vector size"}},
		[b]=k,
		[g]="zero (.*?) size",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{u,2750,"QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr, SourceLocation AttrLoc) {\n  // ...\n  if (VectorSizeBits == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << SizeExpr->getSourceRange() << \"vector\";"},{u,2823,"/// Build an ext-vector type.\n///\n/// Run the required checks for the extended vector type.\nQualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize, SourceLocation AttrLoc) {\n  // ...\n  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {\n    // ...\n    if (vectorSize == 0) {\n      Diag(AttrLoc, diag::err_attribute_zero_size) << ArraySize->getSourceRange() << \"vector\";"},{u,2885,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixRows == 0 && MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange << ColRange;"},{u,2890,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixRows == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << RowRange;"},{u,2894,"QualType Sema::BuildMatrixType(QualType ElementTy, Expr *NumRows, Expr *NumCols, SourceLocation AttrLoc) {\n  // ...\n  if (MatrixColumns == 0) {\n    Diag(AttrLoc, diag::err_attribute_zero_size) << \"matrix\" << ColRange;"}},
		[l]={
			["clang/test/SemaTemplate/matrix-type.cpp"]={"clang/test/SemaTemplate/matrix-type.cpp:111:28: error: zero matrix size","clang/test/SemaTemplate/matrix-type.cpp:15:42: error: zero matrix size"}
		}
	},
	["err_attributes_are_not_compatible"]={
		[c]="err_attributes_are_not_compatible",
		[d]="%0 and %1%select{ attributes|}2 are not compatible",
		[f]={{nil,nil,{"A and B",{" attributes",a}," are not compatible"}},{I,nil,"A and B attributes are not compatible"}},
		[b]=k,
		[g]="(.*?) and (.*?)(?: attributes|) are not compatible",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{q,277,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{q,289,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(AL.getLocation(), diag::err_attributes_are_not_compatible) << &AL << A << (AL.isRegularKeywordAttribute() || A->isRegularKeywordAttribute());"},{q,1885,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // ...\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << I << (AL.isRegularKeywordAttribute() || I->isRegularKeywordAttribute());"},{q,3898,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    // ...\n    if (!Match) {\n      Diag(EA->getLocation(), diag::err_attributes_are_not_compatible) << CI << EA << (CI.isRegularKeywordAttribute() || EA->isRegularKeywordAttribute());"},{q,4958,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(PrevSNA->getLocation(), diag::err_attributes_are_not_compatible) << PrevSNA << &SNA << (PrevSNA->isRegularKeywordAttribute() || SNA.isRegularKeywordAttribute());"},{q,5256,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    // ...\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      // ...\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << OAttr << (AL.isRegularKeywordAttribute() || OAttr->isRegularKeywordAttribute());"},{q,5275,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  // ...\n  } else {\n    // ...\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      // ...\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible) << AL << PAttr << (AL.isRegularKeywordAttribute() || PAttr->isRegularKeywordAttribute());"},{q,5512,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  // ...\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(CI.getLoc(), diag::err_attributes_are_not_compatible) << getParameterABISpelling(abi) << existingAttr << (CI.isRegularKeywordAttribute() || existingAttr->isRegularKeywordAttribute());"},{u,7363,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__ptr32\'\""},{u,7368,"static bool handleMSPointerTypeQualifierAttr(TypeProcessingState &State, ParsedAttr &PAttr, QualType &Type) {\n  // ...\n  // You cannot have both __sptr and __uptr on the same type, nor can you\n  // have __ptr32 and __ptr64.\n  if (Attrs[attr::Ptr32] && Attrs[attr::Ptr64]) {\n  // ...\n  } else if (Attrs[attr::SPtr] && Attrs[attr::UPtr]) {\n    S.Diag(PAttr.getLoc(), diag::err_attributes_are_not_compatible) << \"\'__sptr\'\""},{u,7892,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (attr.getKind() == ParsedAttr::AT_Regparm) {\n    // ...\n    if (CC == CC_X86FastCall) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << \"regparm\" << attr.isRegularKeywordAttribute();"},{u,7972,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  if (CCOld != CC) {\n    // Error out on when there\'s already an attribute on the type\n    // and the CCs don\'t match.\n    if (S.getCallingConvAttributedType(type)) {\n      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << FunctionType::getNameForCallConv(CC) << FunctionType::getNameForCallConv(CCOld) << attr.isRegularKeywordAttribute();"},{u,8006,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Also diagnose fastcall with regparm.\n  if (CC == CC_X86FastCall && fn->getHasRegParm()) {\n    S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible) << \"regparm\" << FunctionType::getNameForCallConv(CC_X86FastCall) << attr.isRegularKeywordAttribute();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4022,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // ...\n    for (const std::string &A : DeclAttrs) {\n      // ...\n      OS << \"      S.Diag(AL.getLoc(), diag::err_attributes_are_not_compatible)\""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4044,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // ...\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      // ...\n      for (const std::string &A : DeclAttrs) {\n        // ...\n        MergeDeclOS << \"      S.Diag(First->getLocation(), \"\n                    << \"diag::err_attributes_are_not_compatible) << First << \""},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4085,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // ...\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    // ...\n    MergeStmtOS << \"        S.Diag((*Iter)->getLocation(), \"\n                << \"diag::err_attributes_are_not_compatible) << *Iter << \""}},
		[l]={
			["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:22:26: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:24:23: error: \'interrupt\' and \'mips16\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:26:44: error: \'mips16\' and \'interrupt\' attributes are not compatible","clang/test/Sema/mips-interrupt-attr.c:28:39: error: \'interrupt\' and \'mips16\' attributes are not compatible"}
		}
	},
	["err_attributes_misplaced"]={
		[c]={{nil,P,"err_attributes_misplaced"}},
		[d]={{nil,P,"misplaced attributes; expected attributes here"}},
		[f]={{nil,P,"misplaced attributes; expected attributes here"}},
		[b]=k,
		[g]="misplaced attributes; expected attributes here",
		[h]=a,
		[i]={{nil,P,M}},
		[e]={"c5089c08d4cd",1514240600,"Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword.","Add a fixit for attributes incorrectly placed prior to \'struct/class/enum\' keyword.\n\nSuggest moving the following erroneous attrib list (based on location)\n[[]] struct X;  \nto \nstruct [[]] X;\n\nAdditionally, added a fixme for the current implementation that diagnoses misplaced attributes to consider using the newly introduced diagnostic (that I think is more user-friendly).\n\nllvm-svn: 321449"},
		[j]={{L,1719,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(CorrectLocation, diag::err_keyword_misplaced) << FirstAttr : Diag(CorrectLocation, diag::err_attributes_misplaced)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"}},
		[l]={
			["clang/test/Parser/cxx0x-attributes.cpp"]={"clang/test/Parser/cxx0x-attributes.cpp:69:12: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:70:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:71:11: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:72:10: error: misplaced attributes; expected attributes here","clang/test/Parser/cxx0x-attributes.cpp:101:12: error: misplaced attributes; expected attributes here"}
		}
	},
	["err_attributes_not_allowed"]={
		[c]="err_attributes_not_allowed",
		[d]="an attribute list cannot appear here",
		[f]="an attribute list cannot appear here",
		[b]=k,
		[g]="an attribute list cannot appear here",
		[h]=a,
		[i]=M,
		[e]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n   redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n   wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n   redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
		[j]={{L,1683,"/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets\n/// of a C++11 attribute-specifier in a location where an attribute is not\n/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this\n/// situation.\n///\n/// \\return \\c true if we skipped an attribute-like chunk of tokens, \\c false if\n/// this doesn\'t appear to actually be an attribute-specifier, and the caller\n/// should try to parse it.\nbool Parser::DiagnoseProhibitedCXX11Attribute() {\n  // ...\n  case CAK_AttributeSpecifier:\n    // ...\n    Diag(BeginLoc, diag::err_attributes_not_allowed) << SourceRange(BeginLoc, EndLoc);"},{L,1707,"/// We have found the opening square brackets of a C++11\n/// attribute-specifier in a location where an attribute is not permitted, but\n/// we know where the attributes ought to be written. Parse them anyway, and\n/// provide a fixit moving them to the right place.\nvoid Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributes &Attrs, SourceLocation CorrectLocation) {\n  // ...\n  (Keyword ? Diag(Loc, diag::err_keyword_not_allowed) << Keyword : Diag(Loc, diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"},{L,1726,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n  // ...\n  } else {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << Range;"},{L,5052,"/// ParseEnumSpecifier\n///       enum-specifier: [C99 6.7.2.2]\n///         \'enum\' identifier[opt] \'{\' enumerator-list \'}\'\n///[C99/C++]\'enum\' identifier[opt] \'{\' enumerator-list \',\' \'}\'\n/// [GNU]   \'enum\' attributes[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                 \'}\' attributes[opt]\n/// [MS]    \'enum\' __declspec[opt] identifier[opt] \'{\' enumerator-list \',\' [opt]\n///                                                 \'}\'\n///         \'enum\' identifier\n/// [GNU]   \'enum\' attributes[opt] identifier\n///\n/// [C++11] enum-head \'{\' enumerator-list[opt] \'}\'\n/// [C++11] enum-head \'{\' enumerator-list \',\'  \'}\'\n///\n///       enum-head: [C++11]\n///         enum-key attribute-specifier-seq[opt] identifier[opt] enum-base[opt]\n///         enum-key attribute-specifier-seq[opt] nested-name-specifier\n///             identifier enum-base[opt]\n///\n///       enum-key: [C++11]\n///         \'enum\'\n///         \'enum\' \'class\'\n///         \'enum\' \'struct\'\n///\n///       enum-base: [C++11]\n///         \':\' type-specifier-seq\n///\n/// [C++] elaborated-type-specifier:\n/// [C++]   \'enum\' nested-name-specifier[opt] identifier\n///\nvoid Parser::ParseEnumSpecifier(SourceLocation StartLoc, DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // An elaborated-type-specifier has a much more constrained grammar:\n  //\n  //   \'enum\' nested-name-specifier[opt] identifier\n  //\n  // If we parsed any other bits, reject them now.\n  //\n  // MSVC and (for now at least) Objective-C permit a full enum-specifier\n  // or opaque-enum-declaration anywhere.\n  if (IsElaboratedTypeSpecifier && !getLangOpts().MicrosoftExt && !getLangOpts().ObjC) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{L,6052,"/// ParseTypeQualifierListOpt\n///          type-qualifier-list: [C99 6.7.5]\n///            type-qualifier\n/// [vendor]   attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n///            type-qualifier-list type-qualifier\n/// [vendor]   type-qualifier-list attributes\n///              [ only if AttrReqs & AR_VendorAttributesParsed ]\n/// [C++0x]    attribute-specifier[opt] is allowed before cv-qualifier-seq\n///              [ only if AttReqs & AR_CXX11AttributesParsed ]\n/// Note: vendor can be GNU, MS, etc and can be explicitly controlled via\n/// AttrRequirements bitmask values.\nvoid Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, bool AtomicAllowed, bool IdentifierRequired, std::optional<llvm::function_ref<void()>> CodeCompletionHandler) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw___attribute:\n      if (AttrReqs & AR_GNUAttributesParsedAndRejected)\n        // ...\n        Diag(Tok, diag::err_attributes_not_allowed);"},{cb,777,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///     using-declaration: [C++ 7.3.p3: namespace.udecl]\n///       \'using\' using-declarator-list[opt] ;\n///\n///     using-declarator-list: [C++1z]\n///       using-declarator \'...\'[opt]\n///       using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///     using-declarator-list: [C++98-14]\n///       using-declarator\n///\n///     alias-declaration: C++11 [dcl.dcl]p1\n///       \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///     using-enum-declaration: [C++20, dcl.enum]\n///       \'using\' elaborated-enum-specifier ;\n///       The terminal name of the elaborated-enum-specifier undergoes\n///       ordinary lookup\n///\n///     elaborated-enum-specifier:\n///       \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n  // ...\n  // If we had any misplaced attributes from earlier, this is where they\n  // should have been written.\n  if (MisplacedAttrs.Range.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(Tok.getLocation(), CharSourceRange::getTokenRange(Range)) << FixItHint::CreateRemoval(Range);"},{cb,1932,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  // Forbid misplaced attributes. In cases of a reference, we pass attributes\n  // to caller to handle.\n  if (TUK != Sema::TUK_Reference) {\n    // ...\n    if (AttrRange.isValid()) {\n      // ...\n      (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << FirstAttr : Diag(Loc, diag::err_attributes_not_allowed)) << AttrRange << FixItHint::CreateInsertionFromRange(AttrFixitLoc, CharSourceRange(AttrRange, true)) << FixItHint::CreateRemoval(AttrRange);"},{cb,1979,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n      // ...\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{cb,1996,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n    // ...\n    } else if (TUK == Sema::TUK_Reference || (TUK == Sema::TUK_Friend && TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{cb,2066,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n  // ...\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  // ...\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{cb,2077,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n  // ...\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  // ...\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  // ...\n  } else {\n    if (TUK != Sema::TUK_Declaration && TUK != Sema::TUK_Definition)\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{cb,3060,"/// ParseCXXClassMemberDeclaration - Parse a C++ class member declaration.\n///\n///       member-declaration:\n///         decl-specifier-seq[opt] member-declarator-list[opt] \';\'\n///         function-definition \';\'[opt]\n///         ::[opt] nested-name-specifier template[opt] unqualified-id \';\'[TODO]\n///         using-declaration                                            [TODO]\n/// [C++0x] static_assert-declaration\n///         template-declaration\n/// [GNU]   \'__extension__\' member-declaration\n///\n///       member-declarator-list:\n///         member-declarator\n///         member-declarator-list \',\' member-declarator\n///\n///       member-declarator:\n///         declarator virt-specifier-seq[opt] pure-specifier[opt]\n/// [C++2a] declarator requires-clause\n///         declarator constant-initializer[opt]\n/// [C++11] declarator brace-or-equal-initializer[opt]\n///         identifier[opt] \':\' constant-expression\n///\n///       virt-specifier-seq:\n///         virt-specifier\n///         virt-specifier-seq virt-specifier\n///\n///       virt-specifier:\n///         override\n///         final\n/// [MS]    sealed\n///\n///       pure-specifier:\n///         \'= 0\'\n///\n///       constant-initializer:\n///         \'=\' constant-expression\n///\nParser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS, ParsedAttributes &AccessAttrs, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject *TemplateDiags) {\n  // ...\n  while (true) {\n    // ...\n    if (DS.isFriendSpecified()) {\n      // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains\n      // to a friend declaration, that declaration shall be a definition.\n      //\n      // Diagnose attributes that appear in a friend member function declarator:\n      //   friend int foo [[]] ();\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n        if (AL.isCXX11Attribute() || AL.isRegularKeywordAttribute()) {\n          // ...\n          (AL.isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << AL : Diag(Loc, diag::err_attributes_not_allowed)) << AL.getRange();"},{cb,4664,"void Parser::DiagnoseAndSkipCXX11Attributes() {\n  // ...\n  if (EndLoc.isValid()) {\n    // ...\n    (Keyword ? Diag(StartLoc, diag::err_keyword_not_allowed) << Keyword : Diag(StartLoc, diag::err_attributes_not_allowed)) << Range;"}},
		[l]={
			["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:15:7: error: an attribute list cannot appear here"}
		}
	},
	["err_auto_bitfield"]={
		[c]="err_auto_bitfield",
		[d]="cannot pass bit-field as __auto_type initializer in C",
		[f]="cannot pass bit-field as __auto_type initializer in C",
		[b]=k,
		[g]="cannot pass bit\\-field as __auto_type initializer in C",
		[h]=a,
		[i]=m,
		[e]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gcc/Typeof.html\n\nDifferences from the GCC extension:\n * __auto_type is also permitted in C++ (but only in places where\n   it could appear in C), allowing its use in headers that might\n   be shared across C and C++, or used from C++98\n * __auto_type can be combined with a declarator, as with C++ auto\n   (for instance, \"__auto_type *p\")\n * multiple variables can be declared in a single __auto_type\n   declaration, with the C++ semantics (the deduced type must be\n   the same in each case)\n\nThis patch also adds a missing restriction on applying typeof to\na bit-field, which GCC has historically rejected in C (due to\nlack of clarity as to whether the operand should be promoted).\nThe same restriction also applies to __auto_type in C (in both\nGCC and Clang).\n\nThis also fixes PR25449.\n\nPatch by Nicholas Allegra!\n\nllvm-svn: 252690"},
		[j]={{yb,4868,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  // ...\n  } else {\n    // ...\n    if (InitList) {\n    // ...\n    } else {\n      if (!getLangOpts().CPlusPlus && Init->refersToBitField()) {\n        Diag(Loc, diag::err_auto_bitfield);"}},
		[l]={
			["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:20:40: error: cannot pass bit-field as __auto_type initializer in C"}
		}
	},
	["err_auto_different_deductions"]={
		[c]="err_auto_different_deductions",
		[d]="\'%select{auto|decltype(auto)|__auto_type}0\' deduced as %1 in declaration of %2 and deduced as %3 in declaration of %4",
		[f]={{nil,S,{{qb,xb,ub,"template arguments"}," deduced as B in declaration of C and deduced as D in declaration of E"}},{nil,nil,{"\'",{"auto","decltype(auto)","__auto_type"},"\' deduced as B in declaration of C and deduced as D in declaration of E"}}},
		[b]=k,
		[g]="(?:\'auto\'|\'decltype\\(auto\\)\'|\'__auto_type\'|template arguments) deduced as (.*?) in declaration of (.*?) and deduced as (.*?) in declaration of (.*?)",
		[h]=a,
		[i]=m,
		[e]={rb,1298171975,sb,vb},
		[j]={{r,14629,"/// BuildDeclaratorGroup - convert a list of declarations into a declaration\n/// group, performing any necessary semantic checking.\nSema::DeclGroupPtrTy Sema::BuildDeclaratorGroup(MutableArrayRef<Decl *> Group) {\n  // C++14 [dcl.spec.auto]p7: (DR1347)\n  //   If the type that replaces the placeholder type is not the same in each\n  //   deduction, the program is ill-formed.\n  if (Group.size() > 1) {\n    // ...\n    for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n      // ...\n      if (Deduced.isNull()) {\n      // ...\n      } else if (!Context.hasSameType(DT->getDeducedType(), Deduced)) {\n        // ...\n        auto Dia = Diag(D->getTypeSourceInfo()->getTypeLoc().getBeginLoc(), diag::err_auto_different_deductions) << (AT ? (unsigned)AT->getKeyword() : 3) << Deduced << DeducedDecl->getDeclName() << DT->getDeducedType() << D->getDeclName();"}},
		[l]={
			["clang/test/SemaCXX/auto-invalid-init-crash.cpp"]={"clang/test/SemaCXX/auto-invalid-init-crash.cpp:7:1: error: \'auto\' deduced as \'int\' in declaration of \'c\' and deduced as \'std::initializer_list<int>\' in declaration of \'d\'"}
		}
	},
	["err_auto_expr_deduction_failure"]={
		[c]={{nil,C,"err_auto_expr_deduction_failure"}},
		[d]={{nil,C,"functional-style cast to %0 has incompatible initializer of type %1"}},
		[f]={{nil,C,"functional-style cast to A has incompatible initializer of type B"}},
		[b]=k,
		[g]="functional\\-style cast to (.*?) has incompatible initializer of type (.*?)",
		[h]=a,
		[i]={{nil,C,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]={{D,1533,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_deduction_failure) << Ty << Deduce->getType() << FullRange << Deduce->getSourceRange());"}},
		[l]={
			["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:27:7: error: functional-style cast to \'auto\' has incompatible initializer of type \'<overloaded function type>\'"}
		}
	},
	["err_auto_expr_init_multiple_expressions"]={
		[c]={{nil,C,"err_auto_expr_init_multiple_expressions"}},
		[d]={{nil,C,"initializer for functional-style cast to %0 contains multiple expressions"}},
		[f]={{nil,C,"initializer for functional-style cast to A contains multiple expressions"}},
		[b]=k,
		[g]="initializer for functional\\-style cast to (.*?) contains multiple expressions",
		[h]=a,
		[i]={{nil,C,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]={{D,1516,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.size() > 1) {\n      // ...\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_expr_init_multiple_expressions) << Ty << FullRange);"}},
		[l]={
			["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:29:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:30:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:33:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:34:17: error: initializer for functional-style cast to \'auto\' contains multiple expressions","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:36:15: error: initializer for functional-style cast to \'auto\' contains multiple expressions"}
		}
	},
	["err_auto_expr_init_no_expression"]={
		[c]={{nil,C,"err_auto_expr_init_no_expression"}},
		[d]={{nil,C,"initializer for functional-style cast to %0 is empty"}},
		[f]={{nil,C,"initializer for functional-style cast to A is empty"}},
		[b]=k,
		[g]="initializer for functional\\-style cast to (.*?) is empty",
		[h]=a,
		[i]={{nil,C,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]={{D,1511,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.empty())\n      return ExprError(Diag(TyBeginLoc, diag::err_auto_expr_init_no_expression) << Ty << FullRange);"}},
		[l]={
			["clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp"]={"clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:15:7: error: initializer for functional-style cast to \'auto\' is empty","clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp:16:7: error: initializer for functional-style cast to \'auto\' is empty"}
		}
	},
	["err_auto_expr_init_paren_braces"]={
		[c]={{nil,C,"err_auto_expr_init_paren_braces"}},
		[d]={{nil,C,"cannot deduce actual type for %1 from %select{parenthesized|nested}0 initializer list"}},
		[f]={{nil,C,{"cannot deduce actual type for B from ",{"parenthesized","nested"}," initializer list"}}},
		[b]=k,
		[g]="cannot deduce actual type for (.*?) from (?:parenthesized|nested) initializer list",
		[h]=a,
		[i]={{nil,C,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]={{D,1526,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << ListInitialization << Ty << FullRange);"},{D,2065,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (isa<InitListExpr>(Deduce))\n      return ExprError(Diag(Deduce->getBeginLoc(), diag::err_auto_expr_init_paren_braces) << Braced << AllocType << TypeRange);"}},
		[l]={
			["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:8:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list","clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:9:22: error: cannot deduce actual type for \'decltype(auto)\' from parenthesized initializer list"}
		}
	},
	["err_auto_fn_deduction_failure"]={
		[c]="err_auto_fn_deduction_failure",
		[d]="cannot deduce return type %0 from returned value of type %1",
		[f]="cannot deduce return type A from returned value of type B",
		[b]=k,
		[g]="cannot deduce return type (.*?) from returned value of type (.*?)",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{bb,3869,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  // ...\n  {\n    // ...\n    default:\n      Diag(RetExpr->getExprLoc(), diag::err_auto_fn_deduction_failure) << OrigResultType.getType() << RetExpr->getType();"}},
		[l]={
			["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:74:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:82:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:90:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'","clang/test/SemaCXX/deduced-return-void.cpp:98:10: error: cannot deduce return type \'auto *\' from returned value of type \'void\'"}
		}
	},
	["err_auto_fn_different_deductions"]={
		[c]="err_auto_fn_different_deductions",
		[d]="\'%select{auto|decltype(auto)}0\' in return type deduced as %1 here but deduced as %2 in earlier return statement",
		[f]={{nil,nil,{"\'",{"auto","decltype(auto)"},"\' in return type deduced as B here but deduced as C in earlier return statement"}}},
		[b]=k,
		[g]="\'(?:auto|decltype\\(auto\\))\' in return type deduced as (.*?) here but deduced as (.*?) in earlier return statement",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{bb,3863,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  // ...\n  {\n    // ...\n    case TDK_Inconsistent: {\n      // ...\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n      // ...\n      else\n        Diag(ReturnLoc, diag::err_auto_fn_different_deductions) << (AT->isDecltypeAuto() ? 1 : 0) << Info.SecondArg << Info.FirstArg;"}},
		[l]={
			["clang/test/SemaCXX/cxx2b-consteval-if.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-if.cpp:6:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:11:19: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement","clang/test/SemaCXX/cxx2b-consteval-if.cpp:26:5: error: \'auto\' in return type deduced as \'double\' here but deduced as \'int\' in earlier return statement"}
		}
	},
	["err_auto_fn_no_return_but_not_auto"]={
		[c]="err_auto_fn_no_return_but_not_auto",
		[d]="cannot deduce return type %0 for function with no return statements",
		[f]="cannot deduce return type A for function with no return statements",
		[b]=k,
		[g]="cannot deduce return type (.*?) for function with no return statements",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{r,15589,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    if (FD) {\n      // ...\n      if (getLangOpts().CPlusPlus14) {\n        if (!FD->isInvalidDecl() && Body && !FD->isDependentContext() && FD->getReturnType()->isUndeducedType()) {\n          // For a function with a deduced result type to return void,\n          // the result type as written must be \'auto\' or \'decltype(auto)\',\n          // possibly cv-qualified or constrained, but not ref-qualified.\n          if (!FD->getReturnType()->getAs<AutoType>()) {\n            Diag(dcl->getLocation(), diag::err_auto_fn_no_return_but_not_auto) << FD->getReturnType();"}},
		[l]={
			["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:69:7: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:85:11: error: cannot deduce return type \'auto *\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:104:7: error: cannot deduce return type \'auto &\' for function with no return statements","clang/test/SemaCXX/deduced-return-void.cpp:122:11: error: cannot deduce return type \'auto &\' for function with no return statements"}
		}
	},
	["err_auto_fn_return_init_list"]={
		[c]="err_auto_fn_return_init_list",
		[d]="cannot deduce return type from initializer list",
		[f]="cannot deduce return type from initializer list",
		[b]=k,
		[g]="cannot deduce return type from initializer list",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{bb,3799,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  // ...\n  if (RetExpr && isa<InitListExpr>(RetExpr)) {\n    // ...\n    Diag(RetExpr->getExprLoc(), getCurLambda() ? diag::err_lambda_return_init_list : diag::err_auto_fn_return_init_list) << RetExpr->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:99:29: error: cannot deduce return type from initializer list","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:100:39: error: cannot deduce return type from initializer list"}
		}
	},
	["err_auto_fn_return_void_but_not_auto"]={
		[c]="err_auto_fn_return_void_but_not_auto",
		[d]="cannot deduce return type %0 from omitted return expression",
		[f]="cannot deduce return type A from omitted return expression",
		[b]=k,
		[g]="cannot deduce return type (.*?) from omitted return expression",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{bb,3823,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  // ...\n  if (!RetExpr) {\n    // For a function with a deduced result type to return with omitted\n    // expression, the result type as written must be \'auto\' or\n    // \'decltype(auto)\', possibly cv-qualified or constrained, but not\n    // ref-qualified.\n    if (!OrigResultType.getType()->getAs<AutoType>()) {\n      Diag(ReturnLoc, diag::err_auto_fn_return_void_but_not_auto) << OrigResultType.getType();"}},
		[l]={
			["clang/test/SemaCXX/deduced-return-void.cpp"]={"clang/test/SemaCXX/deduced-return-void.cpp:71:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:78:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:87:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:94:3: error: cannot deduce return type \'auto *\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:107:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:114:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:124:3: error: cannot deduce return type \'auto &\' from omitted return expression","clang/test/SemaCXX/deduced-return-void.cpp:131:3: error: cannot deduce return type \'auto &\' from omitted return expression"}
		}
	},
	["err_auto_fn_used_before_defined"]={
		[c]="err_auto_fn_used_before_defined",
		[d]="function %0 with deduced return type cannot be used before it is defined",
		[f]="function A with deduced return type cannot be used before it is defined",
		[b]=k,
		[g]="function (.*?) with deduced return type cannot be used before it is defined",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{yb,5038,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  // ...\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(Loc, diag::err_auto_fn_used_before_defined) << FD;"}},
		[l]={
			["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:22:14: error: function \'operator auto\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:97:9: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:98:16: error: function \'fwd_decl\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:108:16: error: function \'fac_2\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:142:11: error: function \'fwd_decl<int>\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:259:14: error: function \'f\' with deduced return type cannot be used before it is defined","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:350:15: error: function \'f\' with deduced return type cannot be used before it is defined"}
		}
	},
	["err_auto_fn_virtual"]={
		[c]="err_auto_fn_virtual",
		[d]="function with deduced return type cannot be virtual",
		[f]="function with deduced return type cannot be virtual",
		[b]=k,
		[g]="function with deduced return type cannot be virtual",
		[h]=a,
		[i]=m,
		[e]={mb,1367650832,jb,kb},
		[j]={{r,9898,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++ [dcl.fct.spec]p5:\n    //   The virtual specifier shall only be used in declarations of\n    //   nonstatic class member functions that appear within a\n    //   member-specification of a class declaration; see 10.3.\n    //\n    if (isVirtual && !NewFD->isInvalidDecl()) {\n      // ...\n      if (getLangOpts().CPlusPlus14 && NewFD->getReturnType()->isUndeducedType())\n        Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_auto_fn_virtual);"}},
		[l]={
			["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:313:5: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:324:14: error: function with deduced return type cannot be virtual","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:325:18: error: function with deduced return type cannot be virtual"}
		}
	},
	["err_auto_inconsistent_deduction"]={
		[c]={{nil,P,"err_auto_inconsistent_deduction"}},
		[d]={{nil,P,"deduced conflicting types %diff{($ vs $) |}0,1for initializer list element type"}},
		[f]={{nil,P,{"deduced conflicting types ",{"(A vs B) ",a},"for initializer list element type"}}},
		[b]=k,
		[g]="deduced conflicting types (?:\\((.*?) vs (.*?)\\) |)for initializer list element type",
		[h]=a,
		[i]={{nil,P,m}},
		[e]={"b1efc9b410ea",1504053848,"Give a better error if auto deduction fails due to inconsistent element types in a braced initialize...","Give a better error if auto deduction fails due to inconsistent element types in a braced initializer list.\n\nllvm-svn: 312085"},
		[j]={{yb,4854,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n  // ...\n  } else {\n    // ...\n    if (InitList) {\n      // ...\n      for (Expr *Init : InitList->inits()) {\n        // ...\n        if (auto TDK = DeduceTemplateArgumentsFromCallArgument(*this, TemplateParamsSt.get(), 0, TemplArg, Init, Info, Deduced, OriginalCallArgs, /*Decomposed=*/true,\n          // ...\n          if (TDK == TDK_Inconsistent) {\n            Diag(Info.getLocation(), diag::err_auto_inconsistent_deduction) << Info.FirstArg << Info.SecondArg << DeducedFromInitRange << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:139:13: error: deduced conflicting types (\'int\' vs \'double\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:144:13: error: deduced conflicting types (\'void (*)(int)\' vs \'void (*)(float)\') for initializer list element type","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:147:16: error: deduced conflicting types (\'double\' vs \'float\') for initializer list element type"}
		}
	},
	["err_auto_init_list_from_c"]={
		[c]="err_auto_init_list_from_c",
		[d]="cannot use __auto_type with initializer list in C",
		[f]="cannot use __auto_type with initializer list in C",
		[b]=k,
		[g]="cannot use __auto_type with initializer list in C",
		[h]=a,
		[i]=m,
		[e]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gcc/Typeof.html\n\nDifferences from the GCC extension:\n * __auto_type is also permitted in C++ (but only in places where\n   it could appear in C), allowing its use in headers that might\n   be shared across C and C++, or used from C++98\n * __auto_type can be combined with a declarator, as with C++ auto\n   (for instance, \"__auto_type *p\")\n * multiple variables can be declared in a single __auto_type\n   declaration, with the C++ semantics (the deduced type must be\n   the same in each case)\n\nThis patch also adds a missing restriction on applying typeof to\na bit-field, which GCC has historically rejected in C (due to\nlack of clarity as to whether the operand should be promoted).\nThe same restriction also applies to __auto_type in C (in both\nGCC and Clang).\n\nThis also fixes PR25449.\n\nPatch by Nicholas Allegra!\n\nllvm-svn: 252690"},
		[j]={{yb,4791,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  if (!getLangOpts().CPlusPlus && InitList) {\n    Diag(Init->getBeginLoc(), diag::err_auto_init_list_from_c);"}}
	},
	["err_auto_missing_trailing_return"]={
		[c]="err_auto_missing_trailing_return",
		[d]="\'auto\' return without trailing return type; deduced return types are a C++14 extension",
		[f]="\'auto\' return without trailing return type; deduced return types are a C++14 extension",
		[b]=k,
		[g]="\'auto\' return without trailing return type; deduced return types are a C\\+\\+14 extension",
		[h]=a,
		[i]=m,
		[e]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,","Implement the C++0x \"trailing return type\" feature, e.g.,\n\n  auto f(int) -> int\n\nfrom Daniel Wallin!\n\n(With a few minor bug fixes from me).\n\nllvm-svn: 115322"},
		[j]={{u,5198,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto ? diag::err_auto_missing_trailing_return : diag::err_deduced_return_type);"}},
		[l]={
			["clang/test/ParserHLSL/group_shared_202x.hlsl"]={"clang/test/ParserHLSL/group_shared_202x.hlsl:21:1: error: \'auto\' return without trailing return type; deduced return types are a C++14 extension"}
		}
	},
	["err_auto_new_ctor_multiple_expressions"]={
		[c]="err_auto_new_ctor_multiple_expressions",
		[d]="new expression for type %0 contains multiple constructor arguments",
		[f]="new expression for type A contains multiple constructor arguments",
		[b]=k,
		[g]="new expression for type (.*?) contains multiple constructor arguments",
		[h]=a,
		[i]=m,
		[e]={rb,1298171975,sb,vb},
		[j]={{D,2056,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Inits.size() > 1) {\n      // ...\n      return ExprError(Diag(FirstBad->getBeginLoc(), diag::err_auto_new_ctor_multiple_expressions) << AllocType << TypeRange);"}},
		[l]={
			["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:6:16: error: new expression for type \'auto\' contains multiple constructor arguments"}
		}
	},
	["err_auto_new_deduction_failure"]={
		[c]="err_auto_new_deduction_failure",
		[d]="new expression for type %0 has incompatible constructor argument of type %1",
		[f]="new expression for type A has incompatible constructor argument of type B",
		[b]=k,
		[g]="new expression for type (.*?) has incompatible constructor argument of type (.*?)",
		[h]=a,
		[i]=m,
		[e]={rb,1298171975,sb,vb},
		[j]={{D,2072,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed)\n      return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure) << AllocType << Deduce->getType() << TypeRange << Deduce->getSourceRange());"}},
		[l]={
			["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:14:9: error: new expression for type \'auto *\' has incompatible constructor argument of type \'void\'"}
		}
	},
	["err_auto_new_requires_ctor_arg"]={
		[c]="err_auto_new_requires_ctor_arg",
		[d]="new expression for type %0 requires a constructor argument",
		[f]="new expression for type A requires a constructor argument",
		[b]=k,
		[g]="new expression for type (.*?) requires a constructor argument",
		[h]=a,
		[i]=m,
		[e]={rb,1298171975,sb,vb},
		[j]={{D,2051,"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 (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n  // ...\n  } else if (Deduced && !Deduced->isDeduced()) {\n    // ...\n    if (initStyle == CXXNewExpr::NoInit || Inits.empty())\n      return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg) << AllocType << TypeRange);"}},
		[l]={
			["clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp"]={"clang/test/CXX/expr/expr.unary/expr.new/p2-cxx14.cpp:7:3: error: new expression for type \'auto\' requires a constructor argument"}
		}
	},
	["err_auto_non_deduced_not_alone"]={
		[c]={{nil,S,"err_auto_non_deduced_not_alone"}},
		[d]={{nil,S,"%select{function with deduced return type|declaration with trailing return type}0 must be the only declaration in its group"}},
		[f]={{nil,S,{{"function with deduced return type","declaration with trailing return type"}," must be the only declaration in its group"}}},
		[b]=k,
		[g]="(?:function with deduced return type|declaration with trailing return type) must be the only declaration in its group",
		[h]=a,
		[i]={{nil,S,m}},
		[e]={"8210ed558662",1484274121,"Implement DR1265 (wg21.link/cwg1265).","Implement DR1265 (wg21.link/cwg1265).\n\nDiasllow a declaration using the \'auto\' type specifier from using two different\nmeanings of it at once, or from declaring multiple functions with deduced\nreturn types or introducing multiple trailing return types.\n\nThe standard does not technically disallow the multiple trailing return types\ncase if all the declarators declare variables (such as function pointers with\ntrailing return types), but we disallow that too, following the clear intent.\n\nllvm-svn: 291880"},
		[j]={{r,14580,"Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, ArrayRef<Decl *> Group) {\n  // ...\n  for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n    if (Decl *D = Group[i]) {\n      // ...\n      // For declarators, there are some additional syntactic-ish checks we need\n      // to perform.\n      if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {\n        // ...\n        if (FirstDeclaratorInGroup != DD) {\n          // ...\n          // A declarator that uses \'auto\' in any way other than to declare a\n          // variable with a deduced type cannot be combined with any other\n          // declarator in the same group.\n          if (FirstNonDeducedAutoInGroup && !DiagnosedNonDeducedAuto) {\n            Diag(FirstNonDeducedAutoInGroup->getLocation(), diag::err_auto_non_deduced_not_alone) << FirstNonDeducedAutoInGroup->getType()->hasAutoForTrailingReturnType() << FirstDeclaratorInGroup->getSourceRange() << DD->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:25:10: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:28:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:30:8: error: declaration with trailing return type must be the only declaration in its group","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7.cpp:41:15: error: declaration with trailing return type must be the only declaration in its group"}
		}
	},
	["err_auto_not_allowed"]={
		[c]="err_auto_not_allowed",
		[d]="%select{\'auto\'|\'decltype(auto)\'|\'__auto_type\'}0 not allowed %select{in function prototype|in non-static struct member|in struct member|in non-static union member|in union member|in non-static class member|in interface member|in exception declaration|in template parameter|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by \'new\'|in K&R-style function parameter}1%select{|||||||| until C++1z||||||||||}1",
		[f]={{nil,p,{{qb,xb,ub,{"use of ",{"class template","function template","variable template","alias template","template template parameter","concept","template"}," D requires template arguments; argument deduction"}}," not allowed ",{"in function prototype","in non-static struct member","in struct member","in non-static union member","in union member","in non-static class member","in interface member","in exception declaration","in template parameter until C++17","in block literal","in template argument","in typedef","in type alias","in function return type","in conversion function type","here","in lambda parameter","in type allocated by \'new\'","in K&R-style function parameter","in template parameter","in friend declaration","in function prototype that is not a function declaration","in requires expression parameter"}}},{n,n,{{qb,xb,ub,{"use of ",{"class template","function template","variable template","alias template","template template parameter","concept","template"}," D requires template arguments; argument deduction"}}," not allowed ",{"in function prototype","in non-static struct member","in struct member","in non-static union member","in union member","in non-static class member","in interface member","in exception declaration","in template parameter until C++17","in block literal","in template argument","in typedef","in type alias","in function return type","in conversion function type","here","in lambda parameter","in type allocated by \'new\'","in K&R-style function parameter","in template parameter","in friend declaration"}}},{B,S,{{qb,xb,ub,{"use of ",{"class template","function template","variable template","alias template","template template parameter","template"}," D requires template arguments; argument deduction"}}," not allowed ",{"in function prototype","in non-static struct member","in struct member","in non-static union member","in union member","in non-static class member","in interface member","in exception declaration","in template parameter until C++17","in block literal","in template argument","in typedef","in type alias","in function return type","in conversion function type","here","in lambda parameter","in type allocated by \'new\'","in K&R-style function parameter","in template parameter","in friend declaration"}}},{nil,nil,{{qb,xb,ub}," not allowed ",{"in function prototype","in non-static struct member","in struct member","in non-static union member","in union member","in non-static class member","in interface member","in exception declaration","in template parameter","in block literal","in template argument","in typedef","in type alias","in function return type","in conversion function type","here","in lambda parameter","in type allocated by \'new\'","in K&R-style function parameter"},{a,a,a,a,a,a,a,a," until C++1z",a,a,a,a,a,a,a,a,a,a}}}},
		[b]=k,
		[g]="(?:\'auto\'|\'decltype\\(auto\\)\'|\'__auto_type\'|use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments; argument deduction) not allowed (?:in function prototype|in non\\-static struct member|in struct member|in non\\-static union member|in union member|in non\\-static class member|in interface member|in exception declaration|in template parameter until C\\+\\+17|in block literal|in template argument|in typedef|in type alias|in function return type|in conversion function type|here|in lambda parameter|in type allocated by \'new\'|in K&R\\-style function parameter|in template parameter|in friend declaration|in function prototype that is not a function declaration|in requires expression parameter)",
		[h]=a,
		[i]=m,
		[e]={"94ff77a356a7",1246054739,"More auto work.","More auto work.\n\nllvm-svn: 74339"},
		[j]={{u,3735,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  // C++11 [dcl.spec.auto]p5: reject \'auto\' if it is not in an allowed context.\n  if (Deduced) {\n    // ...\n    if (Error != -1) {\n      // ...\n      SemaRef.Diag(AutoRange.getBegin(), diag::err_auto_not_allowed) << Kind << Error << (int)SemaRef.getTemplateNameKindForDiagnostics(TN) << QualType(Deduced, 0) << AutoRange;"}},
		[l]={
			["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:12:12: error: \'__auto_type\' not allowed in struct member","clang/test/Sema/auto-type.c:16:1: error: \'__auto_type\' not allowed in function return type","clang/test/Sema/auto-type.c:25:1: error: \'__auto_type\' not allowed in K&R-style function parameter","clang/test/Sema/auto-type.c:39:11: error: \'__auto_type\' not allowed here"}
		}
	},
	["err_auto_not_allowed_var_inst"]={
		[c]="err_auto_not_allowed_var_inst",
		[d]="\'auto\' variable template instantiation is not allowed",
		[f]="\'auto\' variable template instantiation is not allowed",
		[b]=k,
		[g]="\'auto\' variable template instantiation is not allowed",
		[h]=a,
		[i]=m,
		[e]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...\n\nllvm-svn: 187762"},
		[j]={{oc,10482,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  if (!R->isFunctionType()) {\n    // ...\n    if (!PrevTemplate) {\n    // ...\n    } else {\n      // ...\n      // C++1y [dcl.spec.auto]p6:\n      //   ... A program that uses auto or decltype(auto) in a context not\n      //   explicitly allowed in this section is ill-formed.\n      //\n      // This includes auto-typed variable template instantiations.\n      if (R->isUndeducedType()) {\n        Diag(T->getTypeLoc().getBeginLoc(), diag::err_auto_not_allowed_var_inst);"}},
		[l]={
			["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:161:14: error: \'auto\' variable template instantiation is not allowed"}
		}
	},
	["err_auto_var_deduction_failure"]={
		[c]="err_auto_var_deduction_failure",
		[d]="variable %0 with type %1 has incompatible initializer of type %2",
		[f]="variable A with type B has incompatible initializer of type C",
		[b]=k,
		[g]="variable (.*?) with type (.*?) has incompatible initializer of type (.*?)",
		[h]=a,
		[i]=m,
		[e]={rb,1298171975,sb,vb},
		[j]={{yb,4977,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n  // ...\n  else\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure : diag::err_auto_var_deduction_failure) << VDecl->getDeclName() << VDecl->getType() << Init->getType() << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:6:9: error: variable \'c\' with type \'auto *\' has incompatible initializer of type \'void\'","clang/test/SemaCXX/auto-subst-failure.cpp:10:9: error: variable \'g\' with type \'auto *\' has incompatible initializer of type \'void\'"}
		}
	},
	["err_auto_var_deduction_failure_from_init_list"]={
		[c]="err_auto_var_deduction_failure_from_init_list",
		[d]="cannot deduce actual type for variable %0 with type %1 from initializer list",
		[f]="cannot deduce actual type for variable A with type B from initializer list",
		[b]=k,
		[g]="cannot deduce actual type for variable (.*?) with type (.*?) from initializer list",
		[h]=a,
		[i]=m,
		[e]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no...","Auto deduction support for std::initializer_list, including for-range support. This means you can now write:\n\nfor (int i : {1, 4, 512, 23, 251}) {}\n\nllvm-svn: 148353"},
		[j]={{yb,4972,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n  if (isa<InitListExpr>(Init))\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure_from_init_list : diag::err_auto_var_deduction_failure_from_init_list) << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:352:12: error: cannot deduce actual type for variable \'x\' with type \'auto no_conversion_after_auto_list_deduction::X::*\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:355:10: error: cannot deduce actual type for variable \'y\' with type \'auto (*)()\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:359:18: error: cannot deduce actual type for variable \'a\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:360:18: error: cannot deduce actual type for variable \'b\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:361:18: error: cannot deduce actual type for variable \'c\' with type \'const auto\' from initializer list","clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:362:18: error: cannot deduce actual type for variable \'d\' with type \'const auto\' from initializer list"}
		}
	},
	["err_auto_var_init_multiple_expressions"]={
		[c]="err_auto_var_init_multiple_expressions",
		[d]="initializer for variable %0 with type %1 contains multiple expressions",
		[f]="initializer for variable A with type B contains multiple expressions",
		[b]=k,
		[g]="initializer for variable (.*?) with type (.*?) contains multiple expressions",
		[h]=a,
		[i]=m,
		[e]={rb,1298171975,sb,vb},
		[j]={{r,12740,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DeduceInits.size() > 1) {\n    Diag(DeduceInits[1]->getBeginLoc(), IsInitCapture ? diag::err_init_capture_multiple_expressions : diag::err_auto_var_init_multiple_expressions) << VN << Type << Range;"}},
		[l]={
			["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:10: error: initializer for variable \'x\' with type \'auto\' contains multiple expressions"}
		}
	},
	["err_auto_var_init_no_expression"]={
		[c]="err_auto_var_init_no_expression",
		[d]="initializer for variable %0 with type %1 is empty",
		[f]="initializer for variable A with type B is empty",
		[b]=k,
		[g]="initializer for variable (.*?) with type (.*?) is empty",
		[h]=a,
		[i]=m,
		[e]={"de30e523b40d",1325802848,"Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initi...","Tweak the fix to PR8977: an empty expression-list represents value initialization, not default initialization.  Fixes PR11712.\n\nllvm-svn: 147620"},
		[j]={{r,12732,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  // Deduction only works if we have exactly one source expression.\n  if (DeduceInits.empty()) {\n    // ...\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_no_expression : diag::err_auto_var_init_no_expression) << VN << Type << Range;"}},
		[l]={
			["clang/test/SemaCXX/dependent-auto.cpp"]={"clang/test/SemaCXX/dependent-auto.cpp:11:9: error: initializer for variable \'x\' with type \'auto\' is empty"}
		}
	},
	["err_auto_var_init_paren_braces"]={
		[c]="err_auto_var_init_paren_braces",
		[d]="cannot deduce type for variable %1 with type %2 from %select{parenthesized|nested}0 initializer list",
		[f]={{nil,nil,{"cannot deduce type for variable B with type C from ",{"parenthesized","nested"}," initializer list"}}},
		[b]=k,
		[g]="cannot deduce type for variable (.*?) with type (.*?) from (?:parenthesized|nested) initializer list",
		[h]=a,
		[i]=m,
		[e]={"66204ecff985",1394646165,"DR1346: a parenthesized braced-init-list cannot be used as the initializer when","DR1346: a parenthesized braced-init-list cannot be used as the initializer when\nperforming auto type deduction.\n\nllvm-svn: 203683"},
		[j]={{r,12749,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DirectInit && isa<InitListExpr>(DeduceInit)) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_paren_braces : diag::err_auto_var_init_paren_braces) << isa<InitListExpr>(Init) << VN << Type << Range;"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:217:10: error: cannot deduce type for variable \'x\' with type \'auto\' from nested initializer list"}
		}
	},
	["err_auto_var_requires_init"]={
		[c]="err_auto_var_requires_init",
		[d]="declaration of variable %0 with type %1 requires an initializer",
		[f]="declaration of variable A with type B requires an initializer",
		[b]=k,
		[g]="declaration of variable (.*?) with deduced type (.*?) requires an initializer",
		[h]=a,
		[i]=m,
		[e]={"ae01993a12d6",1247272479,"Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Als...","Implement more of C++0x \'auto\'. A variable with an auto type specifier must have an initializer. Also, move some tests around to match the C++0x draft better.\n\nllvm-svn: 75322"},
		[j]={{r,12696,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  // C++11 [dcl.spec.auto]p3\n  if (!Init) {\n    // ...\n    // Except for class argument deduction, and then for an initializing\n    // declaration only, i.e. no static at class scope or extern.\n    if (!isa<DeducedTemplateSpecializationType>(Deduced) || VDecl->hasExternalStorage() || VDecl->isStaticDataMember()) {\n      Diag(VDecl->getLocation(), diag::err_auto_var_requires_init) << VDecl->getDeclName() << Type;"}},
		[l]={
			["clang/test/SemaCXX/crash-auto-36064.cpp"]={"clang/test/SemaCXX/crash-auto-36064.cpp:5:15: error: declaration of variable \'c\' with deduced type \'auto\' requires an initializer"}
		}
	},
	["err_auto_variable_cannot_appear_in_own_initializer"]={
		[c]="err_auto_variable_cannot_appear_in_own_initializer",
		[d]="variable %0 declared with %select{\'auto\'|\'decltype(auto)\'|\'__auto_type\'}1 type cannot appear in its own initializer",
		[f]={{nil,S,"variable A declared with deduced type B cannot appear in its own initializer"},{nil,nil,{"variable A declared with ",{qb,xb,ub}," type cannot appear in its own initializer"}}},
		[b]=k,
		[g]="variable (.*?) declared with deduced type (.*?) cannot appear in its own initializer",
		[h]=a,
		[i]=m,
		[e]={"364035d1a821",1246043767,"An auto variable can\'t appear in its own initializer.","An auto variable can\'t appear in its own initializer.\n\nllvm-svn: 74312"},
		[j]={{F,260,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n    // ...\n    } else {\n      Diag(Loc, diag::err_auto_variable_cannot_appear_in_own_initializer) << D->getDeclName() << cast<VarDecl>(D)->getType();"}},
		[l]={
			["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:10:17: error: variable \'e\' declared with deduced type \'__auto_type\' cannot appear in its own initializer"}
		}
	},
	["err_avail_query_expected_platform_name"]={
		[c]="err_avail_query_expected_platform_name",
		[d]="expected a platform name here",
		[f]="expected a platform name here",
		[b]=k,
		[g]="expected a platform name here",
		[h]=a,
		[i]=M,
		[e]={nc,1468629323,mc,fc},
		[j]={{lc,3773,"/// Parse availability query specification.\n///\n///  availability-spec:\n///     \'*\'\n///     identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  // ...\n  } else {\n    // ...\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_avail_query_expected_platform_name);"}},
		[l]={
			["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:18:20: error: expected a platform name here","clang/test/Parser/objc-available.m:19:32: error: expected a platform name here"}
		}
	},
	["err_avail_query_unrecognized_platform_name"]={
		[c]="err_avail_query_unrecognized_platform_name",
		[d]="unrecognized platform name %0",
		[f]="unrecognized platform name A",
		[b]=k,
		[g]="unrecognized platform name (.*?)",
		[h]=a,
		[i]=M,
		[e]={nc,1468629323,mc,fc},
		[j]={{lc,3790,"/// Parse availability query specification.\n///\n///  availability-spec:\n///     \'*\'\n///     identifier version-tuple\nstd::optional<AvailabilitySpec> Parser::ParseAvailabilitySpec() {\n  if (Tok.is(tok::star)) {\n  // ...\n  } else {\n    // ...\n    if (AvailabilityAttr::getPrettyPlatformName(Platform).empty()) {\n      Diag(PlatformIdentifier->Loc, diag::err_avail_query_unrecognized_platform_name) << GivenPlatform;"}},
		[l]={
			["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:14:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:20: error: unrecognized platform name erik_os","clang/test/Parser/objc-available.m:16:35: error: unrecognized platform name hat_os"}
		}
	},
	["err_availability_expected_change"]={
		[c]="err_availability_expected_change",
		[d]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
		[f]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
		[b]=k,
		[g]="expected \'introduced\', \'deprecated\', or \'obsoleted\'",
		[h]=a,
		[i]=M,
		[e]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
		[j]={{L,1187,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_availability_expected_change);"}}
	},
	["err_availability_expected_platform"]={
		[c]="err_availability_expected_platform",
		[d]="expected a platform name, e.g., \'macos\'",
		[f]="expected a platform name, e.g., \'macos\'",
		[b]=k,
		[g]="expected a platform name, e\\.g\\., \'macos\'",
		[h]=a,
		[i]=M,
		[e]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
		[j]={{L,1146,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  // Parse the platform name.\n  if (Tok.isNot(tok::identifier)) {\n    Diag(Tok, diag::err_availability_expected_platform);"}}
	},
	["err_availability_query_repeated_platform"]={
		[c]="err_availability_query_repeated_platform",
		[d]="version for \'%0\' already specified",
		[f]="version for \'A\' already specified",
		[b]=k,
		[g]="version for \'(.*?)\' already specified",
		[h]=a,
		[i]=M,
		[e]={nc,1468629323,mc,fc},
		[j]={{lc,3741,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  for (const auto &Spec : AvailSpecs) {\n    // ...\n    if (!Inserted) {\n      // ...\n      P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_platform) << Spec.getEndLoc() << Platform;"}},
		[l]={
			["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:12:33: error: version for \'macos\' already specified"}
		}
	},
	["err_availability_query_repeated_star"]={
		[c]="err_availability_query_repeated_star",
		[d]="\'*\' query has already been specified",
		[f]="\'*\' query has already been specified",
		[b]=k,
		[g]="\'\\*\' query has already been specified",
		[h]=a,
		[i]=M,
		[e]={nc,1468629323,mc,fc},
		[j]={{lc,3727,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  for (const auto &Spec : AvailSpecs) {\n    if (Spec.isOtherPlatformSpec()) {\n      if (HasOtherPlatformSpec) {\n        P.Diag(Spec.getBeginLoc(), diag::err_availability_query_repeated_star);"}}
	},
	["err_availability_query_wildcard_required"]={
		[c]="err_availability_query_wildcard_required",
		[d]="must handle potential future platforms with \'*\'",
		[f]="must handle potential future platforms with \'*\'",
		[b]=k,
		[g]="must handle potential future platforms with \'\\*\'",
		[h]=a,
		[i]=M,
		[e]={nc,1468629323,mc,fc},
		[j]={{lc,3749,"/// Validate availability spec list, emitting diagnostics if necessary. Returns\n/// true if invalid.\nstatic bool CheckAvailabilitySpecList(Parser &P, ArrayRef<AvailabilitySpec> AvailSpecs) {\n  // ...\n  if (!HasOtherPlatformSpec) {\n    // ...\n    P.Diag(InsertWildcardLoc, diag::err_availability_query_wildcard_required) << FixItHint::CreateInsertion(InsertWildcardLoc, \", *\");"}},
		[l]={
			["clang/test/Parser/objc-available.m"]={"clang/test/Parser/objc-available.m:11:31: error: must handle potential future platforms with \'*\'"}
		}
	},
	["err_availability_redundant"]={
		[c]="err_availability_redundant",
		[d]="redundant %0 availability change; only the last specified change will be used",
		[f]="redundant A availability change; only the last specified change will be used",
		[b]=k,
		[g]="redundant (.*?) availability change; only the last specified change will be used",
		[h]=a,
		[i]=M,
		[e]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
		[j]={{L,1196,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_strict) {\n      if (StrictLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(StrictLoc);"},{L,1205,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_unavailable) {\n      if (UnavailableLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(UnavailableLoc);"},{L,1216,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Keyword == Ident_deprecated && Platform->Ident && Platform->Ident->isStr(\"swift\")) {\n      // For swift, we deprecate for all versions.\n      if (Changes[Deprecated].KeywordLoc.isValid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Deprecated].KeywordLoc);"},{L,1294,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Index < Unknown) {\n      if (!Changes[Index].KeywordLoc.isInvalid()) {\n        Diag(KeywordLoc, diag::err_availability_redundant) << Keyword << SourceRange(Changes[Index].KeywordLoc, Changes[Index].VersionRange.getEnd());"}},
		[l]={
			["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:13:94: error: redundant \'introduced\' availability change; only the last specified change will be used","clang/test/Parser/attr-availability.c:17:98: error: redundant \'unavailable\' availability change; only the last specified change will be used"}
		}
	},
	["err_availability_unknown_change"]={
		[c]="err_availability_unknown_change",
		[d]="%0 is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
		[f]="A is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
		[b]=k,
		[g]="(.*?) is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'",
		[h]=a,
		[i]=M,
		[e]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify\nwhich versions of an OS provide a certain facility. For example,\n\n  void foo()\n  __attribute__((availability(macosx,introduced=10.2,deprecated=10.4,obsoleted=10.6)));\n\nsays that the function \"foo\" was introduced in 10.2, deprecated in\n10.4, and completely obsoleted in 10.6. This attribute ties in with\nthe deployment targets (e.g., -mmacosx-version-min=10.1 specifies that\nwe want to deploy back to Mac OS X 10.1). There are several concrete\nbehaviors that this attribute enables, as illustrated with the\nfunction foo() above:\n\n  - If we choose a deployment target >= Mac OS X 10.4, uses of \"foo\"\n    will result in a deprecation warning, as if we had placed\n    attribute((deprecated)) on it (but with a better diagnostic)\n  - If we choose a deployment target >= Mac OS X 10.6, uses of \"foo\"\n    will result in an \"unavailable\" warning (in C)/error (in C++), as\n    if we had placed attribute((unavailable)) on it\n  - If we choose a deployment target prior to 10.2, foo() is\n    weak-imported (if it is a kind of entity that can be weak\n    imported), as if we had placed the weak_import attribute on it.\n\nNaturally, there can be multiple availability attributes on a\ndeclaration, for different platforms; only the current platform\nmatters when checking availability attributes.\n\nThe only platforms this attribute currently works for are \"ios\" and\n\"macosx\", since we already have -mxxxx-version-min flags for them and we\nhave experience there with macro tricks translating down to the\ndeprecated/unavailable/weak_import attributes. The end goal is to open\nthis up to other platforms, and even extension to other \"platforms\"\nthat are really libraries (say, through a #pragma clang\ndefine_system), but that hasn\'t yet been designed and we may want to\nshake out more issues with this narrower problem first.\n\nAddresses <rdar://problem/6690412>.\n\nAs a drive-by bug-fix, if an entity is both deprecated and\nunavailable, we only emit the \"unavailable\" diagnostic.\n\nllvm-svn: 128127"},
		[j]={{L,1304,"/// Parse the contents of the \"availability\" attribute.\n///\n/// availability-attribute:\n///   \'availability\' \'(\' platform \',\' opt-strict version-arg-list,\n///                      opt-replacement, opt-message\')\'\n///\n/// platform:\n///   identifier\n///\n/// opt-strict:\n///   \'strict\' \',\'\n///\n/// version-arg-list:\n///   version-arg\n///   version-arg \',\' version-arg-list\n///\n/// version-arg:\n///   \'introduced\' \'=\' version\n///   \'deprecated\' \'=\' version\n///   \'obsoleted\' = version\n///   \'unavailable\'\n/// opt-replacement:\n///   \'replacement\' \'=\' <string>\n/// opt-message:\n///   \'message\' \'=\' <string>\nvoid Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability, SourceLocation AvailabilityLoc, ParsedAttributes &attrs, SourceLocation *endLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  do {\n    // ...\n    if (Index < Unknown) {\n    // ...\n    } else {\n      Diag(KeywordLoc, diag::err_availability_unknown_change) << Keyword << VersionRange;"}},
		[l]={
			["clang/test/Sema/attr-availability-square-brackets.c"]={"clang/test/Sema/attr-availability-square-brackets.c:25:35: error: \'should\' is not an availability stage; use \'introduced\', \'deprecated\', or \'obsoleted\'"}
		}
	},
	["err_avx_calling_convention"]={
		[c]={{nil,o,"err_avx_calling_convention"}},
		[d]={{nil,o,"AVX vector %select{return|argument}0 of type %1 without \'%2\' enabled changes the ABI"}},
		[f]={{nil,o,{"AVX vector ",{"return","argument"}," of type B without \'C\' enabled changes the ABI"}}},
		[b]=k,
		[g]="AVX vector (?:return|argument) of type (.*?) without \'(.*?)\' enabled changes the ABI",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={"2831a317b689",1592939649,"Implement AVX ABI Warning/error","Implement AVX ABI Warning/error\n\nThe x86-64 \"avx\" feature changes how >128 bit vector types are passed,\ninstead of being passed in separate 128 bit registers, they can be\npassed in 256 bit registers.\n\n\"avx512f\" does the same thing, except it switches from 256 bit registers\nto 512 bit registers.\n\nThe result of both of these is an ABI incompatibility between functions\ncompiled with and without these features.\n\nThis patch implements a warning/error pair upon an attempt to call a\nfunction that would run afoul of this. First, if a function is called\nthat would have its ABI changed, we issue a warning.\n\nSecond, if said call is made in a situation where the caller and callee\nare known to have different calling conventions (such as the case of\n\'target\'), we instead issue an error.\n\nDifferential Revision: https://reviews.llvm.org/D82562"},
		[j]={{"clang/lib/CodeGen/Targets/X86.cpp",1504,"static bool checkAVXParamFeature(DiagnosticsEngine &Diag, SourceLocation CallLoc, const llvm::StringMap<bool> &CallerMap, const llvm::StringMap<bool> &CalleeMap, QualType Ty, StringRef Feature, bool IsArgument) {\n  // ...\n  // Mixing calling conventions here is very clearly an error.\n  if (!CallerHasFeat || !CalleeHasFeat)\n    return Diag.Report(CallLoc, diag::err_avx_calling_convention) << IsArgument << Ty << Feature;"}},
		[l]={
			["clang/test/CodeGen/target-avx-abi-diag.c"]={"clang/test/CodeGen/target-avx-abi-diag.c:36:3: error: AVX vector argument of type \'avx512fType\' (vector of 32 \'short\' values) without \'avx512f\' enabled changes the ABI","clang/test/CodeGen/target-avx-abi-diag.c:39:3: error: AVX vector argument of type \'avx512fType\' (vector of 32 \'short\' values) without \'avx512f\' enabled changes the ABI"}
		}
	},
	["err_await_suspend_invalid_return_type"]={
		[c]={{nil,S,"err_await_suspend_invalid_return_type"}},
		[d]={{nil,S,"return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have %0)"}},
		[f]={{nil,S,"return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have A)"}},
		[b]=k,
		[g]="return type of \'await_suspend\' is required to be \'void\' or \'bool\' \\(have (.*?)\\)",
		[h]=a,
		[i]={{nil,S,"Coroutines Issue"}},
		[e]={"d978e53c6d70",1495995672,"[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing c...","[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing conversions.\n\nSummary:\nThe expression `await_ready` is required to be contextually convertible to bool and `await_suspend` must be a prvalue of either `void` or `bool`.\nThis patch adds diagnostics for when those requirements are violated.\n\nIt also correctly performs the contextual conversion to bool on the result of `await_ready`\n\n\n\nReviewers: GorNishanov, rsmith\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D33625\n\nllvm-svn: 304094"},
		[j]={{"clang/lib/Sema/SemaCoroutine.cpp",448,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  // ...\n  if (!AwaitSuspend->getType()->isDependentType()) {\n    // ...\n    // Support for coroutine_handle returning await_suspend.\n    if (Expr *TailCallSuspend = maybeTailCall(S, RetType, AwaitSuspend, Loc))\n    // ...\n    else {\n      // non-class prvalues always have cv-unqualified types\n      if (RetType->isReferenceType() || (!RetType->isBooleanType() && !RetType->isVoidType())) {\n        S.Diag(AwaitSuspend->getCalleeDecl()->getLocation(), diag::err_await_suspend_invalid_return_type) << RetType;"}},
		[l]={
			["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1011:8: error: return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have \'char\')","clang/test/SemaCXX/coroutines.cpp:1033:13: error: return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have \'bool &&\')","clang/test/SemaCXX/coroutines.cpp:1033:13: error: return type of \'await_suspend\' is required to be \'void\' or \'bool\' (have \'bool &\')"}
		}
	},
	["err_bad_cast_incomplete"]={
		[c]={{nil,p,"err_bad_cast_incomplete"}},
		[d]={{nil,p,"%0 is an incomplete type"}},
		[f]={{nil,p,"A is an incomplete type"}},
		[b]=k,
		[g]="(.*?) is an incomplete type",
		[h]=a,
		[i]={{nil,p,m}},
		[e]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
		[j]={{s,816,"/// 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  if (DestPointee->isVoidType()) {\n  // ...\n  } else if (DestRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee, diag::err_bad_cast_incomplete, DestRange)) {"},{s,861,"/// 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  if (SrcRecord) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee, diag::err_bad_cast_incomplete, SrcExpr.get())) {"},{s,1400,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // Reverse integral promotion/conversion. All such conversions are themselves\n  // again integral promotions or conversions and are thus already handled by\n  // p2 (TryDirectInitialization above).\n  // (Note: any data loss warnings should be suppressed.)\n  // The exception is the reverse of enum->integer, i.e. integer->enum (and\n  // enum->enum). See also C++ 5.2.9p7.\n  // The same goes for reverse floating point promotion/conversion and\n  // floating-integral conversions. Again, only floating->enum is relevant.\n  if (DestType->isEnumeralType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete)) {"},{s,1883,"/// TryStaticImplicitCast - Tests whether a conversion according to C++ 5.2.9p2\n/// is valid:\n///\n///   An expression e can be explicitly converted to a type T using a\n///   @c static_cast if the declaration \"T t(e);\" is well-formed [...].\nTryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, bool ListInitialization) {\n  if (DestType->isRecordType()) {\n    if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_bad_cast_incomplete) || Self.RequireNonAbstractType(OpRange.getBegin(), DestType, diag::err_allocation_of_abstract_type)) {"}},
		[l]={
			[Nb]={"clang/test/SemaCXX/dynamic-cast.cpp:37:9: error: \'Incomplete\' is an incomplete type","clang/test/SemaCXX/dynamic-cast.cpp:39:9: error: \'Incomplete\' is an incomplete type"}
		}
	},
	["err_bad_category_property_decl"]={
		[c]="err_bad_category_property_decl",
		[d]="property implementation must have its declaration in the category %0",
		[f]="property implementation must have its declaration in the category A",
		[b]=k,
		[g]="property implementation must have its declaration in the category (.*?)",
		[h]=a,
		[i]=m,
		[e]={ic,1480718311,hc,gc},
		[j]={{Mb,1194,"/// 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 (!property) {\n      Diag(PropertyLoc, diag::err_bad_category_property_decl) << Category->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:27:10: error: property implementation must have its declaration in the category \'CAT\'"}
		}
	},
	["err_bad_character_encoding"]={
		[c]="err_bad_character_encoding",
		[d]="illegal character encoding in character literal",
		[f]="illegal character encoding in character literal",
		[b]=k,
		[g]="illegal character encoding in character literal",
		[h]=a,
		[i]=Ab,
		[e]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals","Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows UCNs in character\nand string literals that represent control characters and basic\nsource characters. Also C++03 allows UCNs that refer to surrogate\ncodepoints.\n\nUTF-8 sequences in character literals are now handled as single\nc-chars.\n\nAdded error for multiple characters in Unicode character literals.\n\nAdded errors for when a the execution charset encoding of a c-char\ncannot be represented as a single code unit in the associated\ncharacter type. Note that for the purposes of this error the asso-\nciated character type for a narrow character literal is char, not\nint, even though in C narrow character literals have type int.\n\nllvm-svn: 148389"},
		[j]={{"clang/lib/Lex/LiteralSupport.cpp",1745,"/// \\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  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      // ...\n      if (res != llvm::conversionOK) {\n        // ...\n        unsigned Msg = diag::err_bad_character_encoding;"}},
		[l]={
			["clang/test/Lexer/char-literal-encoding-error.c"]={"clang/test/Lexer/char-literal-encoding-error.c:7:9: error: illegal character encoding in character literal","clang/test/Lexer/char-literal-encoding-error.c:8:9: error: illegal character encoding in character literal","clang/test/Lexer/char-literal-encoding-error.c:9:9: error: illegal character encoding in character literal"}
		}
	},
	["err_bad_const_cast_dest"]={
		[c]="err_bad_const_cast_dest",
		[d]={{nil,o,"%select{const_cast||||C-style cast|functional-style cast|}0 to %2, which is not a reference, pointer-to-object, or pointer-to-data-member"},{p,nil,"%select{const_cast||||C-style cast|functional-style cast}0 to %2, which is not a reference, pointer-to-object, or pointer-to-data-member"}},
		[f]={{nil,o,{{W,a,a,a,J,X,a}," to C, which is not a reference, pointer-to-object, or pointer-to-data-member"}},{p,nil,{{W,a,a,a,J,X}," to C, which is not a reference, pointer-to-object, or pointer-to-data-member"}}},
		[b]=k,
		[g]="(?:const_cast||||C\\-style cast|functional\\-style cast|) to (.*?), which is not a reference, pointer\\-to\\-object, or pointer\\-to\\-data\\-member",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,1998,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (!DestType->isPointerType() && !DestType->isMemberPointerType() && !DestType->isObjCObjectPointerType()) {\n    // Cannot cast to non-pointer, non-reference type. Note that, if DestType\n    // was a reference type, we converted it to a pointer above.\n    // The status of rvalue references isn\'t entirely clear, but it looks like\n    // conversion to them is simply invalid.\n    // C++ 5.2.11p3: For two pointer types [...]\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"},{s,2007,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (DestType->isFunctionPointerType() || DestType->isMemberFunctionPointerType()) {\n    // Cannot cast direct function pointers.\n    // C++ 5.2.11p2: [...] where T is any object type or the void type [...]\n    // T is the ultimate pointee of source and target type.\n    if (!CStyle)\n      msg = diag::err_bad_const_cast_dest;"}},
		[l]={
			["clang/test/SemaCXX/const-cast.cpp"]={"clang/test/SemaCXX/const-cast.cpp:59:12: error: const_cast to \'char\', which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:71:11: error: const_cast to \'f\' (aka \'int (*)(int)\'), which is not a reference, pointer-to-object, or pointer-to-data-member","clang/test/SemaCXX/const-cast.cpp:73:9: error: const_cast to \'void (A::*)()\', which is not a reference, pointer-to-object, or pointer-to-data-member"}
		}
	},
	["err_bad_cstyle_cast_overload"]={
		[c]="err_bad_cstyle_cast_overload",
		[d]="address of overloaded function %0 cannot be cast to type %1",
		[f]="address of overloaded function A cannot be cast to type B",
		[b]=k,
		[g]="address of overloaded function (.*?) cannot be cast to type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"b491ed36b4ef",1298151169,"Handle the resolution of a reference to a function template (which","Handle the resolution of a reference to a function template (which\nincludes explicitly-specified template arguments) to a function\ntemplate specialization in cases where no deduction is performed or\ndeduction fails. Patch by Faisal Vali, fixes PR7505!\n\nllvm-svn: 126048"},
		[j]={{s,2738,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  if (DestType->isVoidType()) {\n    // ...\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr, /* Decay Function to ptr */ false,\n                                                             /* Complain */ true, DestRange, DestType, diag::err_bad_cstyle_cast_overload);"},{s,2848,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      if (Fn) {\n        // ...\n        Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload) << OE->getName() << DestType << OpRange << OE->getQualifierLoc().getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:68:16: error: address of overloaded function \'f\' cannot be cast to type \'FnType\' (aka \'void (int)\')"}
		}
	},
	["err_bad_cxx_cast_addr_space_mismatch"]={
		[c]={{nil,n,"err_bad_cxx_cast_addr_space_mismatch"}},
		[d]={{nil,o,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from %1 to %2 converts between mismatching address spaces"},{p,n,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 converts between mismatching address spaces"}},
		[f]={{nil,o,{{W,ab,K,Y,J,X,"addrspace_cast"}," from B to C converts between mismatching address spaces"}},{p,n,{{W,ab,K,Y,J,X}," from B to C converts between mismatching address spaces"}}},
		[b]=k,
		[g]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from (.*?) to (.*?) converts between mismatching address spaces",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"6f7c536e083b",1551978390,"[Sema] Change addr space diagnostics in casts to follow C++ style.","[Sema] Change addr space diagnostics in casts to follow C++ style.\n\nThis change adds a new diagnostic for mismatching address spaces\nto be used for C++ casts (only enabled in C style cast for now,\nthe rest will follow!).\n\nThe change extends C-style cast rules to account for address spaces.\nIt also adds a separate function for address space cast checking that\ncan be used to map from a separate address space cast operator\naddrspace_cast (to be added as a follow up patch).\n\nNote, that after this change clang will no longer allows arbitrary\naddress space conversions in reinterpret_casts because they can lead\nto accidental errors. The implicit safe conversions would still be\nallowed.\n\nDifferential Revision: https://reviews.llvm.org/D58346\n\nllvm-svn: 355609"},
		[j]={{s,2622,"static TryCastResult TryAddressSpaceCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (!DestPointeeType.isAddressSpaceOverlapping(SrcPointeeType)) {\n    msg = diag::err_bad_cxx_cast_addr_space_mismatch;"}},
		[l]={
			["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:11:20: error: addrspace_cast from \'__global int *__private\' to \'__local int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:23:13: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:24:23: error: addrspace_cast from \'__global int *__private\' to \'__private int *\' converts between mismatching address spaces"}
		}
	},
	["err_bad_cxx_cast_bitfield"]={
		[c]="err_bad_cxx_cast_bitfield",
		[d]={{nil,o,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from bit-field lvalue to reference type %2"},{p,nil,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from bit-field lvalue to reference type %2"}},
		[f]={{nil,o,{{W,ab,K,Y,J,X,a}," from bit-field lvalue to reference type C"}},{p,nil,{{W,ab,K,Y,J,X}," from bit-field lvalue to reference type C"}}},
		[b]=k,
		[g]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from bit\\-field lvalue to reference type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"d25db7ed0f8e",1367876352,"Grab-bag of bit-field fixes:","Grab-bag of bit-field fixes:\n\n  - References to ObjC bit-field ivars are bit-field lvalues;\n    fixes rdar://13794269, which got me started down this.\n  - Introduce Expr::refersToBitField, switch a couple users to\n    it where semantically important, and comment the difference\n    between this and the existing API.\n  - Discourage Expr::getBitField by making it a bit longer and\n    less general-sounding.\n  - Lock down on const_casts of bit-field gl-values until we\n    hear back from the committee as to whether they\'re allowed.\n\nllvm-svn: 181252"},
		[j]={{s,1978,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    // It\'s not completely clear under the standard whether we can\n    // const_cast bit-field gl-values.  Doing so would not be\n    // intrinsically complicated, but for now, we say no for\n    // consistency with other compilers and await the word of the\n    // committee.\n    if (SrcExpr.get()->refersToBitField()) {\n      msg = diag::err_bad_cxx_cast_bitfield;"},{s,2290,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    case OK_BitField:\n      msg = diag::err_bad_cxx_cast_bitfield;"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:53:20: error: C-style cast from bit-field lvalue to reference type \'unsigned int &\'","clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5.cpp:54:20: error: const_cast from bit-field lvalue to reference type \'unsigned int &\'"}
		}
	},
	["err_bad_cxx_cast_generic"]={
		[c]="err_bad_cxx_cast_generic",
		[d]={{nil,o,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from %1 to %2 is not allowed"},{p,nil,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 is not allowed"}},
		[f]={{nil,o,{{W,ab,K,Y,J,X,"addrspace_cast"}," from B to C is not allowed"}},{p,nil,{{W,ab,K,Y,J,X}," from B to C is not allowed"}}},
		[b]=k,
		[g]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from (.*?) to (.*?) is not allowed",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,521,"/// Diagnose a failed cast.\nstatic void diagnoseBadCast(Sema &S, unsigned msg, CastType castType, SourceRange opRange, Expr *src, QualType destType, bool listInitialization) {\n  if (msg == diag::err_bad_cxx_cast_generic && tryDiagnoseOverloadedCast(S, castType, opRange, src, destType, listInitialization))"},{s,966,"/// CheckConstCast - Check that a const_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.11 for details. const_cast is typically used in code\n/// like this:\n/// const char *str = \"literal\";\n/// legacy_function(const_cast\\<char*\\>(str));\nvoid CastOperation::CheckConstCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,977,"void CastOperation::CheckAddrspaceCast() {\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,1193,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,1265,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"},{s,2798,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n  // ...\n  unsigned msg = diag::err_bad_cxx_cast_generic;"}},
		[l]={
			["clang/test/SemaOpenCLCXX/addrspace_cast.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:5:19: error: addrspace_cast from \'__global int *__private\' to \'__generic float *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:7:11: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:9:14: error: addrspace_cast from \'__global int\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:13:15: error: addrspace_cast from \'const __global int *__private\' to \'__generic int *\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:16:18: error: addrspace_cast from \'__global int\' to \'__generic int &\' is not allowed","clang/test/SemaOpenCLCXX/addrspace_cast.clcpp:25:12: error: addrspace_cast from \'__global int *__private\' to \'int\' is not allowed"}
		}
	},
	["err_bad_cxx_cast_member_pointer_size"]={
		[c]="err_bad_cxx_cast_member_pointer_size",
		[d]={{nil,o,"cannot %select{||reinterpret_cast||C-style cast||}0 from member pointer type %1 to member pointer type %2 of different size"},{p,nil,"cannot %select{||reinterpret_cast||C-style cast|}0 from member pointer type %1 to member pointer type %2 of different size"}},
		[f]={{nil,o,{"cannot ",{a,a,K,a,J,a,a}," from member pointer type B to member pointer type C of different size"}},{p,nil,{"cannot ",{a,a,K,a,J,a}," from member pointer type B to member pointer type C of different size"}}},
		[b]=k,
		[g]="cannot (?:||reinterpret_cast||C\\-style cast||) from member pointer type (.*?) to member pointer type (.*?) of different size",
		[h]=a,
		[i]=m,
		[e]={"ebab1ed5d30c",1281936644,"Error out if reinterpret_casting between member pointers of two different","Error out if reinterpret_casting between member pointers of two different\nsizes.\n\nllvm-svn: 111119"},
		[j]={{s,2340,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestMemPtr && SrcMemPtr) {\n    // ...\n    // Don\'t allow casting between member pointers of different sizes.\n    if (Self.Context.getTypeSize(DestMemPtr) != Self.Context.getTypeSize(SrcMemPtr)) {\n      msg = diag::err_bad_cxx_cast_member_pointer_size;"}},
		[l]={
			["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:231:26: error: cannot reinterpret_cast from member pointer type \'int AA::*\' to member pointer type \'int Virtual::*\' of different size"}
		}
	},
	["err_bad_cxx_cast_qualifiers_away"]={
		[c]="err_bad_cxx_cast_qualifiers_away",
		[d]={{nil,o,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 casts away qualifiers"},{p,nil,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 casts away qualifiers"}},
		[f]={{nil,o,{{W,ab,K,Y,J,X,a}," from B to C casts away qualifiers"}},{p,nil,{{W,ab,K,Y,J,X}," from B to C casts away qualifiers"}}},
		[b]=k,
		[g]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) casts away qualifiers",
		[h]=a,
		[i]=m,
		[e]={"b472e93af799",1302890394,"Implement appropriate semantics for C++ casting and conversion when","Implement appropriate semantics for C++ casting and conversion when\ndealing with address-space- and GC-qualified pointers. Previously,\nthese qualifiers were being treated just like cvr-qualifiers (in some\ncases) or were completely ignored, leading to uneven behavior. For\nexample, const_cast would allow conversion between pointers to\ndifferent address spaces.\n\nThe new semantics are fairly simple: reinterpret_cast can be used to\nexplicitly cast between pointers to different address spaces\n(including adding/removing addresss spaces), while\nstatic_cast/dynamic_cast/const_cast do not tolerate any changes in the\naddress space. C-style casts can add/remove/change address spaces\nthrough the reinterpret_cast mechanism. Other non-CVR qualifiers\n(e.g., Objective-C GC qualifiers) work similarly.\n\nAs part of this change, I tweaked the \"casts away constness\"\ndiagnostic to use the term \"casts away qualifiers\". The term\n\"constness\" actually comes from the C++ standard, despite the fact\nthat removing \"volatile\" also falls under that category. In Clang, we\nalso have restrict, address spaces, ObjC GC attributes, etc., so the\nmore general \"qualifiers\" is clearer.\n\nllvm-svn: 129583"},
		[j]={{s,767,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n  // ...\n  case CastAwayConstnessKind::CACK_SimilarKind:\n    DiagID = diag::err_bad_cxx_cast_qualifiers_away;"},{s,881,"/// 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  // C++ 5.2.7p1: The dynamic_cast operator shall not cast away constness.\n  if (!DestPointee.isAtLeastAsQualifiedAs(SrcPointee)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_qualifiers_away) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{s,1455,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // Reverse pointer conversion to void*. C++ 4.10.p2 specifies conversion to\n  // void*. C++ 5.2.9p10 specifies additional restrictions, which really is\n  // just the usual constness stuff.\n  if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    // ...\n    if (SrcPointee->isVoidType()) {\n      if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n        // ...\n        if (DestPointee->isIncompleteOrObjectType()) {\n          // This is definitely the intended conversion, but it might fail due\n          // to a qualifier violation. Note that we permit Objective-C lifetime\n          // and GC qualifier mismatches here.\n          if (!CStyle) {\n            // ...\n            if (DestPointeeQuals != SrcPointeeQuals && !DestPointeeQuals.compatiblyIncludes(SrcPointeeQuals)) {\n              msg = diag::err_bad_cxx_cast_qualifiers_away;"},{s,1687,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  // Must preserve cv, as always, unless we\'re in C-style mode.\n  if (!CStyle && !DestType.isAtLeastAsQualifiedAs(SrcType)) {\n    msg = diag::err_bad_cxx_cast_qualifiers_away;"}},
		[l]={
			["clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp"]={"clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:8:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:10:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'float *X::*Y::**\' casts away qualifiers","clang/test/CXX/expr/expr.post/expr.reinterpret.cast/p2.cpp:12:9: error: reinterpret_cast from \'const int *X::*Y::**\' to \'int *Y::*X::**\' casts away qualifiers"}
		}
	},
	["err_bad_cxx_cast_rvalue"]={
		[c]="err_bad_cxx_cast_rvalue",
		[d]={{nil,o,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|addrspace_cast}0 from rvalue to reference type %2"},{p,nil,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from rvalue to reference type %2"}},
		[f]={{nil,o,{{W,ab,K,Y,J,X,"addrspace_cast"}," from rvalue to reference type C"}},{p,nil,{{W,ab,K,Y,J,X}," from rvalue to reference type C"}}},
		[b]=k,
		[g]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|addrspace_cast) from rvalue to reference type (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,845,"/// 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  if (DestPointer) {\n  // ...\n  } else if (DestReference->isLValueReferenceType()) {\n    if (!SrcExpr.get()->isLValue()) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_cxx_cast_rvalue) << CT_Dynamic << OrigSrcType << this->DestType << OpRange;"},{s,1595,"/// Tests whether a conversion according to C++ 5.2.9p5 is valid.\nTryCastResult TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!RValueRef && !SrcExpr->isLValue()) {\n    // ...\n    msg = diag::err_bad_cxx_cast_rvalue;"},{s,1955,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (isa<LValueReferenceType>(DestTypeTmp) && !SrcExpr.get()->isLValue()) {\n      // ...\n      msg = diag::err_bad_cxx_cast_rvalue;"},{s,1963,"/// TryConstCast - See if a const_cast from source to destination is allowed,\n/// and perform it if it is.\nstatic TryCastResult TryConstCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, unsigned &msg) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (isa<RValueReferenceType>(DestTypeTmp) && SrcExpr.get()->isPRValue()) {\n      if (!SrcType->isRecordType()) {\n        // ...\n        msg = diag::err_bad_cxx_cast_rvalue;"},{s,2272,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    if (!SrcExpr.get()->isGLValue()) {\n      // ...\n      msg = diag::err_bad_cxx_cast_rvalue;"}},
		[l]={
			[Nb]={"clang/test/SemaCXX/dynamic-cast.cpp:41:9: error: dynamic_cast from rvalue to reference type \'A &\'"}
		}
	},
	["err_bad_cxx_cast_scalar_to_vector_different_size"]={
		[c]="err_bad_cxx_cast_scalar_to_vector_different_size",
		[d]={{nil,o,"%select{||reinterpret_cast||C-style cast||}0 from scalar %1 to vector %2 of different size"},{p,nil,"%select{||reinterpret_cast||C-style cast|}0 from scalar %1 to vector %2 of different size"}},
		[f]={{nil,o,{{a,a,K,a,J,a,a}," from scalar B to vector C of different size"}},{p,nil,{{a,a,K,a,J,a}," from scalar B to vector C of different size"}}},
		[b]=k,
		[g]="(?:||reinterpret_cast||C\\-style cast||) from scalar (.*?) to vector (.*?) of different size",
		[h]=a,
		[i]=m,
		[e]={"570af5d42678",1253128783,"Improve handling of vector casts in C++.","Improve handling of vector casts in C++.\n\nllvm-svn: 82072"},
		[j]={{s,2419,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    // ...\n    else if (!srcIsVector)\n      msg = diag::err_bad_cxx_cast_scalar_to_vector_different_size;"}},
		[l]={
			["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:42:9: error: reinterpret_cast from scalar \'unsigned char\' to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
		}
	},
	["err_bad_cxx_cast_unrelated_class"]={
		[c]="err_bad_cxx_cast_unrelated_class",
		[d]={{nil,o,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2, which are not related by inheritance, is not allowed"},{p,nil,"%select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2, which are not related by inheritance, is not allowed"}},
		[f]={{nil,o,{{W,ab,K,Y,J,X,a}," from B to C, which are not related by inheritance, is not allowed"}},{p,nil,{{W,ab,K,Y,J,X}," from B to C, which are not related by inheritance, is not allowed"}}},
		[b]=k,
		[g]="(?:const_cast|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?), which are not related by inheritance, is not allowed",
		[h]=a,
		[i]=m,
		[e]={"ffa7dc379f2e",1422480686,"PR 17456","PR 17456\nMore helpful diagnostic on casts between unrelated class hierarchies.\n\nllvm-svn: 227371"},
		[j]={{s,1505,"/// TryStaticCast - Check if a static cast can be performed, and do so if\n/// possible. If @p CStyle, ignore access restrictions on hierarchy casting\n/// and casting away constness.\nstatic TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, Sema::CheckedConversionKind CCK, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath, bool ListInitialization) {\n  // ...\n  // See if it looks like the user is trying to convert between\n  // related record types, and select a better diagnostic if so.\n  if (auto SrcPointer = SrcType->getAs<PointerType>())\n    if (auto DestPointer = DestType->getAs<PointerType>())\n      if (SrcPointer->getPointeeType()->getAs<RecordType>() && DestPointer->getPointeeType()->getAs<RecordType>())\n        msg = diag::err_bad_cxx_cast_unrelated_class;"}},
		[l]={
			["clang/test/SemaCXX/address-space-conversion.cpp"]={"clang/test/SemaCXX/address-space-conversion.cpp:72:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:73:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr\' (aka \'A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:74:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:75:9: error: static_cast from \'B_ptr_2\' (aka \'__attribute__((address_space(2))) B *\') to \'A_ptr_1\' (aka \'__attribute__((address_space(1))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:76:9: error: static_cast from \'B_ptr\' (aka \'B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed","clang/test/SemaCXX/address-space-conversion.cpp:77:9: error: static_cast from \'B_ptr_1\' (aka \'__attribute__((address_space(1))) B *\') to \'A_ptr_2\' (aka \'__attribute__((address_space(2))) A *\'), which are not related by inheritance, is not allowed"}
		}
	},
	["err_bad_cxx_cast_vector_to_scalar_different_size"]={
		[c]="err_bad_cxx_cast_vector_to_scalar_different_size",
		[d]={{nil,o,"%select{||reinterpret_cast||C-style cast||}0 from vector %1 to scalar %2 of different size"},{p,nil,"%select{||reinterpret_cast||C-style cast|}0 from vector %1 to scalar %2 of different size"}},
		[f]={{nil,o,{{a,a,K,a,J,a,a}," from vector B to scalar C of different size"}},{p,nil,{{a,a,K,a,J,a}," from vector B to scalar C of different size"}}},
		[b]=k,
		[g]="(?:||reinterpret_cast||C\\-style cast||) from vector (.*?) to scalar (.*?) of different size",
		[h]=a,
		[i]=m,
		[e]={"570af5d42678",1253128783,"Improve handling of vector casts in C++.","Improve handling of vector casts in C++.\n\nllvm-svn: 82072"},
		[j]={{s,2417,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n      msg = diag::err_bad_cxx_cast_vector_to_scalar_different_size;"}},
		[l]={
			["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:40:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size","clang/test/SemaCXX/vector-casts.cpp:41:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to scalar \'unsigned char\' of different size"}
		}
	},
	["err_bad_cxx_cast_vector_to_vector_different_size"]={
		[c]="err_bad_cxx_cast_vector_to_vector_different_size",
		[d]={{nil,o,"%select{||reinterpret_cast||C-style cast||}0 from vector %1 to vector %2 of different size"},{p,nil,"%select{||reinterpret_cast||C-style cast|}0 from vector %1 to vector %2 of different size"}},
		[f]={{nil,o,{{a,a,K,a,J,a,a}," from vector B to vector C of different size"}},{p,nil,{{a,a,K,a,J,a}," from vector B to vector C of different size"}}},
		[b]=k,
		[g]="(?:||reinterpret_cast||C\\-style cast||) from vector (.*?) to vector (.*?) of different size",
		[h]=a,
		[i]=m,
		[e]={"570af5d42678",1253128783,"Improve handling of vector casts in C++.","Improve handling of vector casts in C++.\n\nllvm-svn: 82072"},
		[j]={{s,2421,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (srcIsVector || destIsVector) {\n    // ...\n    // Otherwise, pick a reasonable diagnostic.\n    if (!destIsVector)\n    // ...\n    else if (!srcIsVector)\n    // ...\n    else\n      msg = diag::err_bad_cxx_cast_vector_to_vector_different_size;"}},
		[l]={
			["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:44:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:45:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v8hi\' (vector of 8 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:46:9: error: reinterpret_cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:47:9: error: C-style cast from vector \'__v8hi\' (vector of 8 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:49:9: error: C-style cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:50:9: error: C-style cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:51:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:52:9: error: C-style cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:53:9: error: reinterpret_cast from vector \'__v4hi\' (vector of 4 \'short\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:54:9: error: reinterpret_cast from vector \'__v2si\' (vector of 2 \'int\' values) to vector \'__v3hi\' (vector of 3 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:55:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v4hi\' (vector of 4 \'short\' values) of different size","clang/test/SemaCXX/vector-casts.cpp:56:9: error: reinterpret_cast from vector \'__v3hi\' (vector of 3 \'short\' values) to vector \'__v2si\' (vector of 2 \'int\' values) of different size"}
		}
	},
	["err_bad_dynamic_cast_not_class"]={
		[c]="err_bad_dynamic_cast_not_class",
		[d]={{nil,p,"%0 is not a class type"},{n,nil,"%0 is not a class"}},
		[f]={{nil,p,"A is not a class type"},{n,nil,"A is not a class"}},
		[b]=k,
		[g]="(.*?) is not a class type",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,822,"/// 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  if (DestPointee->isVoidType()) {\n  // ...\n  } else if (DestRecord) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << DestPointee.getUnqualifiedType() << DestRange;"},{s,867,"/// 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  if (SrcRecord) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_class) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
		[l]={
			[Nb]={"clang/test/SemaCXX/dynamic-cast.cpp:29:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:31:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:33:9: error: \'int\' is not a class type","clang/test/SemaCXX/dynamic-cast.cpp:35:9: error: \'int\' is not a class type"}
		}
	},
	["err_bad_dynamic_cast_not_polymorphic"]={
		[c]="err_bad_dynamic_cast_not_polymorphic",
		[d]="%0 is not polymorphic",
		[f]="A is not polymorphic",
		[b]=k,
		[g]="(.*?) is not polymorphic",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,913,"/// 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  if (!cast<CXXRecordDecl>(SrcDecl)->isPolymorphic()) {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_polymorphic) << SrcPointee.getUnqualifiedType() << SrcExpr.get()->getSourceRange();"}},
		[l]={
			[Nb]={"clang/test/SemaCXX/dynamic-cast.cpp:74:9: error: \'A\' is not polymorphic","clang/test/SemaCXX/dynamic-cast.cpp:75:9: error: \'A\' is not polymorphic"}
		}
	},
	["err_bad_dynamic_cast_not_ptr"]={
		[c]="err_bad_dynamic_cast_not_ptr",
		[d]={{nil,p,"cannot use dynamic_cast to convert from %0 to %1"},{n,nil,"%0 is not a pointer"}},
		[f]={{nil,p,"cannot use dynamic_cast to convert from A to B"},{n,nil,"A is not a pointer"}},
		[b]=k,
		[g]="cannot use dynamic_cast to convert from (.*?) to (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,838,"/// 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  if (DestPointer) {\n    if (const PointerType *SrcPointer = SrcType->getAs<PointerType>()) {\n    // ...\n    } else {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ptr) << OrigSrcType << this->DestType << SrcExpr.get()->getSourceRange();"}},
		[l]={
			[Nb]={"clang/test/SemaCXX/dynamic-cast.cpp:27:9: error: cannot use dynamic_cast to convert from \'int\' to \'A *\'"}
		}
	},
	["err_bad_dynamic_cast_not_ref_or_ptr"]={
		[c]="err_bad_dynamic_cast_not_ref_or_ptr",
		[d]={{nil,p,"invalid target type %0 for dynamic_cast; target type must be a reference or pointer type to a defined class"},{n,nil,"%0 is not a reference or pointer"}},
		[f]={{nil,p,"invalid target type A for dynamic_cast; target type must be a reference or pointer type to a defined class"},{n,nil,"A is not a reference or pointer"}},
		[b]=k,
		[g]="invalid target type (.*?) for dynamic_cast; target type must be a reference or pointer type to a defined class",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,805,"/// 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  if (DestPointer) {\n  // ...\n  } else if ((DestReference = DestType->getAs<ReferenceType>())) {\n  // ...\n  } else {\n    Self.Diag(OpRange.getBegin(), diag::err_bad_dynamic_cast_not_ref_or_ptr) << this->DestType << DestRange;"}},
		[l]={
			[Nb]={"clang/test/SemaCXX/dynamic-cast.cpp:25:9: error: invalid target type \'A\' for dynamic_cast; target type must be a reference or pointer type to a defined class"}
		}
	},
	["err_bad_kernel_param_type"]={
		[c]="err_bad_kernel_param_type",
		[d]="%0 cannot be used as the type of a kernel parameter",
		[f]="A cannot be used as the type of a kernel parameter",
		[b]=k,
		[g]="(.*?) cannot be used as the type of a kernel parameter",
		[h]=a,
		[i]=m,
		[e]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL\n\nbool, half, pointers and structs / unions containing any\nof these are not allowed. Does not yet reject size_t and\nrelated integer types that are also disallowed.\n\nllvm-svn: 186908"},
		[j]={{r,9480,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"},{r,9582,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  do {\n    // ...\n    for (const auto *FD : RD->fields()) {\n      // ...\n      // OpenCL v1.2 s6.9.p:\n      // Arguments to kernel functions that are declared to be a struct or union\n      // do not allow OpenCL objects to be passed as elements of the struct or\n      // union. This restriction was lifted in OpenCL v2.0 with the introduction\n      // of SVM.\n      if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n      // ...\n      } else {\n        S.Diag(Param->getLocation(), diag::err_bad_kernel_param_type) << PT;"}},
		[l]={
			["clang/test/SemaOpenCL/event_t.cl"]={"clang/test/SemaOpenCL/event_t.cl:11:25: error: \'__private event_t\' cannot be used as the type of a kernel parameter"}
		}
	},
	["err_bad_lvalue_to_rvalue_cast"]={
		[c]="err_bad_lvalue_to_rvalue_cast",
		[d]="cannot cast from lvalue of type %1 to rvalue reference type %2; types are not compatible",
		[f]="cannot cast from lvalue of type B to rvalue reference type C; types are not compatible",
		[b]=k,
		[g]="cannot cast from lvalue of type (.*?) to rvalue reference type (.*?); types are not compatible",
		[h]=a,
		[i]=m,
		[e]={"e97585f7177e",1237761006,"Implement static_cast from lvalue to rvalue reference.","Implement static_cast from lvalue to rvalue reference.\n\nllvm-svn: 67487"},
		[j]={{s,1553,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  // ...\n  if (RefResult != Sema::Ref_Compatible) {\n    // ...\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
		[l]={
			["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:32:13: error: cannot cast from lvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
		}
	},
	["err_bad_memptr_lhs"]={
		[c]="err_bad_memptr_lhs",
		[d]="left hand operand to %0 must be a %select{|pointer to }1class compatible with the right hand operand, but is %2",
		[f]={{nil,nil,{"left hand operand to A must be a ",{a,"pointer to "},"class compatible with the right hand operand, but is C"}}},
		[b]=k,
		[g]="left hand operand to (.*?) must be a (?:|pointer to )class compatible with the right hand operand, but is (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{D,6022,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (isIndirect) {\n    if (const PointerType *Ptr = LHSType->getAs<PointerType>())\n    // ...\n    else {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << 1 << LHSType << FixItHint::CreateReplacement(SourceRange(Loc), \".*\");"},{D,6031,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    // ...\n    if (RequireCompleteType(Loc, LHSType, diag::err_bad_memptr_lhs, OpSpelling, (int)isIndirect)) {"},{D,6037,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Class, LHSType)) {\n    // ...\n    if (!IsDerivedFrom(Loc, LHSType, Class)) {\n      Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling << (int)isIndirect << LHS.get()->getType();"}},
		[l]={
			["clang/test/SemaCXX/member-pointer.cpp"]={"clang/test/SemaCXX/member-pointer.cpp:116:12: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'HasMembers\'","clang/test/SemaCXX/member-pointer.cpp:117:13: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'HasMembers *\'","clang/test/SemaCXX/member-pointer.cpp:118:11: error: left hand operand to .* must be a class compatible with the right hand operand, but is \'int\'","clang/test/SemaCXX/member-pointer.cpp:120:13: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'int *\'","clang/test/SemaCXX/member-pointer.cpp:170:18: error: left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is \'X\'"}
		}
	},
	["err_bad_memptr_rhs"]={
		[c]="err_bad_memptr_rhs",
		[d]="right hand operand to %0 has non-pointer-to-member type %1",
		[f]="right hand operand to A has non-pointer-to-member type B",
		[b]=k,
		[g]="right hand operand to (.*?) has non\\-pointer\\-to\\-member type (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{D,6000,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (!MemPtr) {\n    Diag(Loc, diag::err_bad_memptr_rhs) << OpSpelling << RHSType << RHS.get()->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:20:4: error: right hand operand to .* has non-pointer-to-member type \'int *\'"}
		}
	},
	["err_bad_multiversion_option"]={
		[c]={{nil,E,"err_bad_multiversion_option"}},
		[d]={{nil,E,"function multiversioning doesn\'t support %select{feature|architecture}0 \'%1\'"}},
		[f]={{nil,E,{"function multiversioning doesn\'t support ",{"feature","architecture"}," \'B\'"}}},
		[b]=k,
		[g]="function multiversioning doesn\'t support (?:feature|architecture) \'(.*?)\'",
		[h]=a,
		[i]={{nil,E,G}},
		[e]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning","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"},
		[j]={{r,10957,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    if (!ParseInfo.CPU.empty() && !TargetInfo.validateCpuIs(ParseInfo.CPU)) {\n      S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Architecture << ParseInfo.CPU;"},{r,10964,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    for (const auto &Feat : ParseInfo.Features) {\n      // ...\n      if (Feat[0] == \'-\') {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << (\"no-\" + BareFeat).str();"},{r,10971,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TA) {\n    // ...\n    for (const auto &Feat : ParseInfo.Features) {\n      // ...\n      if (!TargetInfo.validateCpuSupports(BareFeat) || !TargetInfo.isValidFeatureName(BareFeat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << BareFeat;"},{r,10983,"/// Check the target or target_version attribute of the function for\n/// MultiVersion validity.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionValue(Sema &S, const FunctionDecl *FD) {\n  // ...\n  if (TVA) {\n    // ...\n    for (const auto &Feat : Feats) {\n      if (!TargetInfo.validateCpuSupports(Feat)) {\n        S.Diag(FD->getLocation(), diag::err_bad_multiversion_option) << Feature << Feat;"}},
		[l]={
			["clang/test/SemaCXX/attr-target-mv.cpp"]={"clang/test/SemaCXX/attr-target-mv.cpp:7:43: error: function multiversioning doesn\'t support feature \'no-sse4.2\'"}
		}
	},
	["err_bad_new_type"]={
		[c]="err_bad_new_type",
		[d]="cannot allocate %select{function|reference}1 type %0 with new",
		[f]={{nil,nil,{"cannot allocate ",{N,"reference"}," type A with new"}}},
		[b]=k,
		[g]="cannot allocate (?:function|reference) type (.*?) with new",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{D,2458,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //   abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 0 << R;"},{D,2461,"/// 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  // C++ 5.3.4p1: \"[The] type shall be a complete object type, but not an\n  //   abstract class type or array thereof.\n  if (AllocType->isFunctionType())\n  // ...\n  else if (AllocType->isReferenceType())\n    return Diag(Loc, diag::err_bad_new_type) << AllocType << 1 << R;"}},
		[l]={
			["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:140:13: error: cannot allocate reference type \'int &\' with new"}
		}
	},
	["err_bad_parameter_name"]={
		[c]="err_bad_parameter_name",
		[d]="%0 cannot be the name of a parameter",
		[f]="A cannot be the name of a parameter",
		[b]=k,
		[g]="(.*?) cannot be the name of a parameter",
		[h]=a,
		[i]=m,
		[e]={"a56cbccfc413",1288746426,"Provide an error when a non-identifier name (such as an operator) is used as a","Provide an error when a non-identifier name (such as an operator) is used as a\nparameter name.\n\nFixes PR8012.\n\nllvm-svn: 118138"},
		[j]={{r,14711,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_ConversionFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n  case UnqualifiedIdKind::IK_ConstructorName:\n  case UnqualifiedIdKind::IK_DestructorName:\n  case UnqualifiedIdKind::IK_ImplicitSelfParam:\n  case UnqualifiedIdKind::IK_DeductionGuideName:\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name) << GetNameForDeclarator(D).getName();"}},
		[l]={
			["clang/test/SemaCXX/PR8012.cpp"]={"clang/test/SemaCXX/PR8012.cpp:3:14: error: \'operator+\' cannot be the name of a parameter"}
		}
	},
	["err_bad_parameter_name_template_id"]={
		[c]={{nil,n,"err_bad_parameter_name_template_id"}},
		[d]={{nil,n,"parameter name cannot have template arguments"}},
		[f]={{nil,n,"parameter name cannot have template arguments"}},
		[b]=k,
		[g]="parameter name cannot have template arguments",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"da70fc0c5f5b",1560542514,"PR42071: Reject weird names for non-type template parameters.","PR42071: Reject weird names for non-type template parameters.\n\nAlso reject default arguments appearing in invalid locations.\n\nllvm-svn: 363447"},
		[j]={{r,14718,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  case UnqualifiedIdKind::IK_TemplateId:\n  case UnqualifiedIdKind::IK_ConstructorTemplateId:\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_bad_parameter_name_template_id);"}},
		[l]={
			["clang/test/Parser/cxx-template-decl.cpp"]={"clang/test/Parser/cxx-template-decl.cpp:261:16: error: parameter name cannot have template arguments"}
		}
	},
	["err_bad_property_context"]={
		[c]="err_bad_property_context",
		[d]="property implementation must be in a class or category implementation",
		[f]="property implementation must be in a class or category implementation",
		[b]=k,
		[g]="property implementation must be in a class or category implementation",
		[h]=a,
		[i]=m,
		[e]={ic,1480718311,hc,gc},
		[j]={{Mb,1199,"/// 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  } else {\n    Diag(AtLoc, diag::err_bad_property_context);"}}
	},
	["err_bad_property_decl"]={
		[c]="err_bad_property_decl",
		[d]="property implementation must have its declaration in interface %0 or one of its extensions",
		[f]="property implementation must have its declaration in interface A or one of its extensions",
		[b]=k,
		[g]="property implementation must have its declaration in interface (.*?) or one of its extensions",
		[h]=a,
		[i]=m,
		[e]={ic,1480718311,hc,gc},
		[j]={{Mb,1114,"/// 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    if (!property) {\n      Diag(PropertyLoc, diag::err_bad_property_decl) << IDecl->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:19:13: error: property implementation must have its declaration in interface \'I\' or one of its extensions","clang/test/SemaObjC/property.m:31:10: error: property implementation must have its declaration in interface \'E\' or one of its extensions"}
		}
	},
	["err_bad_receiver_type"]={
		[c]="err_bad_receiver_type",
		[d]="bad receiver type %0",
		[f]="bad receiver type A",
		[b]=k,
		[g]="bad receiver type (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{wb,3130,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!Method) {\n    // ...\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    // ...\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n    // ...\n    } else {\n      // ...\n      // We allow sending a message to a qualified ID (\"id<foo>\"), which is ok as\n      // long as one of the protocols implements the selector (if not, warn).\n      // And as long as message is not deprecated/unavailable (warn if it is).\n      if (const ObjCObjectPointerType *QIdTy = ReceiverType->getAsObjCQualifiedIdType()) {\n      // ...\n      } else if (const ObjCObjectPointerType *OCIType = ReceiverType->getAsObjCInterfacePointerType()) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_bad_receiver_type) << ReceiverType << RecRange;"}},
		[l]={
			["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:46:10: error: bad receiver type \'CFStringRef\' (aka \'const struct __CFString *\')"}
		}
	},
	["err_bad_reinterpret_cast_overload"]={
		[c]="err_bad_reinterpret_cast_overload",
		[d]="reinterpret_cast cannot resolve overloaded function %0 to type %1",
		[f]="reinterpret_cast cannot resolve overloaded function A to type B",
		[b]=k,
		[g]="reinterpret_cast cannot resolve overloaded function (.*?) to type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by","Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes PR8230.\n\nllvm-svn: 118400"},
		[j]={{s,1202,"/// CheckReinterpretCast - Check that a reinterpret_cast\\<DestType\\>(SrcExpr) is\n/// valid.\n/// Refer to C++ 5.2.10 for details. reinterpret_cast is typically used in code\n/// like this:\n/// char *bytes = reinterpret_cast\\<char*\\>(int_ptr);\nvoid CastOperation::CheckReinterpretCast() {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    // ...\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload) << OverloadExpr::find(SrcExpr.get()).Expression->getName() << DestType << OpRange;"}},
		[l]={
			["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:31:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:32:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:37:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (&)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:38:14: error: reinterpret_cast cannot resolve overloaded function \'f\' to type \'void (*)(int)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:53:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (&)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:54:14: error: reinterpret_cast cannot resolve overloaded function \'t\' to type \'void (*)(char)\'"}
		}
	},
	["err_bad_reinterpret_cast_reference"]={
		[c]="err_bad_reinterpret_cast_reference",
		[d]="reinterpret_cast of a %0 to %1 needs its address, which is not allowed",
		[f]="reinterpret_cast of a A to B needs its address, which is not allowed",
		[b]=k,
		[g]="reinterpret_cast of a (.*?) to (.*?) needs its address, which is not allowed",
		[h]=a,
		[i]=m,
		[e]={"bf04231a7254",1303516677,"Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to ...","Don\'t allow reinterpret_cast to reference of vector element and property expression. Thanks goes to Eli Friedman!\n\nllvm-svn: 130036"},
		[j]={{s,2302,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (const ReferenceType *DestTypeTmp = DestType->getAs<ReferenceType>()) {\n    // ...\n    if (inappropriate) {\n      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_reference) << inappropriate << DestType << OpRange << SrcExpr.get()->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:144:28: error: reinterpret_cast of a vector element to \'float &\' needs its address, which is not allowed"}
		}
	},
	["err_bad_reinterpret_cast_small_int"]={
		[c]="err_bad_reinterpret_cast_small_int",
		[d]="cast from pointer to smaller type %2 loses information",
		[f]="cast from pointer to smaller type C loses information",
		[b]=k,
		[g]="cast from pointer to smaller type (.*?) loses information",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{s,2367,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  // See below for the enumeral issue.\n  if (SrcType->isNullPtrType() && DestType->isIntegralType(Self.Context)) {\n    // C++0x 5.2.10p4: A pointer can be explicitly converted to any integral\n    //   type large enough to hold it. A value of std::nullptr_t can be\n    //   converted to an integral type; the conversion has the same meaning\n    //   and validity as a conversion of (void*)0 to the integral type.\n    if (Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType)) {\n      msg = diag::err_bad_reinterpret_cast_small_int;"},{s,2471,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n  // ...\n  if (DestType->isIntegralType(Self.Context)) {\n    // ...\n    // C++ 5.2.10p4: A pointer can be explicitly converted to any integral\n    //   type large enough to hold it; except in Microsoft mode, where the\n    //   integral type size doesn\'t matter (except we don\'t allow bool).\n    if ((Self.Context.getTypeSize(SrcType) > Self.Context.getTypeSize(DestType))) {\n      // ...\n      if (MicrosoftException) {\n      // ...\n      } else {\n        msg = diag::err_bad_reinterpret_cast_small_int;"}},
		[l]={
			["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:68:9: error: cast from pointer to smaller type \'char\' loses information"}
		}
	},
	["err_bad_rvalue_to_rvalue_cast"]={
		[c]="err_bad_rvalue_to_rvalue_cast",
		[d]="cannot cast from rvalue of type %1 to rvalue reference type %2; types are not compatible",
		[f]="cannot cast from rvalue of type B to rvalue reference type C; types are not compatible",
		[b]=k,
		[g]="cannot cast from rvalue of type (.*?) to rvalue reference type (.*?); types are not compatible",
		[h]=a,
		[i]=m,
		[e]={"e4e9e281a1fb",1478139197,"[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types.","[Sema] Allow static_cast<T&&>(e) to check explicit conversions for non-reference-related types.\n\nSummary:\n[expr.cast.static] states:\n> 3. A glvalue of type “cv1 T1” can be cast to type “rvalue reference to cv2 T2” if “cv2 T2” is reference-compatible\n> with “cv1 T1”. The result refers to the object or the specified base class subobject thereof. If T2 is\n> an inaccessible or ambiguous base class of T1, a program that necessitates such a cast is\n> ill-formed.\n> \n> 4. Otherwise, an expression e can be explicitly converted to a type T using a static_cast of the form static_-\n> cast<T>(e) if the declaration T t(e); is well-formed, for some invented temporary variable t. [...]\n\nCurrently when checking p3 Clang will diagnose `static_cast<T&&>(e)` as invalid if the argument is not reference compatible with `T`. However I believe the correct behavior is to also check p4 in those cases.  For example:\n\n```\ndouble y = 42;\nstatic_cast<int&&>(y); // this should be OK.  \'int&& t(y)\' is well formed\n```\n\nNote that we still don\'t check p4 for non-reference-compatible types which are reference-related since  `T&& t(e);` should never be well formed in those cases.\n\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D26231\n\nllvm-svn: 285872"},
		[j]={{s,1554,"/// Tests whether a conversion according to N2844 is valid.\nTryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr, QualType DestType, bool CStyle, CastKind &Kind, CXXCastPath &BasePath, unsigned &msg) {\n  // ...\n  if (RefResult != Sema::Ref_Compatible) {\n    // ...\n    msg = SrcExpr->isLValue() ? diag::err_bad_lvalue_to_rvalue_cast : diag::err_bad_rvalue_to_rvalue_cast;"}},
		[l]={
			["clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp"]={"clang/test/CXX/expr/expr.post/expr.static.cast/p3-p4-0x.cpp:33:14: error: cannot cast from rvalue of type \'const A\' to rvalue reference type \'A &&\'; types are not compatible"}
		}
	},
	["err_bad_static_cast_member_pointer_nonmp"]={
		[c]="err_bad_static_cast_member_pointer_nonmp",
		[d]="cannot cast from type %1 to member pointer type %2",
		[f]="cannot cast from type B to member pointer type C",
		[b]=k,
		[g]="cannot cast from type (.*?) to member pointer type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
		[j]={{s,1783,"/// 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 (!SrcMemPtr) {\n    msg = diag::err_bad_static_cast_member_pointer_nonmp;"}},
		[l]={
			["clang/test/SemaTemplate/member-access-ambig.cpp"]={"clang/test/SemaTemplate/member-access-ambig.cpp:51:7: error: cannot cast from type \'int *\' to member pointer type \'P\' (aka \'int (AddrOfMember::A::*)\')"}
		}
	},
	["err_bad_static_cast_overload"]={
		[c]="err_bad_static_cast_overload",
		[d]="address of overloaded function %0 cannot be static_cast to type %1",
		[f]="address of overloaded function A cannot be static_cast to type B",
		[b]=k,
		[g]="address of overloaded function (.*?) cannot be static_cast to type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"e81f58e18011",1289187648,"Properly diagnose invalid casts to function references. Patch by","Properly diagnose invalid casts to function references. Patch by\nFaisal Vali, tweaked by me. Fixes PR8230.\n\nllvm-svn: 118400"},
		[j]={{s,1249,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  // This test is outside everything else because it\'s the only case where\n  // a non-lvalue-reference target type does not lead to decay.\n  // C++ 5.2.9p4: Any expression can be explicitly converted to type \"cv void\".\n  if (DestType->isVoidType()) {\n    // ...\n    if (claimPlaceholder(BuiltinType::Overload)) {\n      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,\n                                                             // ...\n                                                             OpRange, DestType, diag::err_bad_static_cast_overload);"},{s,1274,"/// CheckStaticCast - Check that a static_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.9 for details. Static casts are mostly used for making\n/// implicit conversions explicit and getting rid of data loss warnings.\nvoid CastOperation::CheckStaticCast() {\n  // ...\n  if (tcr != TC_Success && msg != 0) {\n    // ...\n    if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload) << oe->getName() << DestType << OpRange << oe->getQualifierLoc().getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp"]={"clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:25:14: error: address of overloaded function \'f\' cannot be static_cast to type \'void (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:57:14: error: address of overloaded function \'t\' cannot be static_cast to type \'int (*)(char)\'","clang/test/SemaCXX/addr-of-overloaded-function-casting.cpp:67:16: error: address of overloaded function \'f\' cannot be static_cast to type \'FnType\' (aka \'void (int)\')"}
		}
	},
	["err_bad_static_cast_pointer_nonpointer"]={
		[c]="err_bad_static_cast_pointer_nonpointer",
		[d]="cannot cast from type %1 to pointer type %2",
		[f]="cannot cast from type B to pointer type C",
		[b]=k,
		[g]="cannot cast from type (.*?) to pointer type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
		[j]={{s,1632,"/// Tests whether a conversion according to C++ 5.2.9p8 is valid.\nTryCastResult TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!SrcPointer) {\n    msg = diag::err_bad_static_cast_pointer_nonpointer;"}},
		[l]={
			["clang/test/SemaCXX/ptrtomember.cpp"]={"clang/test/SemaCXX/ptrtomember.cpp:31:11: error: cannot cast from type \'void\' to pointer type \'void *\'"}
		}
	},
	["err_bad_string_encoding"]={
		[c]="err_bad_string_encoding",
		[d]="illegal character encoding in string literal",
		[f]="illegal character encoding in string literal",
		[b]=k,
		[g]="illegal character encoding in string literal",
		[h]=a,
		[i]=Ab,
		[e]={"703e7153af87",1320113690,"Perform proper conversion for strings encoded in the source file as UTF-8.  (For now, we are assumin...","Perform proper conversion for strings encoded in the source file as UTF-8.  (For now, we are assuming the source character set is always UTF-8; this can be easily extended if necessary.)\n\nTests will be coming up in a subsequent commit.\n\nPatch by Seth Cantrell.\n\nllvm-svn: 143416"},
		[j]={{"clang/lib/Lex/LiteralSupport.cpp",2265,"/// This function copies from Fragment, which is a sequence of bytes\n/// within Tok\'s contents (which begin at TokBegin) into ResultPtr.\n/// Performs widening for multi-byte characters.\nbool StringLiteralParser::CopyStringFragment(const Token &Tok, const char *TokBegin, StringRef Fragment) {\n  // ...\n  if (Diags) {\n    // ...\n    const DiagnosticBuilder &Builder = Diag(Diags, Features, SourceLoc, TokBegin, ErrorPtr, resyncUTF8(ErrorPtr, Fragment.end()), NoErrorOnBadEncoding ? diag::warn_bad_string_encoding : diag::err_bad_string_encoding);"}},
		[l]={
			["clang/test/Lexer/string-literal-encoding.c"]={"clang/test/Lexer/string-literal-encoding.c:8:26: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:10:27: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:11:27: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:12:28: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:13:29: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:14:29: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:17:24: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:22:30: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:24:31: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:25:31: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:26:32: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:27:33: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:28:33: error: illegal character encoding in string literal","clang/test/Lexer/string-literal-encoding.c:31:28: error: illegal character encoding in string literal"}
		}
	},
	["err_bad_variable_name"]={
		[c]="err_bad_variable_name",
		[d]="%0 cannot be the name of a variable or data member",
		[f]="A cannot be the name of a variable or data member",
		[b]=k,
		[g]="(.*?) cannot be the name of a variable or data member",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{r,7462,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.isDecompositionDeclarator()) {\n  // ...\n  } else if (!II) {\n    Diag(D.getIdentifierLoc(), diag::err_bad_variable_name) << Name;"},{w,3545,"/// 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    // Data members must have identifiers for names.\n    if (!Name.isIdentifier()) {\n      Diag(Loc, diag::err_bad_variable_name) << Name;"}},
		[l]={
			["clang/test/SemaCXX/overloaded-operator-decl.cpp"]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:39:5: error: \'operator+\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:48:3: error: \'operator int\' cannot be the name of a variable or data member","clang/test/SemaCXX/overloaded-operator-decl.cpp:49:7: error: \'operator+\' cannot be the name of a variable or data member"}
		}
	},
	["err_base_class_has_flexible_array_member"]={
		[c]="err_base_class_has_flexible_array_member",
		[d]="base class %0 has a flexible array member",
		[f]="base class A has a flexible array member",
		[b]=k,
		[g]="base class (.*?) has a flexible array member",
		[h]=a,
		[i]=m,
		[e]={"9b1754d05840",1383393636,"Sema: Disallow inheriting from classes with flexible array members","Sema: Disallow inheriting from classes with flexible array members\n\nFlexible array members inherently index off of the end of their parent\ntype.\n\nWe shouldn\'t allow this type to be used as a base, virtual or otherwise,\nbecause indexing off the end may find us inside of another base or the\nderived types members.\n\nllvm-svn: 193923"},
		[j]={{w,2771,"/// 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  // A class which contains a flexible array member is not suitable for use as a\n  // base class:\n  //   - If the layout determines that a base comes before another base,\n  //     the flexible array member would index into the subsequent base.\n  //   - If the layout determines that base comes before the derived class,\n  //     the flexible array member would index into the derived class.\n  if (CXXBaseDecl->hasFlexibleArrayMember()) {\n    Diag(BaseLoc, diag::err_base_class_has_flexible_array_member) << CXXBaseDecl->getDeclName();"}},
		[l]={
			["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:35:12: error: base class \'J\' has a flexible array member"}
		}
	},
	["err_base_clause_on_union"]={
		[c]="err_base_clause_on_union",
		[d]="unions cannot have base classes",
		[f]="unions cannot have base classes",
		[b]=k,
		[g]="unions cannot have base classes",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,2663,"/// 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  // C++ [class.union]p1:\n  //   A union shall not have base classes.\n  if (Class->isUnion()) {\n    Diag(Class->getLocation(), diag::err_base_clause_on_union) << SpecifierRange;"}},
		[l]={
			["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:21:7: error: unions cannot have base classes"}
		}
	},
	["err_base_init_direct_and_virtual"]={
		[c]="err_base_init_direct_and_virtual",
		[d]="base class initializer %0 names both a direct base class and an inherited virtual base class",
		[f]="base class initializer A names both a direct base class and an inherited virtual base class",
		[b]=k,
		[g]="base class initializer (.*?) names both a direct base class and an inherited virtual base class",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,4763,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  // C++ [base.class.init]p2:\n  //   If a mem-initializer-id is ambiguous because it designates both\n  //   a direct non-virtual base class and an inherited virtual base\n  //   class, the mem-initializer is ill-formed.\n  if (DirectBaseSpec && VirtualBaseSpec)\n    return Diag(BaseLoc, diag::err_base_init_direct_and_virtual) << BaseType << BaseTInfo->getTypeLoc().getLocalSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/constructor-initializer.cpp"]={"clang/test/SemaCXX/constructor-initializer.cpp:34:9: error: base class initializer \'B\' names both a direct base class and an inherited virtual base class"}
		}
	},
	["err_base_init_does_not_name_class"]={
		[c]="err_base_init_does_not_name_class",
		[d]="constructor initializer %0 does not name a class",
		[f]="constructor initializer A does not name a class",
		[b]=k,
		[g]="constructor initializer (.*?) does not name a class",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,4685,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!BaseType->isDependentType() && !BaseType->isRecordType())\n    return Diag(BaseLoc, diag::err_base_init_does_not_name_class) << BaseType << BaseTInfo->getTypeLoc().getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:87:14: error: constructor initializer \'decltype(int())\' (aka \'int\') does not name a class"}
		}
	},
	["err_base_must_be_class"]={
		[c]="err_base_must_be_class",
		[d]="base specifier must name a class",
		[f]="base specifier must name a class",
		[b]=k,
		[g]="base specifier must name a class",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,2711,"/// 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  // Base specifiers must be record types.\n  if (!BaseType->isRecordType()) {\n    Diag(BaseLoc, diag::err_base_must_be_class) << SpecifierRange;"}},
		[l]={
			["clang/test/CXX/class.derived/p1.cpp"]={"clang/test/CXX/class.derived/p1.cpp:27:21: error: base specifier must name a class"}
		}
	},
	["err_base_specifier_attribute"]={
		[c]="err_base_specifier_attribute",
		[d]="%0%select{ attribute|}1 cannot be applied to a base specifier",
		[f]={{nil,nil,{"A",{" attribute",a}," cannot be applied to a base specifier"}},{I,nil,"A attribute cannot be applied to a base specifier"}},
		[b]=k,
		[g]="(.*?)(?: attribute|) cannot be applied to a base specifier",
		[h]=a,
		[i]=m,
		[e]={"4c96e99235b3",1361317635,"PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such","PR15300: Support C++11 attributes on base-specifiers. We don\'t support any such\nattributes yet, so just issue the appropriate diagnostics. Also generalize the\nfixit for attributes-in-the-wrong-place code and reuse it here, if attributes\nare placed after the access-specifier or \'virtual\' in a base specifier.\n\nllvm-svn: 175575"},
		[j]={{w,2827,"/// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is\n/// one entry in the base class list of a class specifier, for\n/// example:\n///    class foo : public bar, virtual private baz {\n/// \'public bar\' and \'virtual private baz\' are each base-specifiers.\nBaseResult Sema::ActOnBaseSpecifier(Decl *classdecl, SourceRange SpecifierRange, const ParsedAttributesView &Attributes, bool Virtual, AccessSpecifier Access, ParsedType basetype, SourceLocation BaseLoc, SourceLocation EllipsisLoc) {\n  // ...\n  // We do not support any C++11 attributes on base-specifiers yet.\n  // Diagnose any attributes we see.\n  for (const ParsedAttr &AL : Attributes) {\n    // ...\n    if (AL.getKind() == ParsedAttr::UnknownAttribute)\n    // ...\n    else\n      Diag(AL.getLoc(), diag::err_base_specifier_attribute) << AL << AL.isRegularKeywordAttribute() << AL.getRange();"}},
		[l]={
			["clang/test/Parser/cxx11-base-spec-attributes.cpp"]={"clang/test/Parser/cxx11-base-spec-attributes.cpp:9:14: error: \'noreturn\' attribute cannot be applied to a base specifier"}
		}
	},
	["err_binding_cannot_appear_in_own_initializer"]={
		[c]="err_binding_cannot_appear_in_own_initializer",
		[d]="binding %0 cannot appear in the initializer of its own decomposition declaration",
		[f]="binding A cannot appear in the initializer of its own decomposition declaration",
		[b]=k,
		[g]="binding (.*?) cannot appear in the initializer of its own decomposition declaration",
		[h]=a,
		[i]=m,
		[e]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\nThere are a couple of things in the wording that seem strange here:\ndecomposition declarations are permitted at namespace scope (which we partially\nsupport here) and they are permitted as the declaration in a template (which we\nreject).\n\nllvm-svn: 276492"},
		[j]={{F,257,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  // See if this is an auto-typed variable whose initializer we are parsing.\n  if (ParsingInitForAutoVars.count(D)) {\n    if (isa<BindingDecl>(D)) {\n      Diag(Loc, diag::err_binding_cannot_appear_in_own_initializer) << D->getDeclName();"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:5:14: error: binding \'a\' cannot appear in the initializer of its own decomposition declaration"}
		}
	},
	["err_bit_cast_non_trivially_copyable"]={
		[c]={{nil,n,"err_bit_cast_non_trivially_copyable"}},
		[d]={{nil,n,"__builtin_bit_cast %select{source|destination}0 type must be trivially copyable"}},
		[f]={{nil,n,{"__builtin_bit_cast ",{j,"destination"}," type must be trivially copyable"}}},
		[b]=k,
		[g]="__builtin_bit_cast (?:source|destination) type must be trivially copyable",
		[h]=a,
		[i]={{nil,n,G}},
		[e]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast","[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __builtin_bit_cast(T, v), which performs a\nbit_cast from a value v to a type T. This expression can be evaluated at\ncompile time under specific circumstances.\n\nThe compile time evaluation currently doesn\'t support bit-fields, but I\'m\nplanning on fixing this in a follow up (some of the logic for figuring this out\nis in CodeGen). I\'m also planning follow-ups for supporting some more esoteric\ntypes that the constexpr evaluator supports, as well as extending\n__builtin_memcpy constexpr evaluation to use the same infrastructure.\n\nrdar://44987528\n\nDifferential revision: https://reviews.llvm.org/D62825\n\nllvm-svn: 364954"},
		[j]={{s,3278,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (!DestType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 1;"},{s,3285,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (!SrcType.isTriviallyCopyableType(Self.Context)) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_non_trivially_copyable) << 0;"}},
		[l]={
			["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:36:30: error: __builtin_bit_cast source type must be trivially copyable","clang/test/SemaCXX/builtin-bit-cast.cpp:39:21: error: __builtin_bit_cast destination type must be trivially copyable"}
		}
	},
	["err_bit_cast_type_size_mismatch"]={
		[c]={{nil,n,"err_bit_cast_type_size_mismatch"}},
		[d]={{nil,n,"__builtin_bit_cast source size does not equal destination size (%0 vs %1)"}},
		[f]={{nil,n,"__builtin_bit_cast source size does not equal destination size (A vs B)"}},
		[b]=k,
		[g]="__builtin_bit_cast source size does not equal destination size \\((.*?) vs (.*?)\\)",
		[h]=a,
		[i]={{nil,n,G}},
		[e]={"eee944e7f9e6",1562092093,"[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast","[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast\n\nThis commit adds a new builtin, __builtin_bit_cast(T, v), which performs a\nbit_cast from a value v to a type T. This expression can be evaluated at\ncompile time under specific circumstances.\n\nThe compile time evaluation currently doesn\'t support bit-fields, but I\'m\nplanning on fixing this in a follow up (some of the logic for figuring this out\nis in CodeGen). I\'m also planning follow-ups for supporting some more esoteric\ntypes that the constexpr evaluator supports, as well as extending\n__builtin_memcpy constexpr evaluation to use the same infrastructure.\n\nrdar://44987528\n\nDifferential revision: https://reviews.llvm.org/D62825\n\nllvm-svn: 364954"},
		[j]={{s,3271,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (DestSize != SourceSize) {\n    Self.Diag(OpRange.getBegin(), diag::err_bit_cast_type_size_mismatch) << (int)SourceSize.getQuantity() << (int)DestSize.getQuantity();"}},
		[l]={
			["clang/test/SemaCXX/builtin-bit-cast.cpp"]={"clang/test/SemaCXX/builtin-bit-cast.cpp:28:22: error: __builtin_bit_cast source size does not equal destination size (4 vs 1)"}
		}
	},
	["err_bit_int_bad_size"]={
		[c]={{nil,v,"err_bit_int_bad_size"}},
		[d]={{nil,v,"%select{signed|unsigned}0 _BitInt must have a bit size of at least %select{2|1}0"}},
		[f]={{nil,v,{{"signed","unsigned"}," _BitInt must have a bit size of at least ",{"2","1"}}}},
		[b]=k,
		[g]="(?:signed|unsigned) _BitInt must have a bit size of at least (?:2|1)",
		[h]=a,
		[i]={{nil,v,G}},
		[e]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[j]={{u,2359,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (!IsUnsigned && NumBits < 2) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 0;"},{u,2364,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (IsUnsigned && NumBits < 1) {\n    Diag(Loc, diag::err_bit_int_bad_size) << 1;"}},
		[l]={
			["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:21:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:22:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:24:3: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:26:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2","clang/test/SemaCXX/ext-int.cpp:6:12: error: unsigned _BitInt must have a bit size of at least 1","clang/test/SemaCXX/ext-int.cpp:5:3: error: signed _BitInt must have a bit size of at least 2"}
		}
	},
	["err_bit_int_max_size"]={
		[c]={{nil,v,"err_bit_int_max_size"}},
		[d]={{nil,v,"%select{signed|unsigned}0 _BitInt of bit sizes greater than %1 not supported"}},
		[f]={{nil,v,{{"signed","unsigned"}," _BitInt of bit sizes greater than B not supported"}}},
		[b]=k,
		[g]="(?:signed|unsigned) _BitInt of bit sizes greater than (.*?) not supported",
		[h]=a,
		[i]={{nil,v,G}},
		[e]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[j]={{u,2370,"/// Build a bit-precise integer type.\n///\n/// \\param IsUnsigned Boolean representing the signedness of the type.\n///\n/// \\param BitWidth Size of this int type in bits, or an expression representing\n/// that.\n///\n/// \\param Loc Location of the keyword.\nQualType Sema::BuildBitIntType(bool IsUnsigned, Expr *BitWidth, SourceLocation Loc) {\n  // ...\n  if (NumBits > TI.getMaxBitIntWidth()) {\n    Diag(Loc, diag::err_bit_int_max_size) << IsUnsigned << static_cast<uint64_t>(TI.getMaxBitIntWidth());"}},
		[l]={
			["clang/test/Sema/large-bit-int.c"]={"clang/test/Sema/large-bit-int.c:9:3: error: signed _BitInt of bit sizes greater than 1024 not supported","clang/test/Sema/large-bit-int.c:10:3: error: unsigned _BitInt of bit sizes greater than 1024 not supported"}
		}
	},
	["err_bitfield_has_negative_width"]={
		[c]="err_bitfield_has_negative_width",
		[d]="bit-field %0 has negative width (%1)",
		[f]="bit-field A has negative width (B)",
		[b]=k,
		[g]="bit\\-field (.*?) has negative width \\((.*?)\\)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{r,17924,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (Value.isSigned() && Value.isNegative()) {\n    if (FieldName)\n      return Diag(FieldLoc, diag::err_bitfield_has_negative_width) << FieldName << toString(Value, 10);"}},
		[l]={
			["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:5:7: error: bit-field \'a\' has negative width (-1)"}
		}
	},
	["err_bitfield_has_zero_width"]={
		[c]="err_bitfield_has_zero_width",
		[d]="named bit-field %0 has zero width",
		[f]="named bit-field A has zero width",
		[b]=k,
		[g]="named bit\\-field (.*?) has zero width",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{r,17920,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // Zero-width bitfield is ok for anonymous field.\n  if (Value == 0 && FieldName)\n    return Diag(FieldLoc, diag::err_bitfield_has_zero_width) << FieldName;"}},
		[l]={
			["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:14:7: error: named bit-field \'e\' has zero width"}
		}
	},
	["err_bitfield_too_wide"]={
		[c]={{nil,H,"err_bitfield_too_wide"}},
		[d]={{nil,H,"%select{bit-field %1|anonymous bit-field}0 is too wide (%2 bits)"}},
		[f]={{nil,H,{{"bit-field B","anonymous bit-field"}," is too wide (C bits)"}}},
		[b]=k,
		[g]="(?:bit\\-field (.*?)|anonymous bit\\-field) is too wide \\((.*?) bits\\)",
		[h]=a,
		[i]={{nil,H,m}},
		[e]={Cb,1590001902,Hb,Jb},
		[j]={{r,17933,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // The size of the bit-field must not exceed our maximum permitted object\n  // size.\n  if (Value.getActiveBits() > ConstantArrayType::getMaxSizeBits(Context)) {\n    return Diag(FieldLoc, diag::err_bitfield_too_wide) << !FieldName << FieldName << toString(Value, 10);"}},
		[l]={
			["clang/test/SemaCXX/bitfield-layout.cpp"]={"clang/test/SemaCXX/bitfield-layout.cpp:45:8: error: bit-field \'c\' is too wide (18446744073709551617 bits)"}
		}
	},
	["err_bitfield_width_exceeds_type_width"]={
		[c]="err_bitfield_width_exceeds_type_width",
		[d]={{nil,t,"width of%select{ anonymous|}0 bit-field%select{| %1}0 (%2 bits) exceeds the %select{width|size}3 of its type (%4 bit%s4)"},{H,nil,"width of bit-field %0 (%1 bits) exceeds %select{width|size}2 of its type (%3 bit%s3)"}},
		[f]={{nil,t,{"width of",{" anonymous",a}," bit-field",{a," B"}," (C bits) exceeds the ",{"width","size"}," of its type (E bitE)"}},{H,nil,{"width of bit-field A (B bits) exceeds ",{"width","size"}," of its type (D bitD)"}}},
		[b]=k,
		[g]="width of(?: anonymous|) bit\\-field(?:| (.*?)) \\((.*?) bits\\) exceeds the (?:width|size) of its type \\((.*?) bit(.*?)\\)",
		[h]=a,
		[i]=m,
		[e]={"022bdc7d7361",1442266056,"C11 _Bool bitfield diagnostic","C11 _Bool bitfield diagnostic\n\nSummary: Implement DR262 (for C). This patch will mainly affect bitfields of type _Bool\n\nReviewers: fraggamuffin, rsmith\n\nSubscribers: hubert.reinterpretcast, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D10018\n\nllvm-svn: 247618"},
		[j]={{r,17952,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  if (!FieldTy->isDependentType()) {\n    // ...\n    if (CStdConstraintViolation || MSBitfieldViolation) {\n      // ...\n      return Diag(FieldLoc, diag::err_bitfield_width_exceeds_type_width) << (bool)FieldName << FieldName << toString(Value, 10) << !CStdConstraintViolation << DiagWidth;"}},
		[l]={
			["clang/test/Sema/ext-int.c"]={"clang/test/Sema/ext-int.c:15:14: error: width of bit-field \'A\' (8 bits) exceeds the width of its type (4 bits)"}
		}
	},
	["err_block_decl_ref_not_modifiable_lvalue"]={
		[c]="err_block_decl_ref_not_modifiable_lvalue",
		[d]="variable is not assignable (missing __block type specifier)",
		[f]="variable is not assignable (missing __block type specifier)",
		[b]=k,
		[g]="variable is not assignable \\(missing __block type specifier\\)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{F,14282,"/// 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_ConstQualified:\n    // Use a specialized diagnostic when we\'re assigning to an object\n    // from an enclosing function or block.\n    if (NonConstCaptureKind NCCK = isReferenceToNonConstCapture(S, E)) {\n      if (NCCK == NCCK_Block)\n        DiagID = diag::err_block_decl_ref_not_modifiable_lvalue;"}},
		[l]={
			["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:11:20: error: variable is not assignable (missing __block type specifier)"}
		}
	},
	["err_block_extern_cant_init"]={
		[c]="err_block_extern_cant_init",
		[d]={{nil,I,"declaration of block scope identifier with linkage cannot have an initializer"},{C,nil,"\'extern\' variable cannot have an initializer"}},
		[f]={{nil,I,"declaration of block scope identifier with linkage cannot have an initializer"},{C,nil,"\'extern\' variable cannot have an initializer"}},
		[b]=k,
		[g]="declaration of block scope identifier with linkage cannot have an initializer",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{r,13189,"/// 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  // C99 6.7.8p5. If the declaration of an identifier has block scope, and\n  // the identifier has external or internal linkage, the declaration shall\n  // have no initializer for the identifier.\n  // C++14 [dcl.init]p5 is the same restriction for C++.\n  if (VDecl->isLocalVarDecl() && VDecl->hasExternalStorage()) {\n    Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);"}},
		[l]={
			["clang/test/Sema/err-decl-block-extern-no-init.c"]={"clang/test/Sema/err-decl-block-extern-no-init.c:6:16: error: declaration of block scope identifier with linkage cannot have an initializer","clang/test/Sema/err-decl-block-extern-no-init.c:13:16: error: declaration of block scope identifier with linkage cannot have an initializer"}
		}
	},
	["err_block_on_nonlocal"]={
		[c]="err_block_on_nonlocal",
		[d]="__block attribute not allowed, only allowed on local variables",
		[f]="__block attribute not allowed, only allowed on local variables",
		[b]=k,
		[g]="__block attribute not allowed, only allowed on local variables",
		[h]=a,
		[i]=m,
		[e]={"e9efa80c003e",1241050780,"Sema checking for incorrect placement of __block.  Radar 6441502","Sema checking for incorrect placement of __block.  Radar 6441502\n\nllvm-svn: 70452"},
		[j]={{r,8742,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (!NewVD->hasLocalStorage() && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_nonlocal);"},{r,14821,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (New->hasAttr<BlocksAttr>()) {\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"},{Z,4813,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  for (unsigned i = 0, e = Sel.getNumArgs(); i != e; ++i) {\n    // ...\n    if (Param->hasAttr<BlocksAttr>()) {\n      Diag(Param->getLocation(), diag::err_block_on_nonlocal);"},{Z,5239,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  if (New->hasAttr<BlocksAttr>())\n    Diag(New->getLocation(), diag::err_block_on_nonlocal);"}},
		[l]={
			["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:150:13: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:152:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:154:25: error: __block attribute not allowed, only allowed on local variables","clang/test/Sema/block-misc.c:155:25: error: __block attribute not allowed, only allowed on local variables"}
		}
	},
	["err_block_on_vm"]={
		[c]="err_block_on_vm",
		[d]="__block attribute not allowed on declaration with a variably modified type",
		[f]="__block attribute not allowed on declaration with a variably modified type",
		[b]=k,
		[g]="__block attribute not allowed on declaration with a variably modified type",
		[h]=a,
		[i]=m,
		[e]={"a71286315f9d",1241221307,"Add Sema checking for __block on vm declarations.  Radar 6441502","Add Sema checking for __block on vm declarations.  Radar 6441502\n\nllvm-svn: 70601"},
		[j]={{r,8755,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (isVM && NewVD->hasAttr<BlocksAttr>()) {\n    Diag(NewVD->getLocation(), diag::err_block_on_vm);"}},
		[l]={
			["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:156:15: error: __block attribute not allowed on declaration with a variably modified type","clang/test/Sema/block-misc.c:157:17: error: __block attribute not allowed on declaration with a variably modified type"}
		}
	},
	["err_block_return_missing_expr"]={
		[c]="err_block_return_missing_expr",
		[d]="non-void block should return a value",
		[f]="non-void block should return a value",
		[b]=k,
		[g]="non\\-void block should return a value",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{bb,3693,"/// 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  // Otherwise, verify that this result type matches the previous one.  We are\n  // pickier with blocks than for normal functions because we don\'t have GCC\n  // compatibility to worry about here.\n  if (FnRetType->isDependentType()) {\n  // ...\n  } else if (FnRetType->isVoidType()) {\n  // ...\n  } else if (!RetValExp) {\n    return StmtError(Diag(ReturnLoc, diag::err_block_return_missing_expr));"}}
	},
	["err_block_returning_array_function"]={
		[c]="err_block_returning_array_function",
		[d]="block cannot return %select{array|function}0 type %1",
		[f]={{nil,nil,{"block cannot return ",{"array",N}," type B"}}},
		[b]=k,
		[g]="block cannot return (?:array|function) type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"20ad245e3e22",1295997393,"Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks ar...","Change error \"function cannot return array type\" -> \"blocks cannot return array type\" when blocks are involved.\nAddresses rdar://8876238.\n\nllvm-svn: 124242"},
		[j]={{F,21269,"/// Rebuilds a call expression which yielded __unknown_anytype.\nExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) {\n  // ...\n  // Verify that this is a legal result type of a function.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    // ...\n    if (Kind == FK_BlockPointer)\n      diagID = diag::err_block_returning_array_function;"},{u,5272,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // C99 6.7.5.3p1: The return type may not be a function or array type.\n      // For conversion functions, we\'ll diagnose this particular error later.\n      if (!D.isInvalidType() && (T->isArrayType() || T->isFunctionType()) && (D.getName().getKind() != UnqualifiedIdKind::IK_ConversionFunctionId)) {\n        // ...\n        // Last processing chunk in block context means this function chunk\n        // represents the block.\n        if (chunkIndex == 0 && D.getContext() == DeclaratorContext::BlockLiteral)\n          diagID = diag::err_block_returning_array_function;"}},
		[l]={
			["clang/test/Sema/block-return.c"]={"clang/test/Sema/block-return.c:101:19: error: block cannot return array type \'int (*[5])(long)\'"}
		}
	},
	["err_blocks_disable"]={
		[c]="err_blocks_disable",
		[d]={{nil,v,"blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL C 2.0 or OpenCL C 3.0 with __opencl_c_device_enqueue feature}0"},{t,E,"blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL 2.0}0"},{P,nil,"blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL 2.0 or above}0"}},
		[f]={{nil,v,{"blocks support disabled - compile with -fblocks or ",{"pick a deployment target that supports them","for OpenCL C 2.0 or OpenCL C 3.0 with __opencl_c_device_enqueue feature"}}},{t,E,{"blocks support disabled - compile with -fblocks or ",{"pick a deployment target that supports them","for OpenCL 2.0"}}},{P,nil,{"blocks support disabled - compile with -fblocks or ",{"pick a deployment target that supports them","for OpenCL 2.0 or above"}}}},
		[b]=k,
		[g]="blocks support disabled \\- compile with \\-fblocks or (?:pick a deployment target that supports them|for OpenCL C 2\\.0 or OpenCL C 3\\.0 with __opencl_c_device_enqueue feature)",
		[h]=a,
		[i]=m,
		[e]={"9eac931b5f29",1238127486,"Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway","Fix rdar://6719156 - clang should emit a better error when blocks are disabled but are used anyway\nby changing blocks from being disabled in the parser to being disabled\nin Sema.\n\nllvm-svn: 67816"},
		[j]={{F,17158,"/// ActOnBlockStmtExpr - This is called when the body of a block statement\n/// literal was successfully completed.  ^(int x){...}\nExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, Stmt *Body, Scope *CurScope) {\n  // If blocks are disabled, emit an error.\n  if (!LangOpts.Blocks)\n    Diag(CaretLoc, diag::err_blocks_disable) << LangOpts.OpenCL;"},{u,5034,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::BlockPointer:\n      // If blocks are disabled, emit an error.\n      if (!LangOpts.Blocks)\n        S.Diag(DeclType.Loc, diag::err_blocks_disable) << LangOpts.OpenCL;"}},
		[l]={
			["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:131:19: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them","clang/test/Sema/exprs.c:133:7: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them"}
		}
	},
	["err_bool_redeclaration"]={
		[c]="err_bool_redeclaration",
		[d]="redeclaration of C++ built-in type \'bool\'",
		[f]="redeclaration of C++ built-in type \'bool\'",
		[b]=k,
		[g]="redeclaration of C\\+\\+ built\\-in type \'bool\'",
		[h]=a,
		[i]=M,
		[e]={"20ee5ae8710a",1289931493,"Emit a specific diagnostic when typedefing C++ bool, mirroring gcc.","Emit a specific diagnostic when typedefing C++ bool, mirroring gcc.\nFixes rdar://8365458\n\nllvm-svn: 119359"},
		[j]={{L,4255,"/// 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    case tok::kw__Bool:\n      // ...\n      if (Tok.is(tok::kw_bool) && DS.getTypeSpecType() != DeclSpec::TST_unspecified && DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        // ...\n        DiagID = diag::err_bool_redeclaration;"},{L,4500,"#include \"clang/Basic/TransformTypeTraits.def\"\n    // ...\n    if (DiagID != diag::err_bool_redeclaration && ConsumedEnd.isInvalid())"}},
		[l]={
			["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:17:14: error: redeclaration of C++ built-in type \'bool\'"}
		}
	},
	["err_bound_member_function"]={
		[c]="err_bound_member_function",
		[d]="reference to non-static member function must be called%select{|; did you mean to call it with no arguments?}0",
		[f]={{nil,nil,{"reference to non-static member function must be called",{a,"; did you mean to call it with no arguments?"}}}},
		[b]=k,
		[g]="reference to non\\-static member function must be called(?:|; did you mean to call it with no arguments\\?)",
		[h]=a,
		[i]=m,
		[e]={"50a2c2c19de5",1318374870,"Catch placeholder types in DefaultLvalueConversion","Catch placeholder types in DefaultLvalueConversion\nand DefaultFunctionArrayLvalueConversion.  To prevent\nsignificant regression for should-this-be-a-call fixits,\nand to repair some such regression from the introduction of\nbound member placeholders, make those placeholder checks\ntry to build calls appropriately.  Harden the build-a-call\nlogic while we\'re at it.\n\nllvm-svn: 141738"},
		[j]={{F,21549,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  // Bound member functions.\n  case BuiltinType::BoundMember: {\n    // ...\n    PartialDiagnostic PD = PDiag(diag::err_bound_member_function);"},{"clang/lib/Sema/SemaOverload.cpp",12958,"// Resolve and fix an overloaded expression that can be resolved\n// because it identifies a single function template specialization.\n//\n// Last three arguments should only be supplied if Complain = true\n//\n// Return true if it was logically possible to so resolve the\n// expression, regardless of whether or not it succeeded.  Always\n// returns true if \'complain\' is set.\nbool Sema::ResolveAndFixSingleFunctionTemplateSpecialization(ExprResult &SrcExpr, bool doFunctionPointerConversion, bool complain, SourceRange OpRangeForComplaining, QualType DestTypeForComplaining, unsigned DiagIDForComplaining) {\n  // ...\n  if (FunctionDecl *fn = ResolveSingleFunctionTemplateSpecialization(ovl.Expression, /*complain*/ false, &found)) {\n    // ...\n    // It is only correct to resolve to an instance method if we\'re\n    // resolving a form that\'s permitted to be a pointer to member.\n    // Otherwise we\'ll end up making a bound member expression, which\n    // is illegal in all the contexts we resolve like this.\n    if (!ovl.HasFormOfMemberPointer && isa<CXXMethodDecl>(fn) && cast<CXXMethodDecl>(fn)->isInstance()) {\n      // ...\n      Diag(ovl.Expression->getExprLoc(), diag::err_bound_member_function) << 0 << ovl.Expression->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/overloaded-name.cpp"]={"clang/test/SemaCXX/overloaded-name.cpp:25:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?","clang/test/SemaCXX/overloaded-name.cpp:27:9: error: reference to non-static member function must be called; did you mean to call it with no arguments?"}
		}
	},
	["err_box_literal_collection"]={
		[c]="err_box_literal_collection",
		[d]="%select{string|character|boolean|numeric}0 literal must be prefixed by \'@\' in a collection",
		[f]={{nil,nil,{{"string","character","boolean","numeric"}," literal must be prefixed by \'@\' in a collection"}}},
		[b]=k,
		[g]="(?:string|character|boolean|numeric) literal must be prefixed by \'@\' in a collection",
		[h]=a,
		[i]=m,
		[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]={{wb,438,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    // If this is potentially an Objective-C numeric literal, add the \'@\'.\n    if (isa<IntegerLiteral>(OrigElement) || isa<CharacterLiteral>(OrigElement) || isa<FloatingLiteral>(OrigElement) || isa<ObjCBoolLiteralExpr>(OrigElement) || isa<CXXBoolLiteralExpr>(OrigElement)) {\n      if (S.NSAPIObj->getNSNumberFactoryMethodKind(OrigElement->getType())) {\n        // ...\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << Which << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"},{wb,454,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    }\n    // If this is potentially an Objective-C string literal, add the \'@\'.\n    else if (StringLiteral *String = dyn_cast<StringLiteral>(OrigElement)) {\n      if (String->isOrdinary()) {\n        S.Diag(OrigElement->getBeginLoc(), diag::err_box_literal_collection) << 0 << OrigElement->getSourceRange() << FixItHint::CreateInsertion(OrigElement->getBeginLoc(), \"@\");"}},
		[l]={
			["clang/test/SemaObjC/objc-array-literal.m"]={"clang/test/SemaObjC/objc-array-literal.m:51:23: error: string literal must be prefixed by \'@\' in a collection"}
		}
	},
	["err_bracket_depth_exceeded"]={
		[c]="err_bracket_depth_exceeded",
		[d]="bracket nesting level exceeded maximum of %0",
		[f]="bracket nesting level exceeded maximum of A",
		[b]="fatal error\\: ",
		[g]="bracket nesting level exceeded maximum of (.*?)",
		[h]=a,
		[i]=M,
		[e]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,","Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,\nto control the check for the C 5.2.4.1 / C++ [implimits] restriction on nesting\nlevels for parentheses, brackets and braces.\n\nSome code with heavy macro use exceeds the default limit of 256, but we don\'t\nwant to increase it generally to avoid stack overflow on stack-constrained\nsystems.\n\nllvm-svn: 175855"},
		[j]={{"clang/lib/Parse/Parser.cpp",2696,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::err_bracket_depth_exceeded) << P.getLangOpts().BracketDepth;"}}
	},
	["err_brackets_go_after_unqualified_id"]={
		[c]="err_brackets_go_after_unqualified_id",
		[d]="brackets are not allowed here; to declare an array, place the brackets after the %select{identifier|name}0",
		[f]={{nil,nil,{"brackets are not allowed here; to declare an array, place the brackets after the ",{"identifier","name"}}}},
		[b]=k,
		[g]="brackets are not allowed here; to declare an array, place the brackets after the (?:identifier|name)",
		[h]=a,
		[i]=M,
		[e]={"f4b81d002965",1403651664,"Provide a better diagnostic when braces are put before the identifier.","Provide a better diagnostic when braces are put before the identifier.\n\nWhen a user types:\n  int [4] foo;\nassume that the user means:\n  int foo[4];\n\nUpdate the information for \'foo\' to prevent additional errors, and provide\na fix-it hint to move the brackets to the correct location.\n\nAdditionally, suggest parens for types that require it, such as:\n  int [4] *foo;\nto:\n  int (*foo)[4];\n\nllvm-svn: 211641"},
		[j]={{L,7725,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  // ...\n  if (NeedParens) {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertion(SuggestParenLoc, \"(\") << FixItHint::CreateInsertion(EndLoc, \")\") << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"},{L,7733,"/// Diagnose brackets before an identifier.\nvoid Parser::ParseMisplacedBracketDeclarator(Declarator &D) {\n  // ...\n  if (NeedParens) {\n  // ...\n  } else {\n    Diag(EndLoc, diag::err_brackets_go_after_unqualified_id) << getLangOpts().CPlusPlus << FixItHint::CreateInsertionFromRange(EndLoc, CharSourceRange(BracketRange, true)) << FixItHint::CreateRemoval(BracketRange);"}},
		[l]={
			["clang/test/Parser/cxx1z-decomposition.cpp"]={"clang/test/Parser/cxx1z-decomposition.cpp:109:16: error: brackets are not allowed here; to declare an array, place the brackets after the name"}
		}
	},
	["err_break_not_in_loop_or_switch"]={
		[c]="err_break_not_in_loop_or_switch",
		[d]="\'break\' statement not in loop or switch statement",
		[f]="\'break\' statement not in loop or switch statement",
		[b]=k,
		[g]="\'break\' statement not in loop or switch statement",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{bb,3349,"StmtResult Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {\n  // ...\n  if (!S) {\n    // ...\n    return StmtError(Diag(BreakLoc, diag::err_break_not_in_loop_or_switch));"}},
		[l]={
			["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:108:8: error: \'break\' statement not in loop or switch statement","clang/test/Sema/block-misc.c:112:8: error: \'break\' statement not in loop or switch statement"}
		}
	},
	["err_btf_type_id_not_const"]={
		[c]={{nil,o,"err_btf_type_id_not_const"}},
		[d]={{nil,o,"__builtin_btf_type_id argument %0 not a constant"}},
		[f]={{nil,o,"__builtin_btf_type_id argument A not a constant"}},
		[b]=k,
		[g]="__builtin_btf_type_id argument (.*?) not a constant",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={Kb,1576908663,Bb,Ib},
		[j]={{A,3514,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n      kind = diag::err_btf_type_id_not_const;"}},
		[l]={
			["clang/test/Sema/builtin-bpf-btf-type-id.c"]={"clang/test/Sema/builtin-bpf-btf-type-id.c:8:59: error: __builtin_btf_type_id argument 2 not a constant"}
		}
	},
	["err_builtin_annotation_first_arg"]={
		[c]="err_builtin_annotation_first_arg",
		[d]="first argument to __builtin_annotation must be an integer",
		[f]="first argument to __builtin_annotation must be an integer",
		[b]=k,
		[g]="first argument to __builtin_annotation must be an integer",
		[h]=a,
		[i]=m,
		[e]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32.","Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, string);\n\nApplying it to i64 (e.g., long long) generates the following IR.\n\n        trunc i64 {{.*}} to i32\n        call i32 @llvm.annotation.i32\n        zext i32 {{.*}} to i64\n\nThe redundant truncation and extension make the result difficult to use.\n\nThis patch makes __builtin_annotation() generic.\n\n        type __builtin_annotation(type, string);\n\nFor the i64 example, it simplifies the generated IR to:\n\n        call i64 @llvm.annotation.i64\n\nPatch by Xi Wang!\n\nllvm-svn: 155764"},
		[j]={{A,198,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!Ty->isIntegerType()) {\n    S.Diag(ValArg->getBeginLoc(), diag::err_builtin_annotation_first_arg) << ValArg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:14:34: error: first argument to __builtin_annotation must be an integer"}
		}
	},
	["err_builtin_annotation_second_arg"]={
		[c]="err_builtin_annotation_second_arg",
		[d]="second argument to __builtin_annotation must be a non-wide string constant",
		[f]="second argument to __builtin_annotation must be a non-wide string constant",
		[b]=k,
		[g]="second argument to __builtin_annotation must be a non\\-wide string constant",
		[h]=a,
		[i]=m,
		[e]={"4a5b4443711e",1335634756,"Currently __builtin_annotation() only annotates an i32.","Currently __builtin_annotation() only annotates an i32.\n\n        i32 __builtin_annotation(i32, string);\n\nApplying it to i64 (e.g., long long) generates the following IR.\n\n        trunc i64 {{.*}} to i32\n        call i32 @llvm.annotation.i32\n        zext i32 {{.*}} to i64\n\nThe redundant truncation and extension make the result difficult to use.\n\nThis patch makes __builtin_annotation() generic.\n\n        type __builtin_annotation(type, string);\n\nFor the i64 example, it simplifies the generated IR to:\n\n        call i64 @llvm.annotation.i64\n\nPatch by Xi Wang!\n\nllvm-svn: 155764"},
		[j]={{A,207,"/// Check that the first argument to __builtin_annotation is an integer\n/// and the second argument is a non-wide string literal.\nstatic bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    S.Diag(StrArg->getBeginLoc(), diag::err_builtin_annotation_second_arg) << StrArg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/annotate.c"]={"clang/test/Sema/annotate.c:11:43: error: second argument to __builtin_annotation must be a non-wide string constant","clang/test/Sema/annotate.c:12:43: error: second argument to __builtin_annotation must be a non-wide string constant"}
		}
	},
	["err_builtin_definition"]={
		[c]="err_builtin_definition",
		[d]="definition of builtin function %0",
		[f]="definition of builtin function A",
		[b]=k,
		[g]="definition of builtin function (.*?)",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{r,15334,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  // Builtin functions cannot be defined.\n  if (unsigned BuiltinID = FD->getBuiltinID()) {\n    if (!Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID) && !Context.BuiltinInfo.isPredefinedRuntimeFunction(BuiltinID)) {\n      Diag(FD->getLocation(), diag::err_builtin_definition) << FD;"}}
	},
	["err_builtin_fn_use"]={
		[c]="err_builtin_fn_use",
		[d]="builtin functions must be directly called",
		[f]="builtin functions must be directly called",
		[b]=k,
		[g]="builtin functions must be directly called",
		[h]=a,
		[i]=m,
		[e]={"34866c7719f8",1346372047,"Change the representation of builtin functions in the AST","Change the representation of builtin functions in the AST\n(__builtin_* etc.) so that it isn\'t possible to take their address.\nSpecifically, introduce a new type to represent a reference to a builtin\nfunction, and a new cast kind to convert it to a function pointer in the\noperand of a call.  Fixes PR13195.\n\nllvm-svn: 162962"},
		[j]={{F,21629,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  case BuiltinType::BuiltinFn: {\n    // ...\n    Diag(E->getBeginLoc(), diag::err_builtin_fn_use);"}},
		[l]={
			["clang/test/Parser/builtin_classify_type.c"]={"clang/test/Parser/builtin_classify_type.c:13:21: error: builtin functions must be directly called"}
		}
	},
	["err_builtin_func_cast_more_than_one_arg"]={
		[c]="err_builtin_func_cast_more_than_one_arg",
		[d]="function-style cast to a builtin type can only take one argument",
		[f]="function-style cast to a builtin type can only take one argument",
		[b]=k,
		[g]="function\\-style cast to a builtin type can only take one argument",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{"clang/lib/Sema/SemaInit.cpp",9814,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForScalar: {\n    // ...\n    if (Kind.isCStyleOrFunctionalCast())\n      S.Diag(Kind.getLocation(), diag::err_builtin_func_cast_more_than_one_arg) << R;"}}
	},
	["err_builtin_invalid_arg_type"]={
		[c]={{nil,v,"err_builtin_invalid_arg_type"}},
		[d]={{nil,v,"%ordinal0 argument must be a %select{vector, integer or floating point type|matrix|pointer to a valid matrix element type|signed integer or floating point type|vector type|floating point type|vector of integers}1 (was %2)"}},
		[f]={{nil,v,{"A argument must be a ",{"vector, integer or floating point type","matrix","pointer to a valid matrix element type","signed integer or floating point type","vector type","floating point type","vector of integers"}," (was C)"}}},
		[b]=k,
		[g]="(.*?) argument must be a (?:vector, integer or floating point type|matrix|pointer to a valid matrix element type|signed integer or floating point type|vector type|floating point type|vector of integers) \\(was (.*?)\\)",
		[h]=a,
		[i]={{nil,v,G}},
		[e]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[j]={{A,2045,"// Check if \\p Ty is a valid type for the elementwise math builtins. If it is\n// not a valid type, emit an error message and return true. Otherwise return\n// false.\nstatic bool checkMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType Ty) {\n  if (!Ty->getAs<VectorType>() && !ConstantMatrixType::isValidElementType(Ty)) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << 1 << /* vector, integer or float ty*/ 0 << Ty;"},{A,2059,"static bool checkFPMathBuiltinElementType(Sema &S, SourceLocation Loc, QualType ArgTy, int ArgIndex) {\n  // ...\n  if (!EltTy->isRealFloatingType()) {\n    return S.Diag(Loc, diag::err_builtin_invalid_arg_type) << ArgIndex << /* vector or float ty*/ 5 << ArgTy;"},{A,2623,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  // __builtin_elementwise_abs restricts the element type to signed integers or\n  // floating point types only.\n  case Builtin::BI__builtin_elementwise_abs: {\n    // ...\n    if (EltTy->isUnsignedIntegerType()) {\n      Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* signed integer or float ty*/ 3 << ArgTy;"},{A,2692,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_elementwise_add_sat:\n  case Builtin::BI__builtin_elementwise_sub_sat: {\n    // ...\n    if (!EltTy->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* integer ty */ 6 << ArgTy;"},{A,2741,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_reduce_max:\n  case Builtin::BI__builtin_reduce_min: {\n    // ...\n    if (!TyA) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector ty*/ 4 << Arg->getType();"},{A,2763,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_reduce_add:\n  case Builtin::BI__builtin_reduce_mul:\n  case Builtin::BI__builtin_reduce_xor:\n  case Builtin::BI__builtin_reduce_or:\n  case Builtin::BI__builtin_reduce_and: {\n    // ...\n    if (!TyA || !TyA->getElementType()->isIntegerType()) {\n      Diag(Arg->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* vector of integers */ 6 << Arg->getType();"},{A,18725,"bool Sema::SemaBuiltinNonDeterministicValue(CallExpr *TheCall) {\n  // ...\n  if (!TyArg->isBuiltinType() && !TyArg->isVectorType())\n    return Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*vector, integer or floating point ty*/ 0 << TyArg;"},{A,18744,"ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!MType) {\n    Diag(Matrix->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /* matrix ty*/ 1 << Matrix->getType();"},{A,18816,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"},{A,18823,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (!ConstantMatrixType::isValidElementType(ElementTy)) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /* pointer to element ty*/ 2 << PtrExpr->getType();"},{A,18924,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!MatrixTy) {\n    Diag(MatrixExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << 1 << /*matrix ty */ 1 << MatrixExpr->getType();"},{A,18944,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n    Diag(PtrExpr->getBeginLoc(), diag::err_builtin_invalid_arg_type) << PtrArgIdx + 1 << /*pointer to element ty*/ 2 << PtrExpr->getType();"}},
		[l]={
			["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:28:49: error: 2nd argument must be a pointer to a valid matrix element type (was \'double4x4\' (aka \'double __attribute__((matrix_type(4, 4)))\'))"}
		}
	},
	["err_builtin_launder_invalid_arg"]={
		[c]={{nil,B,"err_builtin_launder_invalid_arg"}},
		[d]={{nil,B,"%select{non-pointer|function pointer|void pointer}0 argument to \'__builtin_launder\' is not allowed"}},
		[f]={{nil,B,{{"non-pointer","function pointer","void pointer"}," argument to \'__builtin_launder\' is not allowed"}}},
		[b]=k,
		[g]="(?:non\\-pointer|function pointer|void pointer) argument to \'__builtin_launder\' is not allowed",
		[h]=a,
		[i]={{nil,B,G}},
		[e]={"261875054e5e",1544821888,"[Clang] Add __builtin_launder","[Clang] Add __builtin_launder\n\nSummary:\nThis patch adds `__builtin_launder`, which is required to implement `std::launder`. Additionally GCC provides `__builtin_launder`, so thing brings Clang in-line with GCC.\n\nI\'m not exactly sure what magic `__builtin_launder` requires, but  based on previous discussions this patch applies a `@llvm.invariant.group.barrier`. As noted in previous discussions, this may not be enough to correctly handle vtables.\n\nReviewers: rnk, majnemer, rsmith\n\nReviewed By: rsmith\n\nSubscribers: kristina, Romain-Geissler-1A, erichkeane, amharc, jroelofs, cfe-commits, Prazek\n\nDifferential Revision: https://reviews.llvm.org/D40218\n\nllvm-svn: 349195"},
		[j]={{A,1925,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (DiagSelect) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) << *DiagSelect << TheCall->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:269:3: error: non-pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:271:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:272:3: error: void pointer argument to \'__builtin_launder\' is not allowed","clang/test/Sema/builtins.c:276:3: error: function pointer argument to \'__builtin_launder\' is not allowed"}
		}
	},
	["err_builtin_longjmp_invalid_val"]={
		[c]="err_builtin_longjmp_invalid_val",
		[d]="argument to __builtin_longjmp must be a constant 1",
		[f]="argument to __builtin_longjmp must be a constant 1",
		[b]=k,
		[g]="argument to __builtin_longjmp must be a constant 1",
		[h]=a,
		[i]=m,
		[e]={"7903ca0993a4",1241326928,"Add diagnostic for r70658.","Add diagnostic for r70658.\n\nllvm-svn: 70659"},
		[j]={{A,9321,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  // ...\n  if (Result != 1)\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) << SourceRange(Arg->getBeginLoc(), Arg->getEndLoc());"}}
	},
	["err_builtin_longjmp_unsupported"]={
		[c]="err_builtin_longjmp_unsupported",
		[d]="__builtin_longjmp is not supported for the current target",
		[f]="__builtin_longjmp is not supported for the current target",
		[b]=k,
		[g]="__builtin_longjmp is not supported for the current target",
		[h]=a,
		[i]=m,
		[e]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/","Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as requested by John McCall.\n\nllvm-svn: 231986"},
		[j]={{A,9310,"/// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).\n/// This checks that the target supports __builtin_longjmp and\n/// that val is a constant 1.\nbool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
		[l]={
			["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:27:3: error: __builtin_longjmp is not supported for the current target"}
		}
	},
	["err_builtin_matrix_disabled"]={
		[c]={{nil,o,"err_builtin_matrix_disabled"}},
		[d]={{nil,o,"matrix types extension is disabled. Pass -fenable-matrix to enable it"}},
		[f]={{nil,o,"matrix types extension is disabled. Pass -fenable-matrix to enable it"}},
		[b]=k,
		[g]="matrix types extension is disabled\\. Pass \\-fenable\\-matrix to enable it",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={Kb,1576908663,Bb,Ib},
		[j]={{A,18785,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  if (!getLangOpts().MatrixTypes) {\n    Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled);"},{u,8456,"/// HandleMatrixTypeAttr - \"matrix_type\" attribute, like ext_vector_type\nstatic void HandleMatrixTypeAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  if (!S.getLangOpts().MatrixTypes) {\n    S.Diag(Attr.getLoc(), diag::err_builtin_matrix_disabled);"}},
		[l]={
			["clang/test/Parser/matrix-type-disabled.c"]={"clang/test/Parser/matrix-type-disabled.c:9:39: error: matrix types extension is disabled. Pass -fenable-matrix to enable it"}
		}
	},
	["err_builtin_matrix_invalid_dimension"]={
		[c]={{nil,o,"err_builtin_matrix_invalid_dimension"}},
		[d]={{nil,o,"%0 dimension is outside the allowed range [1, %1]"}},
		[f]={{nil,o,"A dimension is outside the allowed range [1, B]"}},
		[b]=k,
		[g]="(.*?) dimension is outside the allowed range \\[1, (.*?)\\]",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={zb,1582847864,Lb,Fb},
		[j]={{A,18775,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  // ...\n  if (!ConstantMatrixType::isDimensionValid(Dim)) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_invalid_dimension) << Name << ConstantMatrixType::getMaxElementsPerDimension();"}},
		[l]={
			["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:67:57: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:69:61: error: column dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:74:7: error: row dimension is outside the allowed range [1, 1048575]","clang/test/Sema/matrix-type-builtins.c:75:7: error: column dimension is outside the allowed range [1, 1048575]"}
		}
	},
	["err_builtin_matrix_pointer_arg_mismatch"]={
		[c]={{nil,o,"err_builtin_matrix_pointer_arg_mismatch"}},
		[d]={{nil,o,"the pointee of the 2nd argument must match the element type of the 1st argument (%0 != %1)"}},
		[f]={{nil,o,"the pointee of the 2nd argument must match the element type of the 1st argument (A != B)"}},
		[b]=k,
		[g]="the pointee of the 2nd argument must match the element type of the 1st argument \\((.*?) \\!\\= (.*?)\\)",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={zb,1582847864,Lb,Fb},
		[j]={{A,18957,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (MatrixTy && !Context.hasSameType(ElementTy, MatrixTy->getElementType())) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_pointer_arg_mismatch) << ElementTy << MatrixTy->getElementType();"}},
		[l]={
			["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:49: error: the pointee of the 2nd argument must match the element type of the 1st argument (\'float\' != \'double\')"}
		}
	},
	["err_builtin_matrix_scalar_unsigned_arg"]={
		[c]={{nil,o,"err_builtin_matrix_scalar_unsigned_arg"}},
		[d]={{nil,o,"%0 argument must be a constant unsigned integer expression"}},
		[f]={{nil,o,"A argument must be a constant unsigned integer expression"}},
		[b]=k,
		[g]="(.*?) argument must be a constant unsigned integer expression",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={zb,1582847864,Lb,Fb},
		[j]={{A,18769,"// Get and verify the matrix dimensions.\nstatic std::optional<unsigned> getAndVerifyMatrixDimension(Expr *Expr, StringRef Name, Sema &S) {\n  // ...\n  if (!Value) {\n    S.Diag(Expr->getBeginLoc(), diag::err_builtin_matrix_scalar_unsigned_arg) << Name;"}},
		[l]={
			["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:81:7: error: column argument must be a constant unsigned integer expression"}
		}
	},
	["err_builtin_matrix_store_to_const"]={
		[c]={{nil,o,"err_builtin_matrix_store_to_const"}},
		[d]={{nil,o,"cannot store matrix to read-only pointer"}},
		[f]={{nil,o,"cannot store matrix to read-only pointer"}},
		[b]=k,
		[g]="cannot store matrix to read\\-only pointer",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={zb,1582847864,Lb,Fb},
		[j]={{A,18950,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (!PtrTy) {\n  // ...\n  } else {\n    // ...\n    if (ElementTy.isConstQualified()) {\n      Diag(PtrExpr->getBeginLoc(), diag::err_builtin_matrix_store_to_const);"}},
		[l]={
			["clang/test/Sema/matrix-type-builtins.c"]={"clang/test/Sema/matrix-type-builtins.c:112:44: error: cannot store matrix to read-only pointer"}
		}
	},
	["err_builtin_matrix_stride_too_small"]={
		[c]={{nil,o,"err_builtin_matrix_stride_too_small"}},
		[d]={{nil,o,"stride must be greater or equal to the number of rows"}},
		[f]={{nil,o,"stride must be greater or equal to the number of rows"}},
		[b]=k,
		[g]="stride must be greater or equal to the number of rows",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={zb,1582847864,Lb,Fb},
		[j]={{A,18884,"ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  if (MaybeRows) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      // ...\n      if (Stride < *MaybeRows) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"},{A,18984,"ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, ExprResult CallResult) {\n  // ...\n  // Check stride argument.\n  if (MatrixTy) {\n    if (std::optional<llvm::APSInt> Value = StrideExpr->getIntegerConstantExpr(Context)) {\n      // ...\n      if (Stride < MatrixTy->getNumRows()) {\n        Diag(StrideExpr->getBeginLoc(), diag::err_builtin_matrix_stride_too_small);"}},
		[l]={
			["clang/test/SemaObjC/matrix-type-builtins.m"]={"clang/test/SemaObjC/matrix-type-builtins.m:24:54: error: stride must be greater or equal to the number of rows"}
		}
	},
	["err_builtin_move_forward_unsupported"]={
		[c]={{nil,C,"err_builtin_move_forward_unsupported"}},
		[d]={{nil,C,"unsupported signature for %q0"}},
		[f]={{nil,C,"unsupported signature for A"}},
		[b]=k,
		[g]="unsupported signature for (.*?)",
		[h]=a,
		[i]={{nil,C,m}},
		[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]={{A,2512,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BIaddressof:\n  case Builtin::BI__addressof:\n  case Builtin::BIforward:\n  case Builtin::BIforward_like:\n  case Builtin::BImove:\n  case Builtin::BImove_if_noexcept:\n  case Builtin::BIas_const: {\n    // ...\n    if (!(Param->isReferenceType() && (ReturnsPointer ? Result->isAnyPointerType() : Result->isReferenceType()) && Context.hasSameUnqualifiedType(Param->getPointeeType(), Result->getPointeeType()))) {\n      Diag(TheCall->getBeginLoc(), diag::err_builtin_move_forward_unsupported) << FDecl;"}},
		[l]={
			["clang/test/SemaCXX/builtin-std-move.cpp"]={"clang/test/SemaCXX/builtin-std-move.cpp:169:21: error: unsupported signature for \'std::move<int>\'"}
		}
	},
	["err_builtin_needs_feature"]={
		[c]="err_builtin_needs_feature",
		[d]="%0 needs target feature %1",
		[f]="A needs target feature B",
		[b]=k,
		[g]="(.*?) needs target feature (.*?)",
		[h]=a,
		[i]={{nil,B,G},{"7.1",nil,m}},
		[e]={"15709991d09d",1444952831,"Add an error when calling a builtin that requires features that don\'t","Add an error when calling a builtin that requires features that don\'t\nmatch the feature set of the function that they\'re being called from.\n\nThis ensures that we can effectively diagnose some[1] code that would\ninstead ICE in the backend with a failure to select message.\n\nExample:\n\n__m128d foo(__m128d a, __m128d b) {\n  return __builtin_ia32_addsubps(b, a);\n}\n\ncompiled for normal x86_64 via:\n\nclang -target x86_64-linux-gnu -c\n\nwould fail to compile in the back end because the normal subtarget\nfeatures for x86_64 only include sse2 and the builtin requires sse3.\n\n[1] We\'re still not erroring on:\n\n__m128i bar(__m128i const *p) { return _mm_lddqu_si128(p); }\n\nwhere we should fail and error on an always_inline function being\ninlined into a function that doesn\'t support the subtarget features\nrequired.\n\nllvm-svn: 250473"},
		[j]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2603,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n  // ...\n  if (BuiltinID) {\n    // ...\n    if (!Builtin::evaluateRequiredTargetFeatures(FeatureList, CallerFeatureMap)) {\n      CGM.getDiags().Report(Loc, diag::err_builtin_needs_feature) << TargetDecl->getDeclName() << FeatureList;"}},
		[l]={
			["clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl"]={"clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:13:15: error: \'__builtin_amdgcn_global_atomic_fadd_v2f16\' needs target feature atomic-buffer-global-pk-add-f16-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:14:13: error: \'__builtin_amdgcn_global_atomic_fadd_f32\' needs target feature atomic-fadd-rtn-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:15:10: error: \'__builtin_amdgcn_global_atomic_fadd_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:16:10: error: \'__builtin_amdgcn_global_atomic_fmax_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:17:10: error: \'__builtin_amdgcn_global_atomic_fmin_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:18:10: error: \'__builtin_amdgcn_flat_atomic_fadd_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:19:10: error: \'__builtin_amdgcn_flat_atomic_fmin_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:20:10: error: \'__builtin_amdgcn_flat_atomic_fmax_f64\' needs target feature gfx90a-insts","clang/test/CodeGenOpenCL/builtins-amdgcn-fp-atomics-gfx908-err.cl:21:3: error: \'__builtin_amdgcn_ds_atomic_fadd_v2f16\' needs target feature atomic-ds-pk-add-16-insts"}
		}
	},
	["err_builtin_operator_new_delete_not_usual"]={
		[c]={{nil,E,"err_builtin_operator_new_delete_not_usual"}},
		[d]={{nil,E,"call to \'%select{__builtin_operator_new|__builtin_operator_delete}0\' selects non-usual %select{allocation|deallocation}0 function"}},
		[f]={{nil,E,{"call to \'",{"__builtin_operator_new","__builtin_operator_delete"},"\' selects non-usual ",{"allocation","deallocation"}," function"}}},
		[b]=k,
		[g]="call to \'(?:__builtin_operator_new|__builtin_operator_delete)\' selects non\\-usual (?:allocation|deallocation) function",
		[h]=a,
		[i]={{nil,E,m}},
		[e]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati...","[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocation functions.\n\nSummary:\nLibc++\'s default allocator uses `__builtin_operator_new` and `__builtin_operator_delete` in order to allow the calls to new/delete to be ellided. However, libc++ now needs to support over-aligned types in the default allocator. In order to support this without disabling the existing optimization Clang needs to support calling the aligned new overloads from the builtins.\n\nSee llvm.org/PR22634 for more information about the libc++ bug.\n\nThis patch changes `__builtin_operator_new`/`__builtin_operator_delete` to call any usual `operator new`/`operator delete` function. It does this by performing overload resolution with the arguments passed to the builtin to determine which allocation function to call. If the selected function is not a usual allocation function a diagnostic is issued.\n\nOne open issue is if the `align_val_t` overloads should be considered \"usual\" when `LangOpts::AlignedAllocation` is disabled.\n\n\nIn order to allow libc++ to detect this new behavior the value for `__has_builtin(__builtin_operator_new)` has been updated to `201802`.\n\nReviewers: rsmith, majnemer, aaron.ballman, erik.pilkington, bogner, ahatanak\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D43047\n\nllvm-svn: 328134"},
		[j]={{D,3859,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Success: {\n    // ...\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(R.getNameLoc(), diag::err_builtin_operator_new_delete_not_usual) << (IsDelete ? 1 : 0) << Range;"}},
		[l]={
			["clang/test/SemaCXX/builtin-operator-new-delete.cpp"]={"clang/test/SemaCXX/builtin-operator-new-delete.cpp:93:13: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:94:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:112:3: error: call to \'__builtin_operator_new\' selects non-usual allocation function","clang/test/SemaCXX/builtin-operator-new-delete.cpp:113:3: error: call to \'__builtin_operator_delete\' selects non-usual deallocation function"}
		}
	},
	["err_builtin_pass_in_regs_non_class"]={
		[c]="err_builtin_pass_in_regs_non_class",
		[d]="argument %0 is not an unqualified class type",
		[f]="argument A is not an unqualified class type",
		[b]=k,
		[g]="argument (.*?) is not an unqualified class type",
		[h]=a,
		[i]=G,
		[e]={ib,1625925174,hb,gb},
		[j]={{D,5393,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n  // ...\n  case UTT_CanPassInRegs:\n    // ...\n    Self.Diag(KeyLoc, diag::err_builtin_pass_in_regs_non_class) << T;"}},
		[l]={
			["clang/test/SemaCXX/type-traits.cpp"]={"clang/test/SemaCXX/type-traits.cpp:3505:9: error: argument \'const A\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3506:9: error: argument \'A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3507:9: error: argument \'A &&\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3508:9: error: argument \'const A &\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3510:9: error: argument \'int\' is not an unqualified class type","clang/test/SemaCXX/type-traits.cpp:3511:9: error: argument \'int &\' is not an unqualified class type"}
		}
	},
	["err_builtin_redeclare"]={
		[c]={{nil,E,"err_builtin_redeclare"}},
		[d]={{nil,E,"cannot redeclare builtin function %0"}},
		[f]={{nil,E,"cannot redeclare builtin function A"}},
		[b]=k,
		[g]="cannot redeclare builtin function (.*?)",
		[h]=a,
		[i]={{nil,E,m}},
		[e]={"41af97137572",1523914208,"Limit types of builtins that can be redeclared.","Limit types of builtins that can be redeclared.\n\nAs reported here: https://bugs.llvm.org/show_bug.cgi?id=37033\nAny usage of a builtin function that uses a va_list by reference\nwill cause an assertion when redeclaring it.\n\nAfter discussion in the review, it was concluded that the correct\nway of accomplishing this fix is to make attempts to redeclare certain\nbuiltins an error. Unfortunately, doing this limitation for all builtins\nis likely a breaking change, so this commit simply limits it to\ntypes with custom type checking and those that take a reference.\n\nTwo tests needed to be updated to make this work.\n\nDifferential Revision: https://reviews.llvm.org/D45383\n\nllvm-svn: 330160"},
		[j]={{r,3678,"/// 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  // Disallow redeclaration of some builtins.\n  if (!getASTContext().canBuiltinBeRedeclared(Old)) {\n    Diag(New->getLocation(), diag::err_builtin_redeclare) << Old->getDeclName();"}},
		[l]={
			["clang/test/Sema/crash-invalid-builtin.c"]={"clang/test/Sema/crash-invalid-builtin.c:4:1: error: cannot redeclare builtin function \'__builtin_isinf\'"}
		}
	},
	["err_builtin_requires_language"]={
		[c]="err_builtin_requires_language",
		[d]="\'%0\' is only available in %1",
		[f]="\'A\' is only available in B",
		[b]=k,
		[g]="\'(.*?)\' is only available in (.*?)",
		[h]=a,
		[i]=m,
		[e]={"760520bcb78d",1401838064,"Add __builtin_operator_new and __builtin_operator_delete, which act like calls","Add __builtin_operator_new and __builtin_operator_delete, which act like calls\nto the normal non-placement ::operator new and ::operator delete, but allow\noptimizations like new-expressions and delete-expressions do.\n\nllvm-svn: 210137"},
		[j]={{D,3902,"ExprResult Sema::SemaBuiltinOperatorNewDeleteOverloaded(ExprResult TheCallResult, bool IsDelete) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language) << (IsDelete ? \"__builtin_operator_delete\" : \"__builtin_operator_new\") << \"C++\";"}},
		[l]={
			["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:216:3: error: \'__builtin_operator_new\' is only available in C++","clang/test/Sema/builtins.c:217:3: error: \'__builtin_operator_delete\' is only available in C++"}
		}
	},
	["err_builtin_setjmp_unsupported"]={
		[c]="err_builtin_setjmp_unsupported",
		[d]="__builtin_setjmp is not supported for the current target",
		[f]="__builtin_setjmp is not supported for the current target",
		[b]=k,
		[g]="__builtin_setjmp is not supported for the current target",
		[h]=a,
		[i]=m,
		[e]={"27173288c296",1426117592,"Under duress, move check for target support of __builtin_setjmp/","Under duress, move check for target support of __builtin_setjmp/\n__builtin_longjmp to Sema as requested by John McCall.\n\nllvm-svn: 231986"},
		[j]={{A,9331,"/// SemaBuiltinSetjmp - Handle __builtin_setjmp(void *env[5]).\n/// This checks that the target supports __builtin_setjmp.\nbool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().hasSjLjLowering())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
		[l]={
			["clang/test/Sema/builtin-longjmp.c"]={"clang/test/Sema/builtin-longjmp.c:33:8: error: __builtin_setjmp is not supported for the current target"}
		}
	},
	["err_builtin_target_unsupported"]={
		[c]={{nil,E,"err_builtin_target_unsupported"}},
		[d]={{nil,E,"builtin is not supported on this target"}},
		[f]={{nil,E,"builtin is not supported on this target"}},
		[b]=k,
		[g]="builtin is not supported on this target",
		[h]=a,
		[i]={{nil,E,m}},
		[e]={"aa46ed927860",1528407544,"[MS] Re-add support for the ARM interlocked bittest intrinscs","[MS] Re-add support for the ARM interlocked bittest intrinscs\n\nAdds support for these intrinsics, which are ARM and ARM64 only:\n  _interlockedbittestandreset_acq\n  _interlockedbittestandreset_rel\n  _interlockedbittestandreset_nf\n  _interlockedbittestandset_acq\n  _interlockedbittestandset_rel\n  _interlockedbittestandset_nf\n\nRefactor the bittest intrinsic handling to decompose each intrinsic into\nits action, its width, and its atomicity.\n\nllvm-svn: 334239"},
		[j]={{A,1962,"// Emit an error and return true if the current object format type is in the\n// list of unsupported types.\nstatic bool CheckBuiltinTargetNotInUnsupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ObjectFormatType> UnsupportedObjectFormatTypes) {\n  // ...\n  if (llvm::is_contained(UnsupportedObjectFormatTypes, CurObjFormat)) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{A,1978,"// Emit an error and return true if the current architecture is not in the list\n// of supported architectures.\nstatic bool CheckBuiltinTargetInSupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, ArrayRef<llvm::Triple::ArchType> SupportedArchs) {\n  // ...\n  S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << TheCall->getSourceRange();"},{A,8577,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n  if (!Context.getTargetInfo().checkArithmeticFenceSupported())\n    return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc());"}},
		[l]={
			["clang/test/Sema/builtin_set_flt_rounds.c"]={"clang/test/Sema/builtin_set_flt_rounds.c:5:3: error: builtin is not supported on this target"}
		}
	},
	["err_builtin_x64_aarch64_only"]={
		[c]={{nil,S,"err_builtin_x64_aarch64_only"}},
		[d]={{nil,S,"this builtin is only available on x86-64 and aarch64 targets"}},
		[f]={{nil,S,"this builtin is only available on x86-64 and aarch64 targets"}},
		[b]=k,
		[g]="this builtin is only available on x86\\-64 and aarch64 targets",
		[h]=a,
		[i]={{nil,S,m}},
		[e]={"022e782e7576",1500324585,"[AArch64] Add support for __builtin_ms_va_list on aarch64","[AArch64] Add support for __builtin_ms_va_list on aarch64\n\nMove builtins from the x86 specific scope into the global\nscope. Their use is still limited to x86_64 and aarch64 though.\n\nThis allows wine on aarch64 to properly handle variadic functions.\n\nDifferential Revision: https://reviews.llvm.org/D34475\n\nllvm-svn: 308218"},
		[j]={{A,8059,"/// 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 (IsMSVAStart)\n    return S.Diag(Fn->getBeginLoc(), diag::err_builtin_x64_aarch64_only);"}},
		[l]={
			["clang/test/Sema/varargs-x86-32.c"]={"clang/test/Sema/varargs-x86-32.c:4:3: error: this builtin is only available on x86-64 and aarch64 targets"}
		}
	},
	["err_c11_noreturn_misplaced"]={
		[c]="err_c11_noreturn_misplaced",
		[d]="\'_Noreturn\' keyword must precede function declarator",
		[f]="\'_Noreturn\' keyword must precede function declarator",
		[b]=k,
		[g]="\'_Noreturn\' keyword must precede function declarator",
		[h]=a,
		[i]=M,
		[e]={"99c464c3f377",1415653832,"Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when...","Improve diagnostics if _Noreturn is placed after a function declarator. (This sometimes happens when a macro is used that expands to either the GNU noreturn attribute or _Noreturn.)\n\nllvm-svn: 221630"},
		[j]={{L,2155,"/// ParseDeclGroup - Having concluded that this is either a function\n/// definition or a group of object declarations, actually parse the\n/// result.\nParser::DeclGroupPtrTy Parser::ParseDeclGroup(ParsingDeclSpec &DS, DeclaratorContext Context, ParsedAttributes &Attrs, SourceLocation *DeclEnd, ForRangeInit *FRI) {\n  // ...\n  if (D.isFunctionDeclarator()) {\n    // ...\n    // The _Noreturn keyword can\'t appear here, unlike the GNU noreturn\n    // attribute. If we find the keyword here, tell the user to put it\n    // at the start instead.\n    if (Tok.is(tok::kw__Noreturn)) {\n      // ...\n      Diag(Loc, diag::err_c11_noreturn_misplaced) << (Fixit ? FixItHint::CreateRemoval(Loc) : FixItHint()) << (Fixit ? FixItHint::CreateInsertion(D.getBeginLoc(), \"_Noreturn \") : FixItHint());"}},
		[l]={
			["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:7:13: error: \'_Noreturn\' keyword must precede function declarator"}
		}
	},
	["err_c99_array_usage_cxx"]={
		[c]="err_c99_array_usage_cxx",
		[d]="%select{qualifier in |static |}0array size %select{||\'[*] \'}0is a C99 feature, not permitted in C++",
		[f]={{nil,nil,{{"qualifier in ","static ",a},"array size ",{a,a,"\'[*] \'"},"is a C99 feature, not permitted in C++"}}},
		[b]=k,
		[g]="(?:qualifier in |static |)array size (?:||\'\\[\\*\\] \')is a C99 feature, not permitted in C\\+\\+",
		[h]=a,
		[i]=m,
		[e]={"73341c4e6319",1252628338,"Diagnose VLAs as an error in C++.","Diagnose VLAs as an error in C++.\n\nAlso, treat the GNU __null as an integral constant expression to match\nGCC\'s behavior.\n\nllvm-svn: 81490"},
		[j]={{u,2680,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  // If this is not C99, diagnose array size modifiers on non-VLAs.\n  if (!getLangOpts().C99 && !T->isVariableArrayType() && (ASM != ArrayType::Normal || Quals != 0)) {\n    Diag(Loc, getLangOpts().CPlusPlus ? diag::err_c99_array_usage_cxx : diag::ext_c99_array_usage) << ASM;"}},
		[l]={
			["clang/test/SemaCXX/attr-gnu.cpp"]={"clang/test/SemaCXX/attr-gnu.cpp:13:13: error: static array size is a C99 feature, not permitted in C++"}
		}
	},
	["err_call_function_incomplete_return"]={
		[c]="err_call_function_incomplete_return",
		[d]="calling %0 with incomplete return type %1",
		[f]="calling A with incomplete return type B",
		[b]=k,
		[g]="calling (.*?) with incomplete return type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"7f84ed928721",1255132315,"Add CheckCallReturnType and start using it for regular call expressions. This will improve error mes...","Add CheckCallReturnType and start using it for regular call expressions. This will improve error messages. For \n\nstruct B;\n\nB f();\n\nvoid g() {\nf();\n}\n\nWe now get\n\nt.cpp:6:3: error: calling \'f\' with incomplete return type \'struct B\'\n  f();\n  ^~~\nt.cpp:3:3: note: \'f\' declared here\nB f();\n  ^\nt.cpp:1:8: note: forward declaration of \'struct B\'\nstruct B;\n       ^\n\nllvm-svn: 83692"},
		[j]={{F,20821,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  // ...\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      // ...\n      S.Diag(Loc, diag::err_call_function_incomplete_return) << CE->getSourceRange() << FD << T;"}},
		[l]={
			["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:10:3: error: calling \'a\' with incomplete return type \'struct foo\'"}
		}
	},
	["err_call_incomplete_argument"]={
		[c]="err_call_incomplete_argument",
		[d]="argument type %0 is incomplete",
		[f]="argument type A is incomplete",
		[b]=k,
		[g]="argument type (.*?) is incomplete",
		[h]=a,
		[i]=m,
		[e]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete.","Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485"},
		[j]={{F,1092,"/// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but\n/// will create a trap if the resulting type is not a POD type.\nExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, FunctionDecl *FDecl) {\n  // ...\n  if (!getLangOpts().CPlusPlus && RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_call_incomplete_argument))"},{F,6655,"bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, FunctionDecl *FDecl, const FunctionProtoType *Proto, unsigned FirstParam, ArrayRef<Expr *> Args, SmallVectorImpl<Expr *> &AllArgs, VariadicCallType CallType, bool AllowExplicit, bool IsListInitialization) {\n  // ...\n  // Continue to check argument types (even if we have too few/many args).\n  for (unsigned i = FirstParam; i < NumParams; i++) {\n    // ...\n    if (ArgIx < Args.size()) {\n      // ...\n      if (RequireCompleteType(Arg->getBeginLoc(), ProtoArgType, diag::err_call_incomplete_argument, Arg))"},{F,7594,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // ...\n  if (Proto) {\n  // ...\n  } else {\n    // ...\n    // Promote the arguments (C99 6.5.2.2p6).\n    for (unsigned i = 0, e = Args.size(); i != e; i++) {\n      // ...\n      if (RequireCompleteType(Arg->getBeginLoc(), Arg->getType(), diag::err_call_incomplete_argument, Arg))"},{wb,1861,"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  for (unsigned i = 0; i < NumNamedArgs; i++) {\n    // ...\n    if (RequireCompleteType(argExpr->getSourceRange().getBegin(), paramType, diag::err_call_incomplete_argument, argExpr))"},{"clang/lib/Sema/SemaInit.cpp",6837,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  // ...\n  if (IsExtraneousCopy) {\n    // ...\n    // Instantiate the default arguments of any extra parameters in\n    // the selected copy constructor, as if we were going to create a\n    // proper call to the copy constructor.\n    for (unsigned I = 1, N = Constructor->getNumParams(); I != N; ++I) {\n      // ...\n      if (S.RequireCompleteType(Loc, Parm->getType(), diag::err_call_incomplete_argument))"}},
		[l]={
			["clang/test/Sema/incomplete-call.c"]={"clang/test/Sema/incomplete-call.c:11:5: error: argument type \'struct foo\' is incomplete","clang/test/Sema/incomplete-call.c:12:5: error: argument type \'struct foo\' is incomplete"}
		}
	},
	["err_call_incomplete_return"]={
		[c]="err_call_incomplete_return",
		[d]="calling function with incomplete return type %0",
		[f]="calling function with incomplete return type A",
		[b]=k,
		[g]="calling function with incomplete return type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"3164fb15e286",1237759250,"Check that the return/argument types of calls are complete.","Check that the return/argument types of calls are complete.\n\nllvm-svn: 67485"},
		[j]={{F,20819,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  // ...\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      if (!FD) {\n        S.Diag(Loc, diag::err_call_incomplete_return) << T << CE->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/incomplete-call.cpp"]={"clang/test/SemaCXX/incomplete-call.cpp:23:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:24:3: error: calling function with incomplete return type \'A\'","clang/test/SemaCXX/incomplete-call.cpp:41:7: error: calling function with incomplete return type \'A\'"}
		}
	},
	["err_callback_attribute_argument_unknown"]={
		[c]={{nil,n,"err_callback_attribute_argument_unknown"}},
		[d]={{nil,n,"\'callback\' attribute argument %0 is not a known function parameter"}},
		[f]={{nil,n,"\'callback\' attribute argument A is not a known function parameter"}},
		[b]=k,
		[g]="\'callback\' attribute argument (.*?) is not a known function parameter",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4084,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (AL.isArgIdent(I)) {\n      // ...\n      if (It == UnknownName) {\n        S.Diag(AL.getLoc(), diag::err_callback_attribute_argument_unknown) << IdLoc->Ident << IdLoc->Loc;"}},
		[l]={
			[Eb]={"clang/test/Sema/attr-callback-broken.c:42:16: error: \'callback\' attribute argument \'cb\' is not a known function parameter","clang/test/Sema/attr-callback-broken.c:43:16: error: \'callback\' attribute argument \'ab\' is not a known function parameter"}
		}
	},
	["err_callback_attribute_invalid_callee"]={
		[c]={{nil,n,"err_callback_attribute_invalid_callee"}},
		[d]={{nil,n,"\'callback\' attribute specifies invalid callback callee"}},
		[f]={{nil,n,"\'callback\' attribute specifies invalid callback callee"}},
		[b]=k,
		[g]="\'callback\' attribute specifies invalid callback callee",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4133,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check if the callee index is proper, thus not \"this\" and not \"unknown\".\n  // This means the \"CalleeIdx\" has to be non-negative if \"HasImplicitThisParam\"\n  // is false and positive if \"HasImplicitThisParam\" is true.\n  if (CalleeIdx < (int)HasImplicitThisParam) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_invalid_callee) << AL.getRange();"}},
		[l]={
			[Eb]={"clang/test/Sema/attr-callback-broken.c:13:16: error: \'callback\' attribute specifies invalid callback callee","clang/test/Sema/attr-callback-broken.c:53:16: error: \'callback\' attribute specifies invalid callback callee"}
		}
	},
	["err_callback_attribute_multiple"]={
		[c]={{nil,n,"err_callback_attribute_multiple"}},
		[d]={{nil,n,"multiple \'callback\' attributes specified"}},
		[f]={{nil,n,"multiple \'callback\' attributes specified"}},
		[b]=k,
		[g]="multiple \'callback\' attributes specified",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4180,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Do not allow multiple callback attributes.\n  if (D->hasAttr<CallbackAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_multiple) << AL.getRange();"}},
		[l]={
			[Eb]={"clang/test/Sema/attr-callback-broken.c:20:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:21:45: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:55:52: error: multiple \'callback\' attributes specified","clang/test/Sema/attr-callback-broken.c:56:45: error: multiple \'callback\' attributes specified"}
		}
	},
	["err_callback_attribute_no_callee"]={
		[c]={{nil,n,"err_callback_attribute_no_callee"}},
		[d]={{nil,n,"\'callback\' attribute specifies no callback callee"}},
		[f]={{nil,n,"\'callback\' attribute specifies no callback callee"}},
		[b]=k,
		[g]="\'callback\' attribute specifies no callback callee",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4053,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // The index that identifies the callback callee is mandatory.\n  if (AL.getNumArgs() == 0) {\n    S.Diag(AL.getLoc(), diag::err_callback_attribute_no_callee) << AL.getRange();"}},
		[l]={
			[Eb]={"clang/test/Sema/attr-callback-broken.c:3:16: error: \'callback\' attribute specifies no callback callee"}
		}
	},
	["err_callback_callee_is_variadic"]={
		[c]={{nil,n,"err_callback_callee_is_variadic"}},
		[d]={{nil,n,"\'callback\' attribute callee may not be variadic"}},
		[f]={{nil,n,"\'callback\' attribute callee may not be variadic"}},
		[b]=k,
		[g]="\'callback\' attribute callee may not be variadic",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4174,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (CalleeFnProtoType->isVariadic()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_is_variadic) << AL.getRange();"}},
		[l]={
			[Eb]={"clang/test/Sema/attr-callback-broken.c:33:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:34:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:68:16: error: \'callback\' attribute callee may not be variadic","clang/test/Sema/attr-callback-broken.c:69:16: error: \'callback\' attribute callee may not be variadic"}
		}
	},
	["err_callback_callee_no_function_type"]={
		[c]={{nil,n,"err_callback_callee_no_function_type"}},
		[d]={{nil,n,"\'callback\' attribute callee does not have function type"}},
		[f]={{nil,n,"\'callback\' attribute callee does not have function type"}},
		[b]=k,
		[g]="\'callback\' attribute callee does not have function type",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4144,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!CalleeType || !CalleeType->isFunctionPointerType()) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"},{q,4156,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!CalleeFnProtoType) {\n    S.Diag(AL.getLoc(), diag::err_callback_callee_no_function_type) << AL.getRange();"}}
	},
	["err_callback_implicit_this_not_available"]={
		[c]={{nil,n,"err_callback_implicit_this_not_available"}},
		[d]={{nil,n,"\'callback\' argument at position %0 references unavailable implicit \'this\'"}},
		[f]={{nil,n,"\'callback\' argument at position A references unavailable implicit \'this\'"}},
		[b]=k,
		[g]="\'callback\' argument at position (.*?) references unavailable implicit \'this\'",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={pb,1547876214,ob,nb},
		[j]={{q,4115,"/// Handle __attribute__((callback(CalleeIdx, PayloadIdx0, ...))) attributes.\nstatic void handleCallbackAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned I = 0, E = AL.getNumArgs(); I < E; ++I) {\n    // ...\n    if (ArgIdx == 0 && !HasImplicitThisParam) {\n      S.Diag(AL.getLoc(), diag::err_callback_implicit_this_not_available) << (I + 1) << SR;"}},
		[l]={
			[Eb]={"clang/test/Sema/attr-callback-broken.c:26:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:27:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:28:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:61:16: error: \'callback\' argument at position 1 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:62:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'","clang/test/Sema/attr-callback-broken.c:63:16: error: \'callback\' argument at position 2 references unavailable implicit \'this\'"}
		}
	},
	["err_called_once_attribute_wrong_type"]={
		[c]={{nil,H,"err_called_once_attribute_wrong_type"}},
		[d]={{nil,H,"\'called_once\' attribute only applies to function-like parameters"}},
		[f]={{nil,H,"\'called_once\' attribute only applies to function-like parameters"}},
		[b]=k,
		[g]="\'called_once\' attribute only applies to function\\-like parameters",
		[h]=a,
		[i]={{nil,H,m}},
		[e]={Cb,1590001902,Hb,Jb},
		[j]={{q,4201,"/// Handle \'called_once\' attribute.\nstatic void handleCalledOnceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isFunctionLike(*T)) {\n    S.Diag(AL.getLoc(), diag::err_called_once_attribute_wrong_type);"}},
		[l]={
			["clang/test/SemaObjC/attr-called-once.m"]={"clang/test/SemaObjC/attr-called-once.m:5:18: error: \'called_once\' attribute only applies to function-like parameters","clang/test/SemaObjC/attr-called-once.m:6:21: error: \'called_once\' attribute only applies to function-like parameters"}
		}
	},
	["err_cannot_find_suitable_accessor"]={
		[c]="err_cannot_find_suitable_accessor",
		[d]="cannot find suitable %select{getter|setter}0 for property %1",
		[f]={{nil,nil,{"cannot find suitable ",{"getter","setter"}," for property B"}}},
		[b]=k,
		[g]="cannot find suitable (?:getter|setter) for property (.*?)",
		[h]=a,
		[i]=m,
		[e]={ic,1480718311,hc,gc},
		[j]={{"clang/lib/Sema/SemaPseudoObject.cpp",1487,"ExprResult MSPropertyOpBuilder::buildGet() {\n  // ...\n  if (GetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 0 /* getter */"},{"clang/lib/Sema/SemaPseudoObject.cpp",1516,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  // ...\n  if (SetterExpr.isInvalid()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_cannot_find_suitable_accessor) << 1 /* setter */"}},
		[l]={
			["clang/test/SemaCXX/MicrosoftExtensions.cpp"]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:276:14: error: cannot find suitable getter for property \'V4\'","clang/test/SemaCXX/MicrosoftExtensions.cpp:277:6: error: cannot find suitable setter for property \'V3\'"}
		}
	},
	["err_cannot_form_pointer_to_member_of_reference_type"]={
		[c]="err_cannot_form_pointer_to_member_of_reference_type",
		[d]="cannot form a pointer-to-member to member %0 of reference type %1",
		[f]="cannot form a pointer-to-member to member A of reference type B",
		[b]=k,
		[g]="cannot form a pointer\\-to\\-member to member (.*?) of reference type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"0b675f5ad5b6",1247089558,"It\'s not allowed to form member pointers to members that have reference type. Add a test for this an...","It\'s not allowed to form member pointers to members that have reference type. Add a test for this and the rest of [dcl.mptr]p3.\n\nllvm-svn: 75054"},
		[j]={{F,15062,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  // ...\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  // ...\n  } else if (isa<ObjCSelectorExpr>(op)) {\n  // ...\n  } else if (lval == Expr::LV_MemberFunction) {\n  // ...\n  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n  // ...\n  } else if (op->getObjectKind() == OK_BitField) { // C99 6.5.3.2p1\n  // ...\n  } else if (op->getObjectKind() == OK_VectorComponent) {\n  // ...\n  } else if (op->getObjectKind() == OK_MatrixComponent) {\n  // ...\n  } else if (dcl) { // C99 6.5.3.2p1\n    // We have an lvalue with a decl. Make sure the decl is not declared\n    // with the register storage-class specifier.\n    if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) {\n    // ...\n    } else if (isa<MSPropertyDecl>(dcl)) {\n    // ...\n    } else if (isa<FunctionTemplateDecl>(dcl)) {\n    // ...\n    } else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) {\n      // Okay: we can take the address of a field.\n      // Could be a pointer to member, though, if there is an explicit\n      // scope qualifier for the class.\n      if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) {\n        // ...\n        if (Ctx && Ctx->isRecord()) {\n          if (dcl->getType()->isReferenceType()) {\n            Diag(OpLoc, diag::err_cannot_form_pointer_to_member_of_reference_type) << dcl->getDeclName() << dcl->getType();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:22:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:12:6: error: cannot form a pointer-to-member to member \'i\' of reference type \'int &\'"}
		}
	},
	["err_cannot_open_file"]={
		[c]="err_cannot_open_file",
		[d]="cannot open file \'%0\': %1",
		[f]="cannot open file \'A\': B",
		[b]="fatal error\\: ",
		[g]="cannot open file \'(.*?)\'\\: (.*?)",
		[h]=a,
		[i]=G,
		[e]={"802b77601e50",1268693692,"Introduce a new BufferResult class to act as the return type of","Introduce a new BufferResult class to act as the return type of\nSourceManager\'s getBuffer() (and similar) operations. This abstract\ncan be used to force callers to cope with errors in getBuffer(), such\nas missing files and changed files. Fix a bunch of callers to use the\nnew interface.\n\nAdd some very basic checks for file consistency (file size,\nmodification time) into ContentCache::getBuffer(), although these\nchecks don\'t help much until we\'ve updated the main callers (e.g.,\nSourceManager::getSpelling()).\n\nllvm-svn: 98585"},
		[j]={{"clang/lib/Basic/SourceManager.cpp",127,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // ...\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n      Diag.SetDelayedDiagnostic(diag::err_cannot_open_file, ContentsEntry->getName(), BufferOrError.getError().message());"},{"clang/lib/Basic/SourceManager.cpp",131,"std::optional<llvm::MemoryBufferRef> ContentCache::getBufferOrNone(DiagnosticsEngine &Diag, FileManager &FM, SourceLocation Loc) const {\n  // ...\n  // If we were unable to open the file, then we are in an inconsistent\n  // situation where the content cache referenced a file which no longer\n  // exists. Most likely, we were using a stat cache with an invalid entry but\n  // the file could also have been removed during processing. Since we can\'t\n  // really deal with this situation, just create an empty buffer.\n  if (!BufferOrError) {\n    if (Diag.isDiagnosticInFlight())\n    // ...\n    else\n      Diag.Report(Loc, diag::err_cannot_open_file) << ContentsEntry->getName() << BufferOrError.getError().message();"},{"clang/lib/CodeGen/CGCUDANV.cpp",735,"/// Creates a global constructor function for the module:\n///\n/// For CUDA:\n/// \\code\n/// void __cuda_module_ctor() {\n///     Handle = __cudaRegisterFatBinary(GpuBinaryBlob);\n///     __cuda_register_globals(Handle);\n/// }\n/// \\endcode\n///\n/// For HIP:\n/// \\code\n/// void __hip_module_ctor() {\n///     if (__hip_gpubin_handle == 0) {\n///         __hip_gpubin_handle  = __hipRegisterFatBinary(GpuBinaryBlob);\n///         __hip_register_globals(__hip_gpubin_handle);\n///     }\n/// }\n/// \\endcode\nllvm::Function *CGNVCUDARuntime::makeModuleCtorFunction() {\n  // ...\n  if (!CudaGpuBinaryFileName.empty()) {\n    // ...\n    if (std::error_code EC = CudaGpuBinaryOrErr.getError()) {\n      CGM.getDiags().Report(diag::err_cannot_open_file) << CudaGpuBinaryFileName << EC.message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",95,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"},{"clang/lib/CodeGen/CodeGenAction.cpp",1005,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  // ...\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    // ...\n    if (!BCBuf) {\n      CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << BCBuf.getError().message();"},{"clang/lib/CodeGen/CodeGenAction.cpp",1015,"bool CodeGenAction::loadLinkModules(CompilerInstance &CI) {\n  // ...\n  for (const CodeGenOptions::BitcodeFileToLink &F : CI.getCodeGenOpts().LinkBitcodeFiles) {\n    // ...\n    if (!ModuleOrErr) {\n      handleAllErrors(ModuleOrErr.takeError(), [&](ErrorInfoBase &EIB) { CI.getDiagnostics().Report(diag::err_cannot_open_file) << F.Filename << EIB.message(); });"},{"clang/lib/CodeGen/CodeGenModule.cpp",7440,"void CodeGenModule::printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const {\n  // ...\n  // If the CUID is not specified we try to generate a unique postfix.\n  if (getLangOpts().CUID.empty()) {\n    // ...\n    if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID)) {\n      // ...\n      if (auto EC = llvm::sys::fs::getUniqueID(PLoc.getFilename(), ID))\n        SM.getDiagnostics().Report(diag::err_cannot_open_file) << PLoc.getFilename() << EC.message();"},{"clang/lib/Lex/HeaderSearch.cpp",432,"OptionalFileEntryRef HeaderSearch::getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc, const DirectoryEntry *Dir, bool IsSystemHeaderDir, Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule, bool OpenFile /*=true*/, bool CacheFailures /*=true*/) {\n  // ...\n  if (!File) {\n    // ...\n    if (EC != llvm::errc::no_such_file_or_directory && EC != llvm::errc::invalid_argument && EC != llvm::errc::is_a_directory && EC != llvm::errc::not_a_directory) {\n      Diags.Report(IncludeLoc, diag::err_cannot_open_file) << FileName << EC.message();"},{"clang/unittests/Basic/DiagnosticTest.cpp",45,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  // ...\n  {\n    // ...\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",70,"// Check that FatalsAsError works as intended\nTEST(DiagnosticTest, fatalsAsError) {\n  for (unsigned FatalsAsError = 0; FatalsAsError != 2; ++FatalsAsError) {\n    // ...\n    Diags.Report(diag::err_cannot_open_file) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",117,"TEST(DiagnosticTest, diagnosticError) {\n  // ...\n  llvm::Expected<std::pair<int, int>> Value = DiagnosticError::create(SourceLocation(), PartialDiagnostic(diag::err_cannot_open_file, Alloc) << \"file\""},{"clang/unittests/Basic/DiagnosticTest.cpp",126,"TEST(DiagnosticTest, diagnosticError) {\n  // ...\n  EXPECT_EQ(ErrDiag->second.getDiagID(), diag::err_cannot_open_file);"}},
		[l]={
			["clang/test/CodeGenCUDA/texture.cu"]={"fatal error: cannot open file \'build/tools/clang/test/CodeGenCUDA/Output/texture.cu.tmp\': No such file or directory"}
		}
	},
	["err_cannot_pass_non_trivial_c_struct_to_vararg"]={
		[c]={{nil,E,"err_cannot_pass_non_trivial_c_struct_to_vararg"}},
		[d]={{nil,E,"cannot pass non-trivial C object of type %0 by value to variadic %select{function|block|method|constructor}1"}},
		[f]={{nil,E,{"cannot pass non-trivial C object of type A by value to variadic ",{N,dc,ec,V}}}},
		[b]=k,
		[g]="cannot pass non\\-trivial C object of type (.*?) by value to variadic (?:function|block|method|constructor)",
		[h]=a,
		[i]={{nil,E,m}},
		[e]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C","[ObjC] Allow declaring __strong pointer fields in structs in Objective-C\nARC mode.\n\nDeclaring __strong pointer fields in structs was not allowed in\nObjective-C ARC until now because that would make the struct non-trivial\nto default-initialize, copy/move, and destroy, which is not something C\nwas designed to do. This patch lifts that restriction.\n\nSpecial functions for non-trivial C structs are synthesized that are\nneeded to default-initialize, copy/move, and destroy the structs and\nmanage the ownership of the objects the __strong pointer fields point\nto. Non-trivial structs passed to functions are destructed in the callee\nfunction.\n\nrdar://problem/33599681\n\nDifferential Revision: https://reviews.llvm.org/D41228\n\nllvm-svn: 326307"},
		[j]={{F,1020,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_non_trivial_c_struct_to_vararg) << Ty << CT;"}},
		[l]={
			["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:11:24: error: cannot pass non-trivial C object of type \'Strong\' by value to variadic function"}
		}
	},
	["err_cannot_pass_objc_interface_to_vararg"]={
		[c]="err_cannot_pass_objc_interface_to_vararg",
		[d]="cannot pass object with interface type %0 by value through variadic %select{function|block|method|constructor}1",
		[f]={{nil,nil,{"cannot pass object with interface type A by value through variadic ",{N,dc,ec,V}}}},
		[b]=k,
		[g]="cannot pass object with interface type (.*?) by value through variadic (?:function|block|method|constructor)",
		[h]=a,
		[i]=m,
		[e]={"a8a7d0f37161",1239523880,"implement rdar://6780761, making sema reject some code that otherwise","implement rdar://6780761, making sema reject some code that otherwise\ncrashes codegen.\n\nllvm-svn: 68891"},
		[j]={{F,1024,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    // ...\n    else if (Ty->isObjCObjectType())\n      DiagRuntimeBehavior(E->getBeginLoc(), nullptr, PDiag(diag::err_cannot_pass_objc_interface_to_vararg) << Ty << CT);"}},
		[l]={
			["clang/test/SemaObjC/method-bad-param.m"]={"clang/test/SemaObjC/method-bad-param.m:35:9: error: cannot pass object with interface type \'foo\' by value through variadic function"}
		}
	},
	["err_cannot_pass_objc_interface_to_vararg_format"]={
		[c]="err_cannot_pass_objc_interface_to_vararg_format",
		[d]="cannot pass object with interface type %1 by value to variadic %select{function|block|method|constructor}2; expected type from format string was %3",
		[f]={{nil,nil,{"cannot pass object with interface type B by value to variadic ",{N,dc,ec,V},"; expected type from format string was D"}}},
		[b]=k,
		[g]="cannot pass object with interface type (.*?) by value to variadic (?:function|block|method|constructor); expected type from format string was (.*?)",
		[h]=a,
		[i]=m,
		[e]={"3e0ec58c09eb",1342721423,"For varargs, diagnose passing ObjC objects by value like other non-POD types.","For varargs, diagnose passing ObjC objects by value like other non-POD types.\n\nWhile we still want to consider this a hard error (non-POD variadic args are\nnormally a DefaultError warning), delaying the diagnostic allows us to give\nbetter error messages, which also match the usual non-POD errors more closely.\n\nIn addition, this change improves the diagnostic messages for format string\nargument type mismatches by passing down the type of the callee, so we can\nsay \"variadic method\" or \"variadic function\" appropriately.\n\n<rdar://problem/11825593>\n\nllvm-svn: 160517"},
		[j]={{A,11399,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      // ...\n      else if (ExprTy->isObjCObjectType())\n        EmitFormatDiagnostic(S.PDiag(diag::err_cannot_pass_objc_interface_to_vararg_format) << S.getLangOpts().CPlusPlus11 << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << CSR << E->getSourceRange(), E->getBeginLoc(), /*IsStringLocation*/ false, CSR);"}},
		[l]={
			["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:262:26: error: cannot pass object with interface type \'Foo\' by value to variadic function; expected type from format string was \'int\'","clang/test/SemaObjC/format-strings-objc.m:266:20: error: cannot pass object with interface type \'Foo\' by value to variadic method; expected type from format string was \'int\'"}
		}
	},
	["err_cannot_pass_to_vararg"]={
		[c]="err_cannot_pass_to_vararg",
		[d]="cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2",
		[f]={{nil,nil,{"cannot pass ",{"expression of type B","initializer list"}," to variadic ",{N,dc,ec,V}}}},
		[b]=k,
		[g]="cannot pass (?:expression of type (.*?)|initializer list) to variadic (?:function|block|method|constructor)",
		[h]=a,
		[i]=m,
		[e]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg","Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'void\' and it can\'t be an initializer list. We give a\nhard error for these rather than treating them as undefined behavior (we can\nand probably should do the same for non-POD types in C++11, but as of this\nchange we don\'t).\n\nSlightly rework the checking of variadic arguments in a function with a format\nattribute to ensure that certain kinds of format string problem (non-literal\nstring, too many/too few arguments, ...) don\'t suppress this error.\n\nllvm-svn: 187735"},
		[j]={{F,1027,"void Sema::checkVariadicArgument(const Expr *E, VariadicCallType CT) {\n  // ...\n  case VAK_Invalid:\n    if (Ty.isDestructedType() == QualType::DK_nontrivial_c_struct)\n    // ...\n    else if (Ty->isObjCObjectType())\n    // ...\n    else\n      Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg) << isa<InitListExpr>(E) << Ty << CT;"}},
		[l]={
			["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:34:13: error: cannot pass initializer list to variadic function"}
		}
	},
	["err_cannot_pass_to_vararg_format"]={
		[c]="err_cannot_pass_to_vararg_format",
		[d]="cannot pass %select{expression of type %1|initializer list}0 to variadic %select{function|block|method|constructor}2; expected type from format string was %3",
		[f]={{nil,nil,{"cannot pass ",{"expression of type B","initializer list"}," to variadic ",{N,dc,ec,V},"; expected type from format string was D"}}},
		[b]=k,
		[g]="cannot pass (?:expression of type (.*?)|initializer list) to variadic (?:function|block|method|constructor); expected type from format string was (.*?)",
		[h]=a,
		[i]=m,
		[e]={"d7293d7fcb60",1375728583,"Implement C++\'s restrictions on the type of an expression passed to a vararg","Implement C++\'s restrictions on the type of an expression passed to a vararg\nfunction: it can\'t be \'void\' and it can\'t be an initializer list. We give a\nhard error for these rather than treating them as undefined behavior (we can\nand probably should do the same for non-POD types in C++11, but as of this\nchange we don\'t).\n\nSlightly rework the checking of variadic arguments in a function with a format\nattribute to ensure that certain kinds of format string problem (non-literal\nstring, too many/too few arguments, ...) don\'t suppress this error.\n\nllvm-svn: 187735"},
		[j]={{A,11407,"bool CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS, const char *StartSpecifier, unsigned SpecifierLen, const Expr *E) {\n  // ...\n  if (Success) {\n  // ...\n  } else {\n    // ...\n    case Sema::VAK_Invalid:\n      if (CallType == Sema::VariadicDoesNotApply)\n      // ...\n      else if (ExprTy->isObjCObjectType())\n      // ...\n      else\n        // ...\n        S.Diag(E->getBeginLoc(), diag::err_cannot_pass_to_vararg_format) << isa<InitListExpr>(E) << ExprTy << CallType << AT.getRepresentativeTypeName(S.Context) << E->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:32:27: error: cannot pass initializer list to variadic function; expected type from format string was \'int\'","clang/test/SemaCXX/format-strings-0x.cpp:33:22: error: cannot pass expression of type \'void\' to variadic function; expected type from format string was \'int\'"}
		}
	},
	["err_capture_bad_target"]={
		[c]={{nil,o,"err_capture_bad_target"}},
		[d]={{nil,o,"capture host variable %0 by reference in device or host device lambda function"}},
		[f]={{nil,o,"capture host variable A by reference in device or host device lambda function"}},
		[b]=k,
		[g]="capture host variable (.*?) by reference in device or host device lambda function",
		[h]=a,
		[i]={{nil,o,m}},
		[e]={zb,1582847864,Lb,Fb},
		[j]={{"clang/lib/Sema/SemaCUDA.cpp",883,"// Check the wrong-sided reference capture of lambda for CUDA/HIP.\n// A lambda function may capture a stack variable by reference when it is\n// defined and uses the capture by reference when the lambda is called. When\n// the capture and use happen on different sides, the capture is invalid and\n// should be diagnosed.\nvoid Sema::CUDACheckLambdaCapture(CXXMethodDecl *Callee, const sema::Capture &Capture) {\n  // ...\n  if (Capture.isVariableCapture()) {\n    SemaDiagnosticBuilder(DiagKind, Capture.getLocation(), diag::err_capture_bad_target, Callee, *this) << Capture.getVariable();"}},
		[l]={
			["clang/test/SemaCUDA/device-use-host-var.cu"]={"clang/test/SemaCUDA/device-use-host-var.cu:207:4: error: capture host variable \'out\' by reference in device or host device lambda function","clang/test/SemaCUDA/device-use-host-var.cu:215:10: error: capture host variable \'ref_host_var\' by reference in device or host device lambda function"}
		}
	},
	["err_capture_binding_openmp"]={
		[c]={{nil,I,"err_capture_binding_openmp"}},
		[d]={{nil,I,"capturing a structured binding is not yet supported in OpenMP"}},
		[f]={{nil,I,"capturing a structured binding is not yet supported in OpenMP"}},
		[b]=k,
		[g]="capturing a structured binding is not yet supported in OpenMP",
		[h]=a,
		[i]={{nil,I,m}},
		[e]={ib,1625925174,hb,gb},
		[j]={{F,19347,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_capture_binding_openmp) << Var;"}},
		[l]={
			["clang/test/SemaCXX/decomposition-openmp.cpp"]={"clang/test/SemaCXX/decomposition-openmp.cpp:8:15: error: capturing a structured binding is not yet supported in OpenMP","clang/test/SemaCXX/decomposition-openmp.cpp:10:16: error: capturing a structured binding is not yet supported in OpenMP"}
		}
	},
	["err_capture_block_variable"]={
		[c]="err_capture_block_variable",
		[d]="__block variable %0 cannot be captured in a %select{lambda expression|captured statement}1",
		[f]={{nil,nil,{"__block variable A cannot be captured in a ",{"lambda expression","captured statement"}}}},
		[b]=k,
		[g]="__block variable (.*?) cannot be captured in a (?:lambda expression|captured statement)",
		[h]=a,
		[i]=m,
		[e]={"3b4c30b7e77e",1368127031,"CodeGen for CapturedStmts","CodeGen for CapturedStmts\n\nEmitCapturedStmt creates a captured struct containing all of the captured\nvariables, and then emits a call to the outlined function.  This is similar in\nprinciple to EmitBlockLiteral.\n\nGenerateCapturedFunction actually produces the outlined function.  It is based\non GenerateBlockFunction, but is much simpler.  The function type is determined\nby the parameters that are in the CapturedDecl.\n\nSome changes have been added to this patch that were reviewed as part of the\nserialization patch and moving the parameters to the captured decl.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D640\n\nllvm-svn: 181536"},
		[j]={{F,19189,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n  // Lambdas and captured statements are not allowed to capture __block\n  // variables; they don\'t support the expected semantics.\n  if (HasBlocksAttr && (IsLambda || isa<CapturedRegionScopeInfo>(CSI))) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_capture_block_variable) << Var << !IsLambda;"}},
		[l]={
			["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:58:7: error: __block variable \'x\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:70:7: error: __block variable \'a\' cannot be captured in a captured statement","clang/test/Sema/captured-statements.c:80:11: error: __block variable \'a\' cannot be captured in a captured statement"}
		}
	},
	["err_capture_default_first"]={
		[c]={{nil,H,"err_capture_default_first"}},
		[d]={{nil,H,"capture default must be first"}},
		[f]={{nil,H,"capture default must be first"}},
		[b]=k,
		[g]="capture default must be first",
		[h]=a,
		[i]={{nil,H,M}},
		[e]={"ee05167cc42b",1594102083,"[OpenMP] Allow traits for the OpenMP context selector `isa`","[OpenMP] Allow traits for the OpenMP context selector `isa`\n\nIt was unclear what `isa` was supposed to mean so we did not provide any\ntraits for this context selector. With this patch we will allow *any*\nstring or identifier. We use the target attribute and target info to\ndetermine if the trait matches. In other words, we will check if the\nprovided value is a target feature that is available (at the call site).\n\nFixes PR46338\n\nReviewed By: ABataev\n\nDifferential Revision: https://reviews.llvm.org/D83281"},
		[j]={{"clang/lib/Parse/ParseExprCXX.cpp",945,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///         the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  // ...\n  while (Tok.isNot(tok::r_square)) {\n    // ...\n    if (Tok.is(tok::star)) {\n    // ...\n    } else if (Tok.is(tok::kw_this)) {\n    // ...\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n      // ...\n      return Invalid([&] { Diag(Tok.getLocation(), diag::err_capture_default_first); });"}},
		[l]={
			["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:11:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:12:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:22:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:23:7: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:30:13: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:35:20: error: capture default must be first","clang/test/Parser/lambda-misplaced-capture-default.cpp:36:20: error: capture default must be first"}
		}
	},
	["err_capture_default_non_local"]={
		[c]="err_capture_default_non_local",
		[d]="non-local lambda expression cannot have a capture-default",
		[f]="non-local lambda expression cannot have a capture-default",
		[b]=k,
		[g]="non\\-local lambda expression cannot have a capture\\-default",
		[h]=a,
		[i]=m,
		[e]={"3d584b0ced40",1391723348,"PR18128: a lambda capture-default is not permitted for a non-local lambda","PR18128: a lambda capture-default is not permitted for a non-local lambda\nexpression.\n\nllvm-svn: 200948"},
		[j]={{lb,1247,"void Sema::ActOnLambdaClosureQualifiers(LambdaIntroducer &Intro, SourceLocation MutableLoc) {\n  // ...\n  // C++11 [expr.prim.lambda]p9:\n  //   A lambda-expression whose smallest enclosing scope is a block scope is a\n  //   local lambda expression; any other lambda expression shall not have a\n  //   capture-default or simple-capture in its lambda-introducer.\n  //\n  // For simple-captures, this is covered by the check below that any named\n  // entity is a variable that can be captured.\n  //\n  // For DR1632, we also allow a capture-default in any context where we can\n  // odr-use \'this\' (in particular, in a default initializer for a non-static\n  // data member).\n  if (Intro.Default != LCD_None && !LSI->Lambda->getParent()->isFunctionOrMethod() &&\n    // ...\n    Diag(Intro.DefaultLoc, diag::err_capture_default_non_local);"}},
		[l]={
			["clang/test/SemaCXX/lambda-expressions.cpp"]={"clang/test/SemaCXX/lambda-expressions.cpp:330:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:365:13: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:369:29: error: non-local lambda expression cannot have a capture-default","clang/test/SemaCXX/lambda-expressions.cpp:373:21: error: non-local lambda expression cannot have a capture-default"}
		}
	},
	["err_capture_does_not_name_variable"]={
		[c]="err_capture_does_not_name_variable",
		[d]="%0 in capture list does not name a variable",
		[f]="A in capture list does not name a variable",
		[b]=k,
		[g]="(.*?) in capture list does not name a variable",
		[h]=a,
		[i]="Lambda Issue",
		[e]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related to lambdas) is heavily based off of John Freeman\'s work-in-progress patches.\n\nllvm-svn: 147706"},
		[j]={{lb,1157,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    // C++11 [expr.prim.lambda]p10:\n    //   [...] each such lookup shall find a variable with automatic storage\n    //   duration declared in the reaching scope of the local lambda expression.\n    // Note that the \'reaching scope\' check happens in tryCaptureVariable().\n    if (!Var) {\n      Diag(C->Loc, diag::err_capture_does_not_name_variable) << C->Id;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:20:13: error: \'Overload\' in capture list does not name a variable"}
		}
	},
	["err_capture_more_than_once"]={
		[c]="err_capture_more_than_once",
		[d]="%0 can appear only once in a capture list",
		[f]="A can appear only once in a capture list",
		[b]=k,
		[g]="(.*?) can appear only once in a capture list",
		[h]=a,
		[i]="Lambda Issue",
		[e]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related to lambdas) is heavily based off of John Freeman\'s work-in-progress patches.\n\nllvm-svn: 147706"},
		[j]={{lb,1029,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // ...\n      // C++11 [expr.prim.lambda]p8:\n      //   An identifier or this shall not appear more than once in a\n      //   lambda-capture.\n      if (LSI->isCXXThisCaptured()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << \"\'this\'\" << SourceRange(LSI->getCXXThisCapture().getLocation()) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{lb,1168,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    // C++11 [expr.prim.lambda]p8:\n    //   An identifier or this shall not appear more than once in a\n    //   lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id << It->second->getBeginLoc() << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"},{lb,1175,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    // C++11 [expr.prim.lambda]p8:\n    //   An identifier or this shall not appear more than once in a\n    //   lambda-capture.\n    if (auto [It, Inserted] = CaptureNames.insert(std::pair{C->Id, Var}); !Inserted) {\n      if (C->InitKind == LambdaCaptureInitKind::NoInit && !Var->isInitCapture()) {\n      // ...\n      } else\n        // ...\n        Diag(C->Loc, diag::err_capture_more_than_once) << C->Id;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:7:17: error: \'foo\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:8:18: error: \'this\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:28:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:29:16: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:30:13: error: \'i\' can appear only once in a capture list","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:31:16: error: \'i\' can appear only once in a capture list"}
		}
	},
	["err_capture_non_automatic_variable"]={
		[c]="err_capture_non_automatic_variable",
		[d]="%0 cannot be captured because it does not have automatic storage duration",
		[f]="A cannot be captured because it does not have automatic storage duration",
		[b]=k,
		[g]="(.*?) cannot be captured because it does not have automatic storage duration",
		[h]=a,
		[i]="Lambda Issue",
		[e]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related to lambdas) is heavily based off of John Freeman\'s work-in-progress patches.\n\nllvm-svn: 147706"},
		[j]={{lb,1186,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (!Underlying->hasLocalStorage()) {\n      Diag(C->Loc, diag::err_capture_non_automatic_variable) << C->Id;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:21:13: error: \'GlobalVar\' cannot be captured because it does not have automatic storage duration","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p10.cpp:34:16: error: \'local_static\' cannot be captured because it does not have automatic storage duration"}
		}
	},
	["err_capture_of_abstract_type"]={
		[c]="err_capture_of_abstract_type",
		[d]="by-copy capture of value of abstract type %0",
		[f]="by-copy capture of value of abstract type A",
		[b]=k,
		[g]="by\\-copy capture of value of abstract type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"71fe0e8a832b",1381465521,"Diagnose by-copy captures of abstract classes.","Diagnose by-copy captures of abstract classes.\n\nFixes <rdar://problem/14468891>.\n\nllvm-svn: 192419"},
		[j]={{F,19480,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      // ...\n      else if (S.RequireNonAbstractType(Loc, CaptureType, diag::err_capture_of_abstract_type))"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:100:6: error: by-copy capture of value of abstract type \'X\'"}
		}
	},
	["err_capture_of_incomplete_or_sizeless_type"]={
		[c]={{nil,o,"err_capture_of_incomplete_or_sizeless_type"}},
		[d]={{nil,o,"by-copy capture of variable %0 with %select{incomplete|sizeless}1 type %2"}},
		[f]={{nil,o,{"by-copy capture of variable A with ",{"incomplete","sizeless"}," type C"}}},
		[b]=k,
		[g]="by\\-copy capture of variable (.*?) with (?:incomplete|sizeless) type (.*?)",
		[h]=a,
		[i]={{nil,o,m}},
		[e]={Kb,1576908663,Bb,Ib},
		[j]={{F,19411,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // ...\n  // Compute the type of the field that will capture this variable.\n  if (ByRef) {\n  // ...\n  } else {\n    // ...\n    // Make sure that by-copy captures are of a complete and non-abstract type.\n    if (!Invalid && BuildAndDiagnose) {\n      if (!CaptureType->isDependentType() && S.RequireCompleteSizedType(Loc, CaptureType, diag::err_capture_of_incomplete_or_sizeless_type, Var->getDeclName()))"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp:108:19: error: by-copy capture of variable \'param\' with incomplete type \'const X\'"}
		}
	},
	["err_carries_dependency_missing_on_first_decl"]={
		[c]="err_carries_dependency_missing_on_first_decl",
		[d]="%select{function|parameter}0 declared \'[[carries_dependency]]\' after its first declaration",
		[f]={{nil,nil,{{N,"parameter"}," declared \'[[carries_dependency]]\' after its first declaration"}}},
		[b]=k,
		[g]="(?:function|parameter) declared \'\\[\\[carries_dependency\\]\\]\' after its first declaration",
		[h]=a,
		[i]=m,
		[e]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.","Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new flag to determine whether a ParmVarDecl is\nactually a parameter of a function declaration (as opposed to a function\ntypedef etc, where the attribute is prohibited). Weirdly, this attribute (just\nlike [[noreturn]]) cannot be applied to a function type, just to a function\ndeclaration (and its parameters).\n\nllvm-svn: 173726"},
		[j]={{r,3341,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  // ...\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 1 /*Param*/;"},{r,4055,"/// 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 (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(CDA->getLocation(), diag::err_carries_dependency_missing_on_first_decl) << 0 /*Function*/;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:4:3: error: function declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:5:15: error: parameter declared \'[[carries_dependency]]\' after its first declaration","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:9:3: error: function declared \'[[carries_dependency]]\' after its first declaration"}
		}
	},
	["err_carries_dependency_param_not_function_decl"]={
		[c]="err_carries_dependency_param_not_function_decl",
		[d]="\'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda",
		[f]="\'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda",
		[b]=k,
		[g]="\'\\[\\[carries_dependency\\]\\]\' attribute only allowed on parameter in a function declaration or lambda",
		[h]=a,
		[i]=m,
		[e]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.","Finish semantic analysis for [[carries_dependency]] attribute.\n\nThis required plumbing through a new flag to determine whether a ParmVarDecl is\nactually a parameter of a function declaration (as opposed to a function\ntypedef etc, where the attribute is prohibited). Weirdly, this attribute (just\nlike [[noreturn]]) cannot be applied to a function type, just to a function\ndeclaration (and its parameters).\n\nllvm-svn: 173726"},
		[j]={{q,2322,"static void handleDependencyAttr(Sema &S, Scope *Scope, Decl *D, const ParsedAttr &AL) {\n  if (isa<ParmVarDecl>(D)) {\n    // [[carries_dependency]] can only be applied to a parameter if it is a\n    // parameter of a function declaration or lambda.\n    if (!(Scope->getFlags() & clang::Scope::FunctionDeclarationScope)) {\n      S.Diag(AL.getLoc(), diag::err_carries_dependency_param_not_function_decl);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:13:19: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:15:26: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:16:25: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:17:23: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:20:20: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p1.cpp:25:24: error: \'[[carries_dependency]]\' attribute only allowed on parameter in a function declaration or lambda"}
		}
	},
	["err_case_not_in_switch"]={
		[c]="err_case_not_in_switch",
		[d]="\'case\' statement not in switch statement",
		[f]="\'case\' statement not in switch statement",
		[b]=k,
		[g]="\'case\' statement not in switch statement",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{bb,521,"StmtResult Sema::ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHSVal, SourceLocation DotDotDotLoc, ExprResult RHSVal, SourceLocation ColonLoc) {\n  // ...\n  if (getCurFunction()->SwitchStack.empty()) {\n    Diag(CaseLoc, diag::err_case_not_in_switch);"}},
		[l]={
			["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:101:6: error: \'case\' statement not in switch statement"}
		}
	},
	["err_cast_from_randomized_struct"]={
		[c]={{nil,C,"err_cast_from_randomized_struct"}},
		[d]={{nil,C,"casting from randomized structure pointer type %0 to %1"}},
		[f]={{nil,C,"casting from randomized structure pointer type A to B"}},
		[b]=k,
		[g]="casting from randomized structure pointer type (.*?) to (.*?)",
		[h]=a,
		[i]={{nil,C,G}},
		[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]={{s,3235,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (isa<PointerType>(SrcType) && isa<PointerType>(DestType)) {\n    // ...\n    if (SrcRD && DestRD && SrcRD->hasAttr<RandomizeLayoutAttr>() && SrcRD != DestRD) {\n      // ...\n      Self.Diag(OpRange.getBegin(), diag::err_cast_from_randomized_struct) << SrcType << DestType;"}}
	},
	["err_cast_pointer_from_non_pointer_int"]={
		[c]="err_cast_pointer_from_non_pointer_int",
		[d]="operand of type %0 cannot be cast to a pointer type",
		[f]="operand of type A cannot be cast to a pointer type",
		[b]=k,
		[g]="operand of type (.*?) cannot be cast to a pointer type",
		[h]=a,
		[i]=m,
		[e]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers ","PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like types.\n\nllvm-svn: 70531"},
		[j]={{s,3144,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n    if (!SrcType->isIntegralType(Self.Context) && SrcType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_pointer_from_non_pointer_int) << SrcType << SrcExpr.get()->getSourceRange();"}},
		[l]={
			["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:16:14: error: operand of type \'double\' cannot be cast to a pointer type"}
		}
	},
	["err_cast_pointer_to_non_pointer_int"]={
		[c]="err_cast_pointer_to_non_pointer_int",
		[d]="pointer cannot be cast to type %0",
		[f]="pointer cannot be cast to type A",
		[b]=k,
		[g]="pointer cannot be cast to type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"f4e3ad6500ca",1241144638,"PR4013 and PR4105: pointer-like types can only be cast to/from integers ","PR4013 and PR4105: pointer-like types can only be cast to/from integers \nand other pointer-like types.\n\nllvm-svn: 70531"},
		[j]={{s,3155,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // If either type is a pointer, the other type has to be either an\n  // integer or a pointer.\n  if (!DestType->isArithmeticType()) {\n  // ...\n  } else if (!SrcType->isArithmeticType()) {\n    if (!DestType->isIntegralType(Self.Context) && DestType->isArithmeticType()) {\n      Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_cast_pointer_to_non_pointer_int) << DestType << SrcExpr.get()->getSourceRange();"}},
		[l]={
			["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:15:15: error: pointer cannot be cast to type \'double\'"}
		}
	},
	["err_cast_selector_expr"]={
		[c]="err_cast_selector_expr",
		[d]="cannot type cast @selector expression",
		[f]="cannot type cast @selector expression",
		[b]=k,
		[g]="cannot type cast @selector expression",
		[h]=a,
		[i]=m,
		[e]={"88fead8c4821",1243028572,"Cannot type cast @selector expressions.","Cannot type cast @selector expressions.\n\nllvm-svn: 72284"},
		[j]={{s,3134,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (isa<ObjCSelectorExpr>(SrcExpr.get())) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_cast_selector_expr);"}},
		[l]={
			["clang/test/SemaObjC/selector-error.m"]={"clang/test/SemaObjC/selector-error.m:16:14: error: cannot type cast @selector expression","clang/test/SemaObjC/selector-error.m:17:17: error: cannot type cast @selector expression"}
		}
	},
	["err_catch_incomplete"]={
		[c]="err_catch_incomplete",
		[d]="cannot catch incomplete type %0",
		[f]="cannot catch incomplete type A",
		[b]=k,
		[g]="cannot catch incomplete type (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,16634,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  unsigned DK = diag::err_catch_incomplete;"}},
		[l]={
			["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:15:16: error: cannot catch incomplete type \'void\'","clang/test/SemaCXX/exceptions.cpp:16:13: error: cannot catch incomplete type \'A\'"}
		}
	},
	["err_catch_incomplete_ptr"]={
		[c]="err_catch_incomplete_ptr",
		[d]="cannot catch pointer to incomplete type %0",
		[f]="cannot catch pointer to incomplete type A",
		[b]=k,
		[g]="cannot catch pointer to incomplete type (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,16638,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    // ...\n    DK = diag::err_catch_incomplete_ptr;"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-function-1.cpp"]={"clang/test/SemaTemplate/instantiate-function-1.cpp:197:16: error: cannot catch pointer to incomplete type \'Incomplete\'"}
		}
	},
	["err_catch_incomplete_ref"]={
		[c]="err_catch_incomplete_ref",
		[d]="cannot catch reference to incomplete type %0",
		[f]="cannot catch reference to incomplete type A",
		[b]=k,
		[g]="cannot catch reference to incomplete type (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,16643,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *Ref = BaseType->getAs<ReferenceType>()) {\n    // ...\n    DK = diag::err_catch_incomplete_ref;"}},
		[l]={
			["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:18:14: error: cannot catch reference to incomplete type \'A\'"}
		}
	},
	["err_catch_param_not_objc_type"]={
		[c]="err_catch_param_not_objc_type",
		[d]="@catch parameter is not a pointer to an interface type",
		[f]="@catch parameter is not a pointer to an interface type",
		[b]=k,
		[g]="@catch parameter is not a pointer to an interface type",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{Z,5168,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ...\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n  // ...\n  } else if (T->isObjCQualifiedIdType()) {\n  // ...\n  } else if (T->isObjCIdType()) {\n  // ...\n  } else if (!T->isObjCObjectPointerType()) {\n    // ...\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"},{Z,5171,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n  // ...\n  // An @catch parameter must be an unqualified object pointer type;\n  // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n  if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n  // ...\n  } else if (T->isObjCQualifiedIdType()) {\n  // ...\n  } else if (T->isObjCIdType()) {\n  // ...\n  } else if (!T->isObjCObjectPointerType()) {\n  // ...\n  } else if (!T->castAs<ObjCObjectPointerType>()->getInterfaceType()) {\n    // ...\n    Diag(IdLoc, diag::err_catch_param_not_objc_type);"}},
		[l]={
			["clang/test/SemaObjC/catch-invalid.m"]={"clang/test/SemaObjC/catch-invalid.m:7:19: error: @catch parameter is not a pointer to an interface type"}
		}
	},
	["err_catch_rvalue_ref"]={
		[c]="err_catch_rvalue_ref",
		[d]="cannot catch exceptions by rvalue reference",
		[f]="cannot catch exceptions by rvalue reference",
		[b]=k,
		[g]="cannot catch exceptions by rvalue reference",
		[h]=a,
		[i]=m,
		[e]={"b28b40712121",1237765767,"Disallow catching exceptions by rvalue reference.","Disallow catching exceptions by rvalue reference.\n\nllvm-svn: 67492"},
		[j]={{w,16623,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  // C++ 15.3p1: The exception-declaration shall not denote an incomplete type.\n  // The exception-declaration shall not denote a pointer or reference to an\n  // incomplete type, other than [cv] void*.\n  // N2844 forbids rvalue references.\n  if (!ExDeclType->isDependentType() && ExDeclType->isRValueReferenceType()) {\n    Diag(Loc, diag::err_catch_rvalue_ref);"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-try-catch.cpp"]={"clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference","clang/test/SemaTemplate/instantiate-try-catch.cpp:6:17: error: cannot catch exceptions by rvalue reference"}
		}
	},
	["err_catch_sizeless"]={
		[c]={{nil,o,"err_catch_sizeless"}},
		[d]={{nil,o,"cannot catch %select{|reference to }0sizeless type %1"}},
		[f]={{nil,o,{"cannot catch ",{a,"reference to "},"sizeless type B"}}},
		[b]=k,
		[g]="cannot catch (?:|reference to )sizeless type (.*?)",
		[h]=a,
		[i]={{nil,o,m}},
		[e]={Kb,1576908663,Bb,Ib},
		[j]={{w,16655,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  if (!Invalid && Mode != 1 && BaseType->isSizelessType()) {\n    Diag(Loc, diag::err_catch_sizeless) << (Mode == 2 ? 1 : 0) << BaseType;"}},
		[l]={
			["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:368:20: error: cannot catch sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/SemaCXX/sizeless-1.cpp:374:22: error: cannot catch reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
		}
	},
	["err_catch_variably_modified"]={
		[c]="err_catch_variably_modified",
		[d]="cannot catch variably modified type %0",
		[f]="cannot catch variably modified type A",
		[b]=k,
		[g]="cannot catch variably modified type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"e56d1a0d5000",1465401907,"[Sema] Don\'t permit catching variably modified types","[Sema] Don\'t permit catching variably modified types\n\nVariably modified types shouldn\'t be permitted in catch clauses.\n\nThis fixes PR28047.\n\nllvm-svn: 272159"},
		[j]={{w,16628,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  if (ExDeclType->isVariablyModifiedType()) {\n    Diag(Loc, diag::err_catch_variably_modified) << ExDeclType;"}},
		[l]={
			["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:281:17: error: cannot catch variably modified type \'int (*)[i]\'","clang/test/SemaCXX/exceptions.cpp:287:17: error: cannot catch variably modified type \'int (*)[i]\'"}
		}
	},
	["err_category_forward_interface"]={
		[c]="err_category_forward_interface",
		[d]="cannot define %select{category|class extension}0 for undefined class %1",
		[f]={{nil,nil,{"cannot define ",{"category","class extension"}," for undefined class B"}}},
		[b]=k,
		[g]="cannot define (?:category|class extension) for undefined class (.*?)",
		[h]=a,
		[i]=m,
		[e]={"4123a86faebb",1321308601,"Use Sema::RequireCompleteType to check for the completeness of","Use Sema::RequireCompleteType to check for the completeness of\nObjective-C classes. This has two purposes: to consistently provide\n\"forward declaration here\" notes when we hit an incomplete type, and\nto give LLDB a chance to complete the type.\n\nRequireCompleteType bits from Sean Callanan!\n\nllvm-svn: 144573"},
		[j]={{Z,1833,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {"}},
		[l]={
			["clang/test/SemaObjC/category-1.m"]={"clang/test/SemaObjC/category-1.m:37:12: error: cannot define category for undefined class \'MyClass2\'"}
		}
	},
	["err_category_property"]={
		[c]="err_category_property",
		[d]="property declared in category %0 cannot be implemented in class implementation",
		[f]="property declared in category A cannot be implemented in class implementation",
		[b]=k,
		[g]="property declared in category (.*?) cannot be implemented in class implementation",
		[h]=a,
		[i]=m,
		[e]={ic,1480718311,hc,gc},
		[j]={{Mb,1134,"/// 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    if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(property->getDeclContext())) {\n      if (!CD->IsClassExtension()) {\n        Diag(PropertyLoc, diag::err_category_property) << CD->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/property-category-4.m"]={"clang/test/SemaObjC/property-category-4.m:15:13: error: property declared in category \'CAT\' cannot be implemented in class implementation","clang/test/SemaObjC/property-category-4.m:16:10: error: property declared in category \'CAT\' cannot be implemented in class implementation"}
		}
	},
	["err_cc1_round_trip_fail_then_ok"]={
		[c]={{nil,t,"err_cc1_round_trip_fail_then_ok"}},
		[d]={{nil,v,"original arguments parse failed, then succeeded in round-trip"},{t,t,"Original arguments parse failed, then succeeded in round-trip"}},
		[f]={{nil,v,"original arguments parse failed, then succeeded in round-trip"},{t,t,"Original arguments parse failed, then succeeded in round-trip"}},
		[b]=k,
		[g]="original arguments parse failed, then succeeded in round\\-trip",
		[h]=a,
		[i]={{nil,t,G}},
		[e]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
		[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",727,"#endif\n  // ...\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    // ...\n    Diags.Report(diag::err_cc1_round_trip_fail_then_ok);"}}
	},
	["err_cc1_round_trip_mismatch"]={
		[c]={{nil,t,"err_cc1_round_trip_mismatch"}},
		[d]={{nil,v,"generated arguments do not match in round-trip"},{t,t,"Generated arguments do not match in round-trip"}},
		[f]={{nil,v,"generated arguments do not match in round-trip"},{t,t,"Generated arguments do not match in round-trip"}},
		[b]=k,
		[g]="generated arguments do not match in round\\-trip",
		[h]=a,
		[i]={{nil,t,G}},
		[e]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
		[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",783,"#endif\n  // ...\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::err_cc1_round_trip_mismatch);"}}
	},
	["err_cc1_round_trip_ok_then_fail"]={
		[c]={{nil,t,"err_cc1_round_trip_ok_then_fail"}},
		[d]={{nil,v,"generated arguments parse failed in round-trip"},{t,t,"Generated arguments parse failed in round-trip"}},
		[f]={{nil,v,"generated arguments parse failed in round-trip"},{t,t,"Generated arguments parse failed in round-trip"}},
		[b]=k,
		[g]="generated arguments parse failed in round\\-trip",
		[h]=a,
		[i]={{nil,t,G}},
		[e]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
		[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",755,"#endif\n  // ...\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::err_cc1_round_trip_ok_then_fail);"}}
	},
	["err_cc1_unbounded_vscale_min"]={
		[c]={{nil,v,"err_cc1_unbounded_vscale_min"}},
		[d]={{nil,v,"minimum vscale must be an unsigned integer greater than 0"}},
		[f]={{nil,v,"minimum vscale must be an unsigned integer greater than 0"}},
		[b]=k,
		[g]="minimum vscale must be an unsigned integer greater than 0",
		[h]=a,
		[i]={{nil,v,G}},
		[e]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.","[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
		[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4053,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Error if -mvscale-min is unbounded.\n  if (Arg *A = Args.getLastArg(options::OPT_mvscale_min_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).getAsInteger(10, VScaleMin) || VScaleMin == 0)\n      Diags.Report(diag::err_cc1_unbounded_vscale_min);"}}
	},
	["err_cconv_change"]={
		[c]="err_cconv_change",
		[d]="function declared \'%0\' here was previously declared %select{\'%2\'|without calling convention}1",
		[f]={{nil,nil,{"function declared \'A\' here was previously declared ",{"\'C\'","without calling convention"}}}},
		[b]=k,
		[g]="function declared \'(.*?)\' here was previously declared (?:\'(.*?)\'|without calling convention)",
		[h]=a,
		[i]=m,
		[e]={"ab26cfa58de5",1265405516,"Standardize the parsing of function type attributes in a way that","Standardize the parsing of function type attributes in a way that\nfollows (as conservatively as possible) gcc\'s current behavior:  attributes\nwritten on return types that don\'t apply there are applied to the function\ninstead, etc.  Only parse CC attributes as type attributes, not as decl attributes;\ndon\'t accepet noreturn as a decl attribute on ValueDecls, either (it still\nneeds to apply to other decls, like blocks).  Consistently consume CC/noreturn\ninformation throughout codegen;  enforce this by removing their default values\nin CodeGenTypes::getFunctionInfo().\n\nllvm-svn: 95436"},
		[j]={{r,3809,"/// 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 (OldTypeInfo.getCC() != NewTypeInfo.getCC()) {\n    // ...\n    if (!NewCCExplicit) {\n    // ...\n    } else if (Old->getBuiltinID()) {\n    // ...\n    } else {\n      // ...\n      Diag(New->getLocation(), diag::err_cconv_change) << FunctionType::getNameForCallConv(NewTypeInfo.getCC()) << !FirstCCExplicit << (!FirstCCExplicit ? \"\" : FunctionType::getNameForCallConv(FI.getCC()));"}},
		[l]={
			["clang/test/Sema/ms_abi-sysv_abi.c"]={"clang/test/Sema/ms_abi-sysv_abi.c:11:32: error: function declared \'cdecl\' here was previously declared \'ms_abi\'"}
		}
	},
	["err_cconv_incomplete_param_type"]={
		[c]={{nil,n,"err_cconv_incomplete_param_type"}},
		[d]={{nil,n,"parameter %0 must have a complete type to use function %1 with the %2 calling convention"}},
		[f]={{nil,n,"parameter A must have a complete type to use function B with the C calling convention"}},
		[b]=k,
		[g]="parameter (.*?) must have a complete type to use function (.*?) with the (.*?) calling convention",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"e78333a0105d",1560207192,"Require stdcall etc parameters to be complete on ODR use","Require stdcall etc parameters to be complete on ODR use\n\nFunctions using stdcall, fastcall, or vectorcall with C linkage mangle\nin the size of the parameter pack. Calculating the size of the pack\nrequires the parameter types to complete, which may require template\ninstantiation.\n\nPreviously, we would crash during IRgen when requesting the size of\nincomplete or uninstantiated types, as in this reduced example:\n  struct Foo;\n  void __fastcall bar(struct Foo o);\n  void (__fastcall *fp)(struct Foo) = &bar;\n\nReported in Chromium here: https://crbug.com/971245\n\nDifferential Revision: https://reviews.llvm.org/D62975\n\nllvm-svn: 363000"},
		[j]={{F,19011,"/// Require that all of the parameter types of function be complete. Normally,\n/// parameter types are only required to be complete when a function is called\n/// or defined, but to mangle functions with certain calling conventions, the\n/// mangler needs to know the size of the parameter list. In this situation,\n/// MSVC doesn\'t emit an error or instantiate templates. Instead, MSVC mangles\n/// the function as _foo@0, i.e. zero bytes of parameters, which will usually\n/// result in a linker error. Clang doesn\'t implement this behavior, and instead\n/// attempts to error at compile time.\nstatic void CheckCompleteParameterTypesForMangler(Sema &S, FunctionDecl *FD, SourceLocation Loc) {\n  class ParamIncompleteTypeDiagnoser : public Sema::TypeDiagnoser {\n    // ...\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      // ...\n      S.Diag(Loc, diag::err_cconv_incomplete_param_type) << Param->getDeclName() << FD->getDeclName() << CCName;"}},
		[l]={
			["clang/test/Sema/calling-conv-complete-params.c"]={"clang/test/Sema/calling-conv-complete-params.c:23:45: error: parameter \'p\' must have a complete type to use function \'fwd_std\' with the stdcall calling convention","clang/test/Sema/calling-conv-complete-params.c:29:47: error: parameter \'p\' must have a complete type to use function \'fwd_fast\' with the fastcall calling convention","clang/test/Sema/calling-conv-complete-params.c:35:51: error: parameter \'p\' must have a complete type to use function \'fwd_vector\' with the vectorcall calling convention"}
		}
	},
	["err_cconv_knr"]={
		[c]="err_cconv_knr",
		[d]="function with no prototype cannot use the %0 calling convention",
		[f]="function with no prototype cannot use the A calling convention",
		[b]=k,
		[g]="function with no prototype cannot use the (.*?) calling convention",
		[h]=a,
		[i]=m,
		[e]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with","Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn: 86001"},
		[j]={{r,10321,"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 (isa<FunctionNoProtoType>(FT) && !D.isFunctionDefinition()) {\n      // ...\n      if (!supportsVariadicCall(CC)) {\n        // ...\n        int DiagID = CC == CC_X86StdCall ? diag::warn_cconv_knr : diag::err_cconv_knr;"}},
		[l]={
			["clang/test/Sema/decl-microsoft-call-conv.c"]={"clang/test/Sema/decl-microsoft-call-conv.c:22:17: error: function with no prototype cannot use the fastcall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:24:17: error: function with no prototype cannot use the thiscall calling convention","clang/test/Sema/decl-microsoft-call-conv.c:25:15: error: function with no prototype cannot use the pascal calling convention","clang/test/Sema/decl-microsoft-call-conv.c:26:19: error: function with no prototype cannot use the vectorcall calling convention"}
		}
	},
	["err_cconv_varargs"]={
		[c]="err_cconv_varargs",
		[d]="variadic function cannot use %0 calling convention",
		[f]="variadic function cannot use A calling convention",
		[b]=k,
		[g]="variadic function cannot use (.*?) calling convention",
		[h]=a,
		[i]=m,
		[e]={"4976fd4ea971",1257305769,"Diagnose the use of \'fastcall\' on functions without prototypes or with","Diagnose the use of \'fastcall\' on functions without prototypes or with\nvarargs prototypes.\n\nllvm-svn: 86001"},
		[j]={{u,7999,"/// Process an individual function attribute.  Returns true to\n/// indicate that the attribute was handled, false if it wasn\'t.\nstatic bool handleFunctionTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // ...\n  // Diagnose use of variadic functions with calling conventions that\n  // don\'t support them (e.g. because they\'re callee-cleanup).\n  // We delay warning about this on unprototyped function declarations\n  // until after redeclaration checking, just in case we pick up a\n  // prototype that way.  And apparently we also \"delay\" warning about\n  // unprototyped function types in general, despite not necessarily having\n  // much ability to diagnose it later.\n  if (!supportsVariadicCall(CC)) {\n    // ...\n    if (FnP && FnP->isVariadic()) {\n      // ...\n      return S.Diag(attr.getLoc(), diag::err_cconv_varargs) << FunctionType::getNameForCallConv(CC);"}},
		[l]={
			["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:12:27: error: variadic function cannot use swiftcall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:13:33: error: variadic function cannot use swiftasynccall calling convention"}
		}
	},
	["err_cfstring_literal_not_string_constant"]={
		[c]="err_cfstring_literal_not_string_constant",
		[d]="CFString literal is not a string constant",
		[f]="CFString literal is not a string constant",
		[b]=k,
		[g]="CFString literal is not a string constant",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{A,7978,"/// CheckObjCString - Checks that the argument to the builtin\n/// CFString constructor is correct\n/// Note: It might also make sense to do the UTF-16 conversion here (would\n/// simplify the backend).\nbool Sema::CheckObjCString(Expr *Arg) {\n  // ...\n  if (!Literal || !Literal->isOrdinary()) {\n    Diag(Arg->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << Arg->getSourceRange();"},{wb,56,"ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs, ArrayRef<Expr *> Strings) {\n  // ...\n  // If we have a multi-part string, merge it all together.\n  if (Strings.size() != 1) {\n    // ...\n    for (Expr *E : Strings) {\n      // ...\n      // ObjC strings can\'t be wide or UTF.\n      if (!S->isOrdinary()) {\n        Diag(S->getBeginLoc(), diag::err_cfstring_literal_not_string_constant) << S->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:31:13: error: CFString literal is not a string constant"}
		}
	},
	["err_character_not_allowed"]={
		[c]={{nil,v,"err_character_not_allowed"}},
		[d]={{nil,v,"unexpected character <U+%0>"}},
		[f]={{nil,v,"unexpected character <U+A>"}},
		[b]=k,
		[g]="unexpected character \\<U\\+(.*?)\\>",
		[h]=a,
		[i]={{nil,v,Ab}},
		[e]={ib,1625925174,hb,gb},
		[j]={{"clang/lib/Lex/Lexer.cpp",1691,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  // ...\n  if (!IsFirst || InvalidOnlyAtStart) {\n  // ...\n  } else {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed) << Range << codepointAsHexString(CodePoint) << FixItHint::CreateRemoval(Range);"}},
		[l]={
			["clang/test/Preprocessor/utf8-allowed-chars.c"]={"clang/test/Preprocessor/utf8-allowed-chars.c:21:13: error: unexpected character <U+0300>"}
		}
	},
	["err_character_not_allowed_identifier"]={
		[c]={{nil,v,"err_character_not_allowed_identifier"}},
		[d]={{nil,v,"character <U+%0> not allowed %select{in|at the start of}1 an identifier"}},
		[f]={{nil,v,{"character <U+A> not allowed ",{"in","at the start of"}," an identifier"}}},
		[b]=k,
		[g]="character \\<U\\+(.*?)\\> not allowed (?:in|at the start of) an identifier",
		[h]=a,
		[i]={{nil,v,Ab}},
		[e]={ib,1625925174,hb,gb},
		[j]={{"clang/lib/Lex/Lexer.cpp",1687,"static void diagnoseInvalidUnicodeCodepointInIdentifier(DiagnosticsEngine &Diags, const LangOptions &LangOpts, uint32_t CodePoint, CharSourceRange Range, bool IsFirst) {\n  // ...\n  if (!IsFirst || InvalidOnlyAtStart) {\n    Diags.Report(Range.getBegin(), diag::err_character_not_allowed_identifier) << Range << codepointAsHexString(CodePoint) << int(InvalidOnlyAtStart) << FixItHint::CreateRemoval(Range);"}},
		[l]={
			["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:147:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:148:26: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:20: error: character <U+00A2> not allowed in an identifier","clang/test/Parser/cxx11-user-defined-literals.cpp:149:28: error: character <U+00A2> not allowed in an identifier"}
		}
	},
	["err_character_too_large"]={
		[c]="err_character_too_large",
		[d]="character too large for enclosing character literal type",
		[f]="character too large for enclosing character literal type",
		[b]=k,
		[g]="character too large for enclosing character literal type",
		[h]=a,
		[i]=Ab,
		[e]={"8b2b677f390d",1326889624,"Improves support for Unicode in character literals","Improves support for Unicode in character literals\n\nUpdates ProcessUCNExcape() for C++. C++11 allows UCNs in character\nand string literals that represent control characters and basic\nsource characters. Also C++03 allows UCNs that refer to surrogate\ncodepoints.\n\nUTF-8 sequences in character literals are now handled as single\nc-chars.\n\nAdded error for multiple characters in Unicode character literals.\n\nAdded errors for when a the execution charset encoding of a c-char\ncannot be represented as a single code unit in the associated\ncharacter type. Note that for the purposes of this error the asso-\nciated character type for a narrow character literal is char, not\nint, even though in C narrow character literals have type int.\n\nllvm-svn: 148389"},
		[j]={{"clang/lib/Lex/LiteralSupport.cpp",1761,"/// \\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  while (begin != end) {\n    // Is this a span of non-escape characters?\n    if (begin[0] != \'\\\\\') {\n      // ...\n      if (res != llvm::conversionOK) {\n      // ...\n      } else {\n        for (; tmp_out_start < buffer_begin; ++tmp_out_start) {\n          if (*tmp_out_start > largest_character_for_kind) {\n            // ...\n            PP.Diag(Loc, diag::err_character_too_large);"},{"clang/lib/Lex/LiteralSupport.cpp",1777,"/// \\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  while (begin != end) {\n    // ...\n    // Is this a Universal Character Name escape?\n    if (begin[1] == \'u\' || begin[1] == \'U\' || begin[1] == \'N\') {\n      // ...\n      if (!ProcessUCNEscape(TokBegin, begin, end, *buffer_begin, UcnLen, FullSourceLoc(Loc, PP.getSourceManager()), &PP.getDiagnostics(), PP.getLangOpts(), true)) {\n      // ...\n      } else if (*buffer_begin > largest_character_for_kind) {\n        // ...\n        PP.Diag(Loc, diag::err_character_too_large);"}},
		[l]={
			["clang/test/Lexer/constants.c"]={"clang/test/Lexer/constants.c:74:10: error: character too large for enclosing character literal type"}
		}
	},
	["err_circular_inheritance"]={
		[c]="err_circular_inheritance",
		[d]="circular inheritance between %0 and %1",
		[f]="circular inheritance between A and B",
		[b]=k,
		[g]="circular inheritance between (.*?) and (.*?)",
		[h]=a,
		[i]=m,
		[e]={"620047011211",1352510297,"Diagnostic circular inheritance involving dependent base classes. We","Diagnostic circular inheritance involving dependent base classes. We\nwould have diagnosed this at instantiation time anyway, if only we\ndidn\'t hang on all of these test cases. Fixes <rdar://problem/12629723>\n\nllvm-svn: 167651"},
		[j]={{w,2685,"/// 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 (BaseType->isDependentType()) {\n    // Make sure that we don\'t have circular inheritance among our dependent\n    // bases. For non-dependent bases, the check for completeness below handles\n    // this.\n    if (CXXRecordDecl *BaseDecl = BaseType->getAsCXXRecordDecl()) {\n      if (BaseDecl->getCanonicalDecl() == Class->getCanonicalDecl() || ((BaseDecl = BaseDecl->getDefinition()) && findCircularInheritance(Class, BaseDecl))) {\n        Diag(BaseLoc, diag::err_circular_inheritance) << BaseType << Context.getTypeDeclType(Class);"}},
		[l]={
			["clang/test/SemaTemplate/dependent-names.cpp"]={"clang/test/SemaTemplate/dependent-names.cpp:338:13: error: circular inheritance between \'Y<dim>\' and \'Y<dim>\'","clang/test/SemaTemplate/dependent-names.cpp:347:23: error: circular inheritance between \'C\' and \'rdar12629723::X::C\'","clang/test/SemaTemplate/dependent-names.cpp:360:27: error: circular inheritance between \'A\' and \'rdar12629723::X::B\'"}
		}
	},
	["err_class_extension_after_impl"]={
		[c]="err_class_extension_after_impl",
		[d]="cannot declare class extension for %0 after class implementation",
		[f]="cannot declare class extension for A after class implementation",
		[b]=k,
		[g]="cannot declare class extension for (.*?) after class implementation",
		[h]=a,
		[i]=m,
		[e]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation","diagnose declaring class extension after its implementation\n(radar 7822210).\n\nllvm-svn: 100226"},
		[j]={{Z,1851,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (!CategoryName && IDecl->getImplementation()) {\n    Diag(ClassLoc, diag::err_class_extension_after_impl) << ClassName;"}},
		[l]={
			["clang/test/SemaObjC/class-extension-after-implementation.m"]={"clang/test/SemaObjC/class-extension-after-implementation.m:8:12: error: cannot declare class extension for \'A\' after class implementation"}
		}
	},
	["err_class_marked_final_used_as_base"]={
		[c]="err_class_marked_final_used_as_base",
		[d]="base %0 is marked \'%select{final|sealed}1\'",
		[f]={{nil,nil,{"base A is marked \'",{"final","sealed"},"\'"}}},
		[b]=k,
		[g]="base (.*?) is marked \'(?:final|sealed)\'",
		[h]=a,
		[i]=m,
		[e]={"fc1eef48980e",1295718713,"Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base.","Mark classes as final or explicit. Diagnose when a class marked \'final\' is used as a base.\n\nllvm-svn: 124039"},
		[j]={{w,2780,"/// 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  // C++ [class]p3:\n  //   If a class is marked final and it appears as a base-type-specifier in\n  //   base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(BaseLoc, diag::err_class_marked_final_used_as_base) << CXXBaseDecl->getDeclName() << FA->isSpelledAsSealed();"}},
		[l]={
			["clang/test/CXX/class/p2-0x.cpp"]={"clang/test/CXX/class/p2-0x.cpp:5:11: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:12:12: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:14:33: error: base \'A\' is marked \'final\'","clang/test/CXX/class/p2-0x.cpp:25:12: error: base \'A\' is marked \'final\'"}
		}
	},
	["err_class_on_template_template_param"]={
		[c]="err_class_on_template_template_param",
		[d]={{nil,v,"template template parameter requires \'class\'%select{| or \'typename\'}0 after the parameter list"},{t,nil,"template template parameter requires \'class\' after the parameter list"}},
		[f]={{nil,v,{"template template parameter requires \'class\'",{a," or \'typename\'"}," after the parameter list"}},{t,nil,"template template parameter requires \'class\' after the parameter list"}},
		[b]=k,
		[g]="template template parameter requires \'class\'(?:| or \'typename\') after the parameter list",
		[h]=a,
		[i]=M,
		[e]={"cbd8125a6ad2",1333690003,"Restrict fixit for missing \'class\' in template template parameters.","Restrict fixit for missing \'class\' in template template parameters.\n\nBased on Doug\'s feedback to r153887 this omits the FixIt if the following token\nisn\'t syntactically valid for the context. (not a comma, \'...\', identifier,\n\'>\', or \'>>\')\n\nThere\'s a bunch of work to handle the \'>>\' case, but it makes for a much more\npleasant diagnostic in this case.\n\nllvm-svn: 154163"},
		[j]={{ac,941,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///       type-parameter:    [C++ temp.param]\n///         template-head type-parameter-key ...[opt] identifier[opt]\n///         template-head type-parameter-key identifier[opt] = id-expression\n///       type-parameter-key:\n///         \'class\'\n///         \'typename\'       [C++1z]\n///       template-head:     [C++2a]\n///         \'template\' \'<\' template-parameter-list \'>\'\n///             requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n    // ...\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17 << (Replace ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint::CreateInsertion(Tok.getLocation(), \"class \"));"},{ac,947,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///       type-parameter:    [C++ temp.param]\n///         template-head type-parameter-key ...[opt] identifier[opt]\n///         template-head type-parameter-key identifier[opt] = id-expression\n///       type-parameter-key:\n///         \'class\'\n///         \'typename\'       [C++1z]\n///       template-head:     [C++2a]\n///         \'template\' \'<\' template-parameter-list \'>\'\n///             requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n  // Generate a meaningful error if the user forgot to put class before the\n  // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n  // or greater appear immediately or after \'struct\'. In the latter case,\n  // replace the keyword with \'class\'.\n  if (!TryConsumeToken(tok::kw_class)) {\n    // ...\n    if (Tok.is(tok::kw_typename)) {\n    // ...\n    } else if (Next.isOneOf(tok::identifier, tok::comma, tok::greater, tok::greatergreater, tok::ellipsis)) {\n    // ...\n    } else\n      Diag(Tok.getLocation(), diag::err_class_on_template_template_param) << getLangOpts().CPlusPlus17;"}},
		[l]={
			[Gb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:12:29: error: template template parameter requires \'class\' or \'typename\' after the parameter list"}
		}
	},
	["err_class_property_found"]={
		[c]="err_class_property_found",
		[d]="property %0 is a class property; did you mean to access it with class \'%1\'?",
		[f]="property A is a class property; did you mean to access it with class \'B\'?",
		[b]=k,
		[g]="property (.*?) is a class property; did you mean to access it with class \'(.*?)\'\\?",
		[h]=a,
		[i]=m,
		[e]={"2b2b1a920087",1467154909,"ObjC Class Property: diagnostics when accessing a class property using instance.","ObjC Class Property: diagnostics when accessing a class property using instance.\n\nWhen a class property is accessed with an object instance, before this commit,\nwe try to apply a typo correction of the same property:\nproperty \'c\' not found on object of type \'A *\'; did you mean \'c\'?\n\nWith this commit, we correctly emit a diagnostics:\nproperty \'c\' is a class property; did you mean to access it with class \'A\'?\n\nrdar://26866973\n\nllvm-svn: 274076"},
		[j]={{wb,2117,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    // ...\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n      // ...\n      if (ChosenDecl && isa<ObjCPropertyDecl>(ChosenDecl))\n        if (cast<ObjCPropertyDecl>(ChosenDecl)->isClassProperty()) {\n          // ...\n          Diag(MemberLoc, diag::err_class_property_found) << MemberName << OPT->getInterfaceDecl()->getName() << FixItHint::CreateReplacement(BaseExpr->getSourceRange(), OPT->getInterfaceDecl()->getName());"}},
		[l]={
			["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:40:5: error: property \'c\' is a class property; did you mean to access it with class \'A\'?"}
		}
	},
	["err_class_redeclared_with_different_access"]={
		[c]="err_class_redeclared_with_different_access",
		[d]="%0 redeclared with \'%1\' access",
		[f]="A redeclared with \'B\' access",
		[b]=k,
		[g]="(.*?) redeclared with \'(.*?)\' access",
		[h]=a,
		[i]=m,
		[e]={"2ed6ceba1d90",1238027057,"Check that the access specifier of a member redeclaration is the same as the original declaration.","Check that the access specifier of a member redeclaration is the same as the original declaration.\n\nllvm-svn: 67722"},
		[j]={{"clang/lib/Sema/SemaAccess.cpp",53,"/// SetMemberAccessSpecifier - Set the access specifier of a member.\n/// Returns true on error (when the previous member decl access specifier\n/// is different from the new member decl access specifier).\nbool Sema::SetMemberAccessSpecifier(NamedDecl *MemberDecl, NamedDecl *PrevMemberDecl, AccessSpecifier LexicalAS) {\n  // ...\n  // C++ [class.access.spec]p3: When a member is redeclared its access\n  // specifier must be same as its initial declaration.\n  if (LexicalAS != AS_none && LexicalAS != PrevMemberDecl->getAccess()) {\n    Diag(MemberDecl->getLocation(), diag::err_class_redeclared_with_different_access) << MemberDecl << LexicalAS;"}},
		[l]={
			["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:7:12: error: \'S\' redeclared with \'public\' access","clang/test/SemaCXX/access.cpp:14:11: error: \'C\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:22:33: error: \'A\' redeclared with \'private\' access","clang/test/SemaCXX/access.cpp:32:11: error: \'X\' redeclared with \'public\' access"}
		}
	},
	["err_class_stub_subclassing_mismatch"]={
		[c]={{nil,n,"err_class_stub_subclassing_mismatch"}},
		[d]={{nil,n,"\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute"}},
		[f]={{nil,n,"\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute"}},
		[b]=k,
		[g]="\'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"2c91c3b7af7c",1559189341,"Add the `objc_class_stub` attribute.","Add the `objc_class_stub` attribute.\n\nSwift requires certain classes to be not just initialized lazily on first\nuse, but actually allocated lazily using information that is only available\nat runtime.  This is incompatible with ObjC class initialization, or at least\nnot efficiently compatible, because there is no meaningful class symbol\nthat can be put in a class-ref variable at load time.  This leaves ObjC\ncode unable to access such classes, which is undesirable.\n\nobjc_class_stub says that class references should be resolved by calling\na new ObjC runtime function with a pointer to a new \"class stub\" structure.\nNon-ObjC compilers (like Swift) can simply emit this structure when ObjC\ninterop is required for a class that cannot be statically allocated,\nthen apply this attribute to the `@interface` in the generated ObjC header\nfor the class.\n\nThis attribute can be thought of as a generalization of the existing\n`objc_runtime_visible` attribute which permits more efficient class\nresolution as well as supporting the additon of categories to the class.\nSubclassing these classes from ObjC is currently not allowed.\n\nPatch by Slava Pestov!\n\nllvm-svn: 362054"},
		[j]={{Z,4204,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  // ...\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  // ...\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    // ...\n    if (IntfDecl->hasAttr<ObjCClassStubAttr>() && !IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>())\n      Diag(IntfDecl->getLocation(), diag::err_class_stub_subclassing_mismatch);"}},
		[l]={
			["clang/test/SemaObjC/class-stub-attr.m"]={"clang/test/SemaObjC/class-stub-attr.m:8:12: error: \'objc_class_stub\' attribute cannot be specified on a class that does not have the \'objc_subclassing_restricted\' attribute"}
		}
	},
	["err_cmse_pi_are_incompatible"]={
		[c]={{nil,o,"err_cmse_pi_are_incompatible"}},
		[d]={{nil,o,"cmse is not compatible with %select{RWPI|ROPI}0"}},
		[f]={{nil,o,{"cmse is not compatible with ",{"RWPI","ROPI"}}}},
		[b]=k,
		[g]="cmse is not compatible with (?:RWPI|ROPI)",
		[h]=a,
		[i]={{nil,o,G}},
		[e]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity)."},
		[j]={{"clang/lib/Driver/ToolChains/Clang.cpp",5263,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    if (IsROPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << IsROPI;"},{"clang/lib/Driver/ToolChains/Clang.cpp",5265,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mcmse) && !Args.hasArg(options::OPT_fallow_unsupported)) {\n    // ...\n    if (IsRWPI)\n      D.Diag(diag::err_cmse_pi_are_incompatible) << !IsRWPI;"}}
	},
	["err_cocoa_naming_owned_rule"]={
		[c]="err_cocoa_naming_owned_rule",
		[d]="property follows Cocoa naming convention for returning \'owned\' objects",
		[f]="property follows Cocoa naming convention for returning \'owned\' objects",
		[b]=k,
		[g]="property follows Cocoa naming convention for returning \'owned\' objects",
		[h]=a,
		[i]=m,
		[e]={"65b13779118c",1389315228,"ObjectiveC. 1) Warn when @dynamic (as well as synthesize) ","ObjectiveC. 1) Warn when @dynamic (as well as synthesize) \nproperty has the naming convention that implies \'ownership\'.\n2) improve on diagnostic and make it property specific.\n3) fix the line number in the case of default property\nsynthesis. // rdar://15757510\n\nllvm-svn: 198905"},
		[j]={{Mb,2275,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  // ...\n  for (const auto *PID : D->property_impls()) {\n    // ...\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      // ...\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        if (getLangOpts().ObjCAutoRefCount)\n          Diag(PD->getLocation(), diag::err_cocoa_naming_owned_rule);"}},
		[l]={
			["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:70:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:71:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:72:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:74:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:75:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:76:21: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:103:33: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:93:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:98:23: error: property follows Cocoa naming convention for returning \'owned\' objects","clang/test/SemaObjC/arc-decls.m:100:23: error: property follows Cocoa naming convention for returning \'owned\' objects"}
		}
	},
	["err_collection_expr_type"]={
		[c]="err_collection_expr_type",
		[d]="the type %0 is not a pointer to a fast-enumerable object",
		[f]="the type A is not a pointer to a fast-enumerable object",
		[b]=k,
		[g]="the type (.*?) is not a pointer to a fast\\-enumerable object",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{bb,2231,"ExprResult Sema::CheckObjCForCollectionOperand(SourceLocation forLoc, Expr *collection) {\n  // ...\n  if (!pointerType)\n    return Diag(forLoc, diag::err_collection_expr_type) << collection->getType() << collection->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjCXX/instantiate-stmt.mm"]={"clang/test/SemaObjCXX/instantiate-stmt.mm:40:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:46:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:50:3: error: the type \'vector\' is not a pointer to a fast-enumerable object","clang/test/SemaObjCXX/instantiate-stmt.mm:54:3: error: the type \'vector\' is not a pointer to a fast-enumerable object"}
		}
	},
	["err_complex_mode_vector_type"]={
		[c]="err_complex_mode_vector_type",
		[d]="type of machine mode does not support base vector types",
		[f]="type of machine mode does not support base vector types",
		[b]=k,
		[g]="type of machine mode does not support base vector types",
		[h]=a,
		[i]=m,
		[e]={"326057d0da96",1434699981,"[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov","[ATTRIBUTE] Support base vector types of __attribute__((mode)), patch by Alexey Frolov\n\nBase type of attribute((mode)) can actually be a vector type.\nThe patch is to distinguish between base type and base element type.\n\nThis fixes http://llvm.org/PR17453.\nDifferential Revision: http://reviews.llvm.org/D10058\n\nllvm-svn: 240125"},
		[j]={{q,4853,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (VectorSize.getBoolValue()) {\n  // ...\n  } else if (const auto *OldVT = OldTy->getAs<VectorType>()) {\n    // Complex machine mode does not support base vector types.\n    if (ComplexMode) {\n      Diag(AttrLoc, diag::err_complex_mode_vector_type);"}},
		[l]={
			["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:26:28: error: type of machine mode does not support base vector types","clang/test/Sema/attr-mode-vector-types.c:29:30: error: type of machine mode does not support base vector types"}
		}
	},
	["err_compound_literal_with_address_space"]={
		[c]={{nil,B,"err_compound_literal_with_address_space"}},
		[d]={{nil,B,"compound literal in function scope may not be qualified with an address space"}},
		[f]={{nil,B,"compound literal in function scope may not be qualified with an address space"}},
		[b]=k,
		[g]="compound literal in function scope may not be qualified with an address space",
		[h]=a,
		[i]={{nil,B,m}},
		[e]={"7fa8af0abee8",1536175360,"Forbid address spaces on compound literals in local scope.","Forbid address spaces on compound literals in local scope.\n\nPatch by Bevin Hansson!\n\nllvm-svn: 341491"},
		[j]={{F,7793,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  // ...\n  if (isFileScope) {\n  // ...\n  } else if (literalType.getAddressSpace() != LangAS::opencl_private && literalType.getAddressSpace() != LangAS::Default) {\n    // ...\n    Diag(LParenLoc, diag::err_compound_literal_with_address_space) << SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd());"}},
		[l]={
			["clang/test/Sema/address_spaces.c"]={"clang/test/Sema/address_spaces.c:90:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:91:3: error: compound literal in function scope may not be qualified with an address space","clang/test/Sema/address_spaces.c:92:3: error: compound literal in function scope may not be qualified with an address space"}
		}
	},
	["err_compound_qualified_function_type"]={
		[c]="err_compound_qualified_function_type",
		[d]="%select{block pointer|pointer|reference}0 to function type %select{%2 |}1cannot have \'%3\' qualifier",
		[f]={{nil,nil,{{"block pointer","pointer","reference"}," to function type ",{"C ",a},"cannot have \'D\' qualifier"}}},
		[b]=k,
		[g]="(?:block pointer|pointer|reference) to function type (?:(.*?) |)cannot have \'(.*?)\' qualifier",
		[h]=a,
		[i]=m,
		[e]={"63168c75333b",1328871911,"PR11684, core issue 1417:","PR11684, core issue 1417:\n\no Correct the handling of the restrictions on usage of cv-qualified and\n  ref-qualified function types.\no Fix a bug where such types were rejected in template type parameter default\n  arguments, due to such arguments not being treated as a template type arg\n  context.\no Remove the ExtWarn for usage of such types as template arguments; that was\n  a standard defect, not a GCC extension.\no Improve the wording and unify the code for diagnosing cv-qualifiers with the\n  code for diagnosing ref-qualifiers.\n\nllvm-svn: 150244"},
		[j]={{u,2133,"/// Check whether the type T is a qualified function type, and if it is,\n/// diagnose that it cannot be contained within the given kind of declarator.\nstatic bool checkQualifiedFunction(Sema &S, QualType T, SourceLocation Loc, QualifiedFunctionKind QFK) {\n  // ...\n  S.Diag(Loc, diag::err_compound_qualified_function_type) << QFK << isa<FunctionType>(T.IgnoreParens()) << T << getFunctionQualifiersAsString(FPT);"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:24:13: error: pointer to function type \'void () const\' cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:25:13: error: reference to function type \'void () const\' cannot have \'const\' qualifier"}
		}
	},
	["err_concept_decls_may_only_appear_in_global_namespace_scope"]={
		[c]={{nil,n,"err_concept_decls_may_only_appear_in_global_namespace_scope"}},
		[d]={{nil,n,"concept declarations may only appear in global or namespace scope"}},
		[f]={{nil,n,"concept declarations may only appear in global or namespace scope"}},
		[b]=k,
		[g]="concept declarations may only appear in global or namespace scope",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
		[j]={{oc,8990,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (!DC->getRedeclContext()->isFileContext()) {\n    Diag(NameLoc, diag::err_concept_decls_may_only_appear_in_global_namespace_scope);"}},
		[l]={
			[Gb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:18:32: error: concept declarations may only appear in global or namespace scope"}
		}
	},
	["err_concept_definition_not_identifier"]={
		[c]={{nil,n,"err_concept_definition_not_identifier"}},
		[d]={{nil,n,"name defined in concept definition must be an identifier"}},
		[f]={{nil,n,"name defined in concept definition must be an identifier"}},
		[b]=k,
		[g]="name defined in concept definition must be an identifier",
		[h]=a,
		[i]={{nil,n,"Concepts Issue"}},
		[e]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
		[j]={{ac,417,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (SS.isNotEmpty())\n    Diag(SS.getBeginLoc(), diag::err_concept_definition_not_identifier);"},{ac,431,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (Result.getKind() != UnqualifiedIdKind::IK_Identifier) {\n    Diag(Result.getBeginLoc(), diag::err_concept_definition_not_identifier);"}},
		[l]={
			[Gb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:58:20: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:61:30: error: name defined in concept definition must be an identifier","clang/test/Parser/cxx2a-concept-declaration.cpp:70:30: error: name defined in concept definition must be an identifier"}
		}
	},
	["err_concept_extra_headers"]={
		[c]={{nil,n,"err_concept_extra_headers"}},
		[d]={{nil,n,"extraneous template parameter list in concept definition"}},
		[f]={{nil,n,"extraneous template parameter list in concept definition"}},
		[b]=k,
		[g]="extraneous template parameter list in concept definition",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations","[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is a tweak of changyu\'s patch: https://reviews.llvm.org/D40381. It differs in that the recognition of the \'concept\' token is moved into the machinery that recognizes declaration-specifiers - this allows us to leverage the attribute handling machinery more seamlessly.\n\nSee the test file to get a sense of the basic parsing that this patch supports. \n\nThere is much more work to be done before concepts are usable...\n\nThanks Changyu!\n\nllvm-svn: 330794"},
		[j]={{oc,8995,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (TemplateParameterLists.size() > 1) {\n    Diag(NameLoc, diag::err_concept_extra_headers);"}},
		[l]={
			[Gb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:27:9: error: extraneous template parameter list in concept definition"}
		}
	},
	["err_concept_legacy_bool_keyword"]={
		[c]={{nil,I,"err_concept_legacy_bool_keyword"}},
		[d]={{nil,I,"ISO C++ does not permit the \'bool\' keyword after \'concept\'"}},
		[f]={{nil,I,"ISO C++ does not permit the \'bool\' keyword after \'concept\'"}},
		[b]=k,
		[g]="ISO C\\+\\+ does not permit the \'bool\' keyword after \'concept\'",
		[h]=a,
		[i]={{nil,I,"Concepts Issue"}},
		[e]={"9061928ebbb1",1669659698,"Stop accepting \'bool\' in a concept declaration as an extension.","Stop accepting \'bool\' in a concept declaration as an extension.\n\nWe no longer support the concepts-ts flag for this release, so stop\nsupporting this concepts-ts compat extension as well."},
		[j]={{ac,399,"/// \\brief Parse a single declaration that declares a concept.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseConceptDefinition(const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd) {\n  // ...\n  if (TryConsumeToken(tok::kw_bool, BoolKWLoc))\n    Diag(Tok.getLocation(), diag::err_concept_legacy_bool_keyword) << FixItHint::CreateRemoval(SourceLocation(BoolKWLoc));"}},
		[l]={
			[Gb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:52:35: error: ISO C++ does not permit the \'bool\' keyword after \'concept\'"}
		}
	},
	["err_concept_no_associated_constraints"]={
		[c]={{nil,n,"err_concept_no_associated_constraints"}},
		[d]={{nil,n,"concept cannot have associated constraints"}},
		[f]={{nil,n,"concept cannot have associated constraints"}},
		[b]=k,
		[g]="concept cannot have associated constraints",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"936de9d66600",1524624146,"[c++2a] [concepts] Add rudimentary parsing support for template concept declarations","[c++2a] [concepts] Add rudimentary parsing support for template concept declarations\n\n\nThis patch is a tweak of changyu\'s patch: https://reviews.llvm.org/D40381. It differs in that the recognition of the \'concept\' token is moved into the machinery that recognizes declaration-specifiers - this allows us to leverage the attribute handling machinery more seamlessly.\n\nSee the test file to get a sense of the basic parsing that this patch supports. \n\nThere is much more work to be done before concepts are usable...\n\nThanks Changyu!\n\nllvm-svn: 330794"},
		[j]={{oc,9030,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (NewDecl->hasAssociatedConstraints()) {\n    // ...\n    Diag(NameLoc, diag::err_concept_no_associated_constraints);"}},
		[l]={
			["clang/test/CXX/temp/concept/p4.cpp"]={"clang/test/CXX/temp/concept/p4.cpp:4:9: error: concept cannot have associated constraints"}
		}
	},
	["err_concept_no_parameters"]={
		[c]={{nil,n,"err_concept_no_parameters"}},
		[d]={{nil,n,"concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed"}},
		[f]={{nil,n,"concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed"}},
		[b]=k,
		[g]="concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"d7aae33a9513",1562793949,"[Concepts] Concept definitions (D40381)","[Concepts] Concept definitions (D40381)\n\nFirst in a series of patches to land C++2a Concepts support.\nThis patch adds AST and parsing support for concept-declarations.\n\nllvm-svn: 365699"},
		[j]={{oc,9002,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  if (Params->size() == 0) {\n    Diag(NameLoc, diag::err_concept_no_parameters);"}},
		[l]={
			[Gb]={"clang/test/Parser/cxx2a-concept-declaration.cpp:8:29: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:12:48: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed","clang/test/Parser/cxx2a-concept-declaration.cpp:55:20: error: concept template parameter list must have at least one parameter; explicit specialization of concepts is not allowed"}
		}
	},
	["err_cond_voidptr_arc"]={
		[c]="err_cond_voidptr_arc",
		[d]="operands to conditional of types%diff{ $ and $|}0,1 are incompatible in ARC mode",
		[f]={{nil,nil,{"operands to conditional of types",{" A and B",a}," are incompatible in ARC mode"}}},
		[b]=k,
		[g]="operands to conditional of types(?: (.*?) and (.*?)|) are incompatible in ARC mode",
		[h]=a,
		[i]=m,
		[e]={"8a78a58188b7",1330129424,"Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <...","Improve the diagnostic in ARC mode when a conditional with an Objective-C type and void* is used.  <rdar://problem/10486347>.\n\nllvm-svn: 151416"},
		[j]={{F,9372,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  // Check Objective-C object pointer types and \'void *\'\n  if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      // ...\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{F,9507,"/// FindCompositeObjCPointerType - Helper method to find composite type of\n/// two objective-c pointer types of the two input expressions.\nQualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) {\n    if (getLangOpts().ObjCAutoRefCount) {\n      // ...\n      Diag(QuestionLoc, diag::err_cond_voidptr_arc) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/arc-type-conversion.m"]={"clang/test/SemaObjC/arc-type-conversion.m:96:12: error: operands to conditional of types \'id\' and \'void *\' are incompatible in ARC mode","clang/test/SemaObjC/arc-type-conversion.m:97:12: error: operands to conditional of types \'void *\' and \'id\' are incompatible in ARC mode"}
		}
	},
	["err_conditional_ambiguous"]={
		[c]="err_conditional_ambiguous",
		[d]="conditional expression is ambiguous; %diff{$ can be converted to $ and vice versa|types can be convert to each other}0,1",
		[f]={{nil,nil,{"conditional expression is ambiguous; ",{"A can be converted to B and vice versa","types can be convert to each other"}}}},
		[b]=k,
		[g]="conditional expression is ambiguous; (?:(.*?) can be converted to (.*?) and vice versa|types can be convert to each other)",
		[h]=a,
		[i]=m,
		[e]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
		[j]={{D,6625,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///   (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///   (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  // C++11 [expr.cond]p3\n  //   Otherwise, if the second and third operand have different types, and\n  //   either has (cv) class type [...] an attempt is made to convert each of\n  //   those operands to the type of the other.\n  if (!Context.hasSameType(LTy, RTy) && (LTy->isRecordType() || RTy->isRecordType())) {\n    // ...\n    //   If both can be converted, [...] the program is ill-formed.\n    if (HaveL2R && HaveR2L) {\n      Diag(QuestionLoc, diag::err_conditional_ambiguous) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:113:13: error: conditional expression is ambiguous; \'BadBase\' can be converted to \'BadDerived\' and vice versa","clang/test/SemaCXX/conditional-expr.cpp:114:13: error: conditional expression is ambiguous; \'BadDerived\' can be converted to \'BadBase\' and vice versa"}
		}
	},
	["err_conditional_ambiguous_ovl"]={
		[c]="err_conditional_ambiguous_ovl",
		[d]="conditional expression is ambiguous; %diff{$ and $|types}0,1 can be converted to several common types",
		[f]={{nil,nil,{"conditional expression is ambiguous; ",{"A and B","types"}," can be converted to several common types"}}},
		[b]=k,
		[g]="conditional expression is ambiguous; (?:(.*?) and (.*?)|types) can be converted to several common types",
		[h]=a,
		[i]=m,
		[e]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
		[j]={{D,6267,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  case OR_Ambiguous:\n    Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
	},
	["err_conditional_vector_cond_result_mismatch"]={
		[c]={{nil,t,"err_conditional_vector_cond_result_mismatch"}},
		[d]={{nil,t,"cannot mix vectors and extended vectors in a vector conditional"}},
		[f]={{nil,t,"cannot mix vectors and extended vectors in a vector conditional"}},
		[b]=k,
		[g]="cannot mix vectors and extended vectors in a vector conditional",
		[h]=a,
		[i]={{nil,t,m}},
		[e]={Cb,1590001902,Hb,Jb},
		[j]={{D,6338,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n    if (isa<ExtVectorType>(CondVT) != isa<ExtVectorType>(LHSVT)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_cond_result_mismatch) << /*isExtVector*/ isa<ExtVectorType>(CondVT);"}},
		[l]={
			["clang/test/SemaCXX/ext-vector-type-conditional.cpp"]={"clang/test/SemaCXX/ext-vector-type-conditional.cpp:177:12: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:180:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:186:21: error: cannot mix vectors and extended vectors in a vector conditional","clang/test/SemaCXX/ext-vector-type-conditional.cpp:192:12: error: cannot mix vectors and extended vectors in a vector conditional"}
		}
	},
	["err_conditional_vector_element_size"]={
		[c]="err_conditional_vector_element_size",
		[d]="vector condition type %0 and result type %1 do not have elements of the same size",
		[f]="vector condition type A and result type B do not have elements of the same size",
		[b]=k,
		[g]="vector condition type (.*?) and result type (.*?) do not have elements of the same size",
		[h]=a,
		[i]=m,
		[e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, OpenCL specifies additional\nrequirements on the operand types, and also the operations\nrequired to determine the result type of the operator. This is a\ncombination of OpenCL v1.1 s6.3.i and s6.11.6, and the semantics\nremain unchanged in later versions of OpenCL.\n\nllvm-svn: 228118"},
		[j]={{F,8963,"/// Convert scalar operands to a vector that matches the\n///        condition in length.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// We first compute the \"result type\" for the scalar operands\n/// according to OpenCL v1.1 s6.3.i. Both operands are then converted\n/// into a vector of that type where the length matches the condition\n/// vector type. s6.11.6 requires that the element types of the result\n/// and the condition must have the same number of bits.\nstatic QualType OpenCLConvertScalarsToVectors(Sema &S, ExprResult &LHS, ExprResult &RHS, QualType CondTy, SourceLocation QuestionLoc) {\n  // ...\n  // Ensure that all types have the same number of bits\n  if (S.Context.getTypeSize(CV->getElementType()) != S.Context.getTypeSize(ResTy)) {\n    // ...\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << OS.str();"},{F,9044,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  // ...\n  if (S.Context.getTypeSize(CVE) != S.Context.getTypeSize(RVE)) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondTy << VecResTy;"},{D,6399,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"},{D,6482,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (Context.getTypeSize(ResultElementTy) != Context.getTypeSize(CondElementTy)) {\n    Diag(QuestionLoc, diag::err_conditional_vector_element_size) << CondType << ResultType;"}},
		[l]={
			["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:72:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:77:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'int2\' (vector of 2 \'int\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:82:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type (vector of 2 \'unsigned char\' values) do not have elements of the same size","clang/test/SemaOpenCL/cond.cl:97:12: error: vector condition type \'int2\' (vector of 2 \'int\' values) and result type \'char2\' (vector of 2 \'char\' values) do not have elements of the same size"}
		}
	},
	["err_conditional_vector_has_void"]={
		[c]={{nil,p,"err_conditional_vector_has_void"}},
		[d]={{nil,p,"GNU vector conditional operand cannot be %select{void|a throw expression}0"}},
		[f]={{nil,p,{"GNU vector conditional operand cannot be ",{"void","a throw expression"}}}},
		[b]=k,
		[g]="GNU vector conditional operand cannot be (?:void|a throw expression)",
		[h]=a,
		[i]={{nil,p,m}},
		[e]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
		[j]={{D,6569,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///   (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///   (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  if (LVoid || RVoid) {\n    // ...\n    // Void expressions aren\'t legal in the vector-conditional expressions.\n    if (IsVectorConditional) {\n      // ...\n      Diag(DiagLoc.getBegin(), diag::err_conditional_vector_has_void) << DiagLoc << IsThrow;"}},
		[l]={
			["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:46:34: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:47:22: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:48:23: error: GNU vector conditional operand cannot be a throw expression","clang/test/SemaCXX/vector-size-conditional.cpp:49:22: error: GNU vector conditional operand cannot be void","clang/test/SemaCXX/vector-size-conditional.cpp:50:23: error: GNU vector conditional operand cannot be void"}
		}
	},
	["err_conditional_vector_mismatched"]={
		[c]={{nil,t,"err_conditional_vector_mismatched"}},
		[d]={{nil,t,"vector operands to the vector conditional must be the same type %diff{($ and $)|}0,1}"}},
		[f]={{nil,t,{"vector operands to the vector conditional must be the same type ",{"(A and B)",a},"}"}}},
		[b]=k,
		[g]="vector operands to the vector conditional must be the same type (?:\\((.*?) and (.*?)\\)|)\\}",
		[h]=a,
		[i]={{nil,t,m}},
		[e]={Cb,1590001902,Hb,Jb},
		[j]={{D,6345,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n    // ...\n    // If both are vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"},{D,6432,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSBT && RHSBT) {\n    // If both are sizeless vector types, they must be the same type.\n    if (!Context.hasSameType(LHSType, RHSType)) {\n      Diag(QuestionLoc, diag::err_conditional_vector_mismatched) << LHSType << RHSType;"}},
		[l]={
			["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:57:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'TwoInts\' (vector of 2 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:58:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourDoubles\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:93:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourFloats\' (vector of 4 \'float\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:94:20: error: vector operands to the vector conditional must be the same type (\'FourUInts\' (vector of 4 \'unsigned int\' values) and \'FourInts\' (vector of 4 \'int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:95:20: error: vector operands to the vector conditional must be the same type (\'FourInts\' (vector of 4 \'int\' values) and \'FourUInts\' (vector of 4 \'unsigned int\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(4 * sizeof(double)))) double\' (vector of 4 \'double\' values))}","clang/test/SemaCXX/vector-size-conditional.cpp:165:12: error: vector operands to the vector conditional must be the same type (\'__attribute__((__vector_size__(4 * sizeof(unsigned int)))) unsigned int\' (vector of 4 \'unsigned int\' values) and \'__attribute__((__vector_size__(2 * sizeof(unsigned int)))) unsigned int\' (vector of 2 \'unsigned int\' values))}"}
		}
	},
	["err_conditional_vector_operand_type"]={
		[c]={{nil,p,"err_conditional_vector_operand_type"}},
		[d]={{nil,t,"enumeration type %0 is not allowed in a vector conditional"},{H,p,"%select{enumeration|extended vector}0 type %1 is not allowed in a vector conditional"}},
		[f]={{nil,t,"enumeration type A is not allowed in a vector conditional"},{H,p,{{"enumeration","extended vector"}," type B is not allowed in a vector conditional"}}},
		[b]=k,
		[g]="enumeration type (.*?) is not allowed in a vector conditional",
		[h]=a,
		[i]={{nil,p,m}},
		[e]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
		[j]={{D,6369,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSVT && RHSVT) {\n  // ...\n  } else if (LHSVT || RHSVT) {\n  // ...\n  } else {\n    // ...\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"},{D,6455,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (LHSBT && RHSBT) {\n  // ...\n  } else if (LHSBT || RHSBT) {\n  // ...\n  } else {\n    // ...\n    if (ResultElementTy->isEnumeralType()) {\n      Diag(QuestionLoc, diag::err_conditional_vector_operand_type) << ResultElementTy;"}},
		[l]={
			["clang/test/SemaCXX/vector-size-conditional.cpp"]={"clang/test/SemaCXX/vector-size-conditional.cpp:70:20: error: enumeration type \'E\' is not allowed in a vector conditional","clang/test/SemaCXX/vector-size-conditional.cpp:71:20: error: enumeration type \'SE\' is not allowed in a vector conditional"}
		}
	},
	["err_conditional_vector_size"]={
		[c]="err_conditional_vector_size",
		[d]="vector condition type %0 and result type %1 do not have the same number of elements",
		[f]="vector condition type A and result type B do not have the same number of elements",
		[b]=k,
		[g]="vector condition type (.*?) and result type (.*?) do not have the same number of elements",
		[h]=a,
		[i]=m,
		[e]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, OpenCL specifies additional\nrequirements on the operand types, and also the operations\nrequired to determine the result type of the operator. This is a\ncombination of OpenCL v1.1 s6.3.i and s6.11.6, and the semantics\nremain unchanged in later versions of OpenCL.\n\nllvm-svn: 228118"},
		[j]={{F,8990,"/// Return false if the vector condition type and the vector\n///        result type are compatible.\n///\n/// OpenCL v1.1 s6.11.6 requires that both vector types have the same\n/// number of elements, and their element types have the same number\n/// of bits.\nstatic bool checkVectorResult(Sema &S, QualType CondTy, QualType VecResTy, SourceLocation QuestionLoc) {\n  // ...\n  if (CV->getNumElements() != RV->getNumElements()) {\n    S.Diag(QuestionLoc, diag::err_conditional_vector_size) << CondTy << VecResTy;"},{D,6392,"QualType Sema::CheckVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"},{D,6475,"QualType Sema::CheckSizelessVectorConditionalTypes(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (ResultElementCount != CondElementCount) {\n    Diag(QuestionLoc, diag::err_conditional_vector_size) << CondType << ResultType;"}},
		[l]={
			["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:123:12: error: vector condition type \'char2\' (vector of 2 \'char\' values) and result type \'char3\' (vector of 3 \'char\' values) do not have the same number of elements"}
		}
	},
	["err_conditional_void_nonvoid"]={
		[c]="err_conditional_void_nonvoid",
		[d]="%select{left|right}1 operand to ? is void, but %select{right|left}1 operand is of type %0",
		[f]={{nil,nil,{{"left","right"}," operand to ? is void, but ",{"right","left"}," operand is of type A"}}},
		[b]=k,
		[g]="(?:left|right) operand to \\? is void, but (?:right|left) operand is of type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"1a99f441e64c",1239904287,"Fix a crash bug when comparing overload quality of conversion operators with conversion constructors...","Fix a crash bug when comparing overload quality of conversion operators with conversion constructors.\nRemove an atrocious amount of trailing whitespace in the overloaded operator mangler. Sorry, couldn\'t help myself.\nChange the DeclType parameter of Sema::CheckReferenceInit to be passed by value instead of reference. It wasn\'t changed anywhere.\nLet the parser handle C++\'s irregular grammar around assignment-expression and conditional-expression.\nAnd finally, the reason for all this stuff: implement C++ semantics for the conditional operator. The implementation is complete except for determining lvalueness.\n\nllvm-svn: 69299"},
		[j]={{D,6589,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///   (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///   (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  if (LVoid || RVoid) {\n    // ...\n    Diag(QuestionLoc, diag::err_conditional_void_nonvoid) << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/conditional-expr.cpp"]={"clang/test/SemaCXX/conditional-expr.cpp:88:6: error: right operand to ? is void, but left operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:89:6: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:94:7: error: left operand to ? is void, but right operand is of type \'int\'","clang/test/SemaCXX/conditional-expr.cpp:95:7: error: right operand to ? is void, but left operand is of type \'int\'"}
		}
	},
	["err_config_scalar_return"]={
		[c]="err_config_scalar_return",
		[d]={{nil,n,"CUDA special function \'%0\' must have scalar return type"},{B,nil,"CUDA special function \'cudaConfigureCall\' must have scalar return type"}},
		[f]={{nil,n,"CUDA special function \'A\' must have scalar return type"},{B,nil,"CUDA special function \'cudaConfigureCall\' must have scalar return type"}},
		[b]=k,
		[g]="CUDA special function \'(.*?)\' must have scalar return type",
		[h]=a,
		[i]=m,
		[e]={"9e2c81f00a0a",1297285472,"AST, Sema, Serialization: keep track of cudaConfigureCall","AST, Sema, Serialization: keep track of cudaConfigureCall\n\nllvm-svn: 125216"},
		[j]={{r,10667,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CUDA) {\n    // ...\n    if (II && II->isStr(getCudaConfigureFuncName()) && !NewFD->isInvalidDecl() && NewFD->getDeclContext()->getRedeclContext()->isTranslationUnit()) {\n      if (!R->castAs<FunctionType>()->getReturnType()->isScalarType())\n        Diag(NewFD->getLocation(), diag::err_config_scalar_return) << getCudaConfigureFuncName();"}},
		[l]={
			["clang/test/SemaCUDA/config-type.cu"]={"clang/test/SemaCUDA/config-type.cu:7:6: error: CUDA special function \'__cudaPushCallConfiguration\' must have scalar return type"}
		}
	},
	["err_conflict_marker"]={
		[c]="err_conflict_marker",
		[d]="version control conflict marker in file",
		[f]="version control conflict marker in file",
		[b]=k,
		[g]="version control conflict marker in file",
		[h]=a,
		[i]=Ab,
		[e]={"7c027ee4c272",1260771417,"teach clang to recover gracefully from conflict markers left in source","teach clang to recover gracefully from conflict markers left in source\nfiles: PR5238.\n\nllvm-svn: 91270"},
		[j]={{"clang/lib/Lex/Lexer.cpp",3162,"/// IsStartOfConflictMarker - If the specified pointer is the start of a version\n/// control conflict marker like \'<<<<<<<\', recognize it as such, emit an error\n/// and recover nicely.  This returns true if it is a conflict marker and false\n/// if not.\nbool Lexer::IsStartOfConflictMarker(const char *CurPtr) {\n  // ...\n  // Check to see if there is an ending marker somewhere in the buffer at the\n  // start of a line to terminate this conflict marker.\n  if (FindConflictEnd(CurPtr, BufferEnd, Kind)) {\n    // ...\n    Diag(CurPtr, diag::err_conflict_marker);"}},
		[l]={
			["clang/test/Lexer/conflict-marker.c"]={"clang/test/Lexer/conflict-marker.c:7:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:16:1: error: version control conflict marker in file","clang/test/Lexer/conflict-marker.c:23:1: error: version control conflict marker in file"}
		}
	},
	["err_conflicting_aliasing_type"]={
		[c]="err_conflicting_aliasing_type",
		[d]="conflicting types for alias %0",
		[f]="conflicting types for alias A",
		[b]=k,
		[g]="conflicting types for alias (.*?)",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{Z,1156,"/// ActOnCompatibilityAlias - this action is called after complete parsing of\n/// a \\@compatibility_alias declaration. It sets up the alias relationships.\nDecl *Sema::ActOnCompatibilityAlias(SourceLocation AtLoc, IdentifierInfo *AliasName, SourceLocation AliasLocation, IdentifierInfo *ClassName, SourceLocation ClassLocation) {\n  // ...\n  if (ADecl) {\n    Diag(AliasLocation, diag::err_conflicting_aliasing_type) << AliasName;"}},
		[l]={
			["clang/test/SemaObjC/alias-test-1.m"]={"clang/test/SemaObjC/alias-test-1.m:13:22: error: conflicting types for alias \'alias\'","clang/test/SemaObjC/alias-test-1.m:17:22: error: conflicting types for alias \'alias2\'"}
		}
	},
	["err_conflicting_aligned_options"]={
		[c]={{nil,I,"err_conflicting_aligned_options"}},
		[d]={{nil,I,"conflicting option \'-fcoro-aligned-allocation\' and \'-fno-aligned-allocation\'"}},
		[f]={{nil,I,"conflicting option \'-fcoro-aligned-allocation\' and \'-fno-aligned-allocation\'"}},
		[b]=k,
		[g]="conflicting option \'\\-fcoro\\-aligned\\-allocation\' and \'\\-fno\\-aligned\\-allocation\'",
		[h]=a,
		[i]={{nil,I,"Coroutines Issue"}},
		[e]={ib,1625925174,hb,gb}
	},
	["err_conflicting_codeseg_attribute"]={
		[c]={{nil,E,"err_conflicting_codeseg_attribute"}},
		[d]={{nil,E,"conflicting code segment specifiers"}},
		[f]={{nil,E,"conflicting code segment specifiers"}},
		[b]=k,
		[g]="conflicting code segment specifiers",
		[h]=a,
		[i]={{nil,E,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]={{q,3401,"static void handleCodeSegAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *ExistingAttr = D->getAttr<CodeSegAttr>()) {\n    if (!ExistingAttr->isImplicit()) {\n      S.Diag(AL.getLoc(), ExistingAttr->getName() == Str ? diag::warn_duplicate_codeseg_attribute : diag::err_conflicting_codeseg_attribute);"}},
		[l]={
			["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:83:44: error: conflicting code segment specifiers","clang/test/SemaCXX/code-seg.cpp:91:47: error: conflicting code segment specifiers","clang/test/SemaCXX/code-seg.cpp:100:46: error: conflicting code segment specifiers"}
		}
	},
	["err_conflicting_ivar_bitwidth"]={
		[c]="err_conflicting_ivar_bitwidth",
		[d]="instance variable %0 has conflicting bit-field width",
		[f]="instance variable A has conflicting bit-field width",
		[b]=k,
		[g]="instance variable (.*?) has conflicting bit\\-field width",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{Z,2215,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n    // ...\n    } else if (ImplIvar->isBitField() && ClsIvar->isBitField() && ImplIvar->getBitWidthValue(Context) != ClsIvar->getBitWidthValue(Context)) {\n      Diag(ImplIvar->getBitWidth()->getBeginLoc(), diag::err_conflicting_ivar_bitwidth) << ImplIvar->getIdentifier();"}},
		[l]={
			["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:35:10: error: instance variable \'c\' has conflicting bit-field width"}
		}
	},
	["err_conflicting_ivar_name"]={
		[c]="err_conflicting_ivar_name",
		[d]="conflicting instance variable names: %0 vs %1",
		[f]="conflicting instance variable names: A vs B",
		[b]=k,
		[g]="conflicting instance variable names\\: (.*?) vs (.*?)",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{Z,2222,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // Make sure the names are identical.\n    if (ImplIvar->getIdentifier() != ClsIvar->getIdentifier()) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_name) << ImplIvar->getIdentifier() << ClsIvar->getIdentifier();"}},
		[l]={
			["clang/test/SemaObjC/conflicting-ivar-test-1.m"]={"clang/test/SemaObjC/conflicting-ivar-test-1.m:14:13: error: conflicting instance variable names: \'XIVAR\' vs \'IVAR\'"}
		}
	},
	["err_conflicting_ivar_type"]={
		[c]="err_conflicting_ivar_type",
		[d]="instance variable %0 has conflicting type%diff{: $ vs $|}1,2",
		[f]={{nil,nil,{"instance variable A has conflicting type",{": B vs C",a}}}},
		[b]=k,
		[g]="instance variable (.*?) has conflicting type(?:\\: (.*?) vs (.*?)|)",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{Z,2207,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  for (; numIvars > 0 && IVI != IVE; ++IVI) {\n    // ...\n    // First, make sure the types match.\n    if (!Context.hasSameType(ImplIvar->getType(), ClsIvar->getType())) {\n      Diag(ImplIvar->getLocation(), diag::err_conflicting_ivar_type) << ImplIvar->getIdentifier() << ImplIvar->getType() << ClsIvar->getType();"}},
		[l]={
			["clang/test/SemaObjC/class-bitfield.m"]={"clang/test/SemaObjC/class-bitfield.m:32:9: error: instance variable \'isa\' has conflicting type: \'char *\' vs \'void *\'"}
		}
	},
	["err_conflicting_overriding_cc_attributes"]={
		[c]="err_conflicting_overriding_cc_attributes",
		[d]="virtual function %0 has different calling convention attributes %diff{($) than the function it overrides (which has calling convention $)|than the function it overrides}1,2",
		[f]={{nil,nil,{"virtual function A has different calling convention attributes ",{"(B) than the function it overrides (which has calling convention C)","than the function it overrides"}}}},
		[b]=k,
		[g]="virtual function (.*?) has different calling convention attributes (?:\\((.*?)\\) than the function it overrides \\(which has calling convention (.*?)\\)|than the function it overrides)",
		[h]=a,
		[i]=m,
		[e]={"02df2e08720f",1355075141,"Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339.","Virtual method overrides can no longer have mismatched calling conventions.  This fixes PR14339.\n\nllvm-svn: 169705"},
		[j]={{w,18013,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_conflicting_overriding_cc_attributes) << New->getDeclName() << New->getType() << Old->getType();"}},
		[l]={
			["clang/test/SemaCXX/virtual-override-x86.cpp"]={"clang/test/SemaCXX/virtual-override-x86.cpp:11:33: error: virtual function \'f\' has different calling convention attributes (\'void () __attribute__((cdecl))\') than the function it overrides (which has calling convention \'void () __attribute__((thiscall))\')","clang/test/SemaCXX/virtual-override-x86.cpp:31:10: error: virtual function \'g\' has different calling convention attributes (\'void () __attribute__((thiscall))\') than the function it overrides (which has calling convention \'void () __attribute__((stdcall))\')"}
		}
	},
	["err_conflicting_super_class"]={
		[c]="err_conflicting_super_class",
		[d]="conflicting super class name %0",
		[f]="conflicting super class name A",
		[b]=k,
		[g]="conflicting super class name (.*?)",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{Z,2039,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (SuperClassname) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    // ...\n    } else {\n      // ...\n      if (!SDecl)\n      // ...\n      else if (IDecl && !declaresSameEntity(IDecl->getSuperClass(), SDecl)) {\n        // ...\n        Diag(SuperClassLoc, diag::err_conflicting_super_class) << SDecl->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/alias-test-2.m"]={"clang/test/SemaObjC/alias-test-2.m:12:27: error: conflicting super class name \'Super\'"}
		}
	},
	["err_conflicting_types"]={
		[c]="err_conflicting_types",
		[d]="conflicting types for %0",
		[f]="conflicting types for A",
		[b]=k,
		[g]="conflicting types for (.*?)",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{r,4130,"/// 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  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // C99 6.7.5.3p15: ...If one type has a parameter type list and the other\n    // type is specified by a function definition that contains a (possibly\n    // empty) identifier list, both shall agree in the number of parameters\n    // and the type of each parameter shall be compatible with the type that\n    // results from the application of default argument promotions to the\n    // type of the corresponding identifier. ...\n    // This cannot be handled by ASTContext::typesAreCompatible() because that\n    // doesn\'t know whether the function type is for a definition or not when\n    // eventually calling ASTContext::mergeFunctionTypes(). The only situation\n    // we need to cover here is that the number of arguments agree as the\n    // default argument promotion rules were already checked by\n    // ASTContext::typesAreCompatible().\n    if (Old->hasPrototype() && !New->hasWrittenPrototype() && NewDeclIsDefn && Old->getNumParams() != New->getNumParams() && !Old->isImplicit()) {\n      // ...\n      Diag(New->getLocation(), diag::err_conflicting_types) << New;"},{r,4305,"/// 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  Diag(New->getLocation(), diag::err_conflicting_types) << New->getDeclName();"}},
		[l]={
			["clang/test/SemaCXX/ms-overload-entry-point.cpp"]={"clang/test/SemaCXX/ms-overload-entry-point.cpp:14:6: error: conflicting types for \'wWinMain\'"}
		}
	},
	["err_constant_integer_arg_type"]={
		[c]="err_constant_integer_arg_type",
		[d]="argument to %0 must be a constant integer",
		[f]="argument to A must be a constant integer",
		[b]=k,
		[g]="argument to (.*?) must be a constant integer",
		[h]=a,
		[i]=m,
		[e]={"8d0c621ca600",1271471183,"Consolidate most of the integer constant expression builtin requirement","Consolidate most of the integer constant expression builtin requirement\nchecking into a single function and use that throughout. Remove some\nnow unnecessary diagnostics and update tests with now more accurate\ndiagnostics.\n\nllvm-svn: 101610"},
		[j]={{A,8784,"/// SemaBuiltinConstantArg - Handle a check if argument ArgNum of CallExpr\n/// TheCall is a constant expression.\nbool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, llvm::APSInt &Result) {\n  // ...\n  if (!(R = Arg->getIntegerConstantExpr(Context)))\n    return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) << FDecl->getDeclName() << Arg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtin-stackaddress.c"]={"clang/test/Sema/builtin-stackaddress.c:8:8: error: argument to \'__builtin_return_address\' must be a constant integer","clang/test/Sema/builtin-stackaddress.c:27:8: error: argument to \'__builtin_frame_address\' must be a constant integer"}
		}
	},
	["err_consteval_override"]={
		[c]={{nil,o,"err_consteval_override"}},
		[d]={{nil,o,"consteval function %0 cannot override a non-consteval function"}},
		[f]={{nil,o,"consteval function A cannot override a non-consteval function"}},
		[b]=k,
		[g]="consteval function (.*?) cannot override a non\\-consteval function",
		[h]=a,
		[i]={{nil,o,m}},
		[e]={Kb,1576908663,Bb,Ib},
		[j]={{w,7040,"/// 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:461:20: error: consteval function \'g\' cannot override a non-consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:485:38: error: consteval function \'operator==\' cannot override a non-consteval function"}
		}
	},
	["err_constexpr_body_invalid_stmt"]={
		[c]="err_constexpr_body_invalid_stmt",
		[d]={{nil,n,"statement not allowed in %select{constexpr|consteval}1 %select{function|constructor}0"},{B,nil,"statement not allowed in constexpr %select{function|constructor}0"}},
		[f]={{nil,n,{"statement not allowed in ",{T,U}," ",{N,V}}},{B,nil,{"statement not allowed in constexpr ",{N,V}}}},
		[b]=k,
		[g]="statement not allowed in (?:constexpr|consteval) (?:function|constructor)",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,1990,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///         have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    default:\n      if (Kind == Sema::CheckConstexprKind::Diagnose) {\n        SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"},{w,2220,"/// Check the provided statement is allowed in a constexpr function\n/// definition.\nstatic bool CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl<SourceLocation> &ReturnStmts, SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, SourceLocation &Cxx2bLoc, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (Kind == Sema::CheckConstexprKind::Diagnose) {\n    SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl) << Dcl->isConsteval();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:93:5: error: statement not allowed in constexpr constructor"}
		}
	},
	["err_constexpr_body_no_return"]={
		[c]="err_constexpr_body_no_return",
		[d]={{nil,n,"no return statement in %select{constexpr|consteval}0 function"},{B,nil,"no return statement in constexpr function"}},
		[f]={{nil,n,{"no return statement in ",{T,U}," function"}},{B,nil,"no return statement in constexpr function"}},
		[b]=k,
		[g]="no return statement in (?:constexpr|consteval) function",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,2379,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  // ...\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  // ...\n  } else {\n    if (ReturnStmts.empty()) {\n      // ...\n      case Sema::CheckConstexprKind::Diagnose:\n        SemaRef.Diag(Dcl->getLocation(), OK ? diag::warn_cxx11_compat_constexpr_body_no_return : diag::err_constexpr_body_no_return) << Dcl->isConsteval();"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:48:15: error: no return statement in consteval function"}
		}
	},
	["err_constexpr_dtor"]={
		[c]="err_constexpr_dtor",
		[d]={{nil,p,"destructor cannot be declared %select{<ERROR>|constexpr|consteval|constinit}0"},{n,n,"destructor cannot be marked %select{constexpr|consteval}0"},{B,nil,"destructor cannot be marked constexpr"}},
		[f]={{nil,p,{"destructor cannot be declared ",{T,U,Ob}}},{n,n,{"destructor cannot be marked ",{T,U}}},{B,nil,"destructor cannot be marked constexpr"}},
		[b]=k,
		[g]="destructor cannot be declared (?:constexpr|consteval|constinit)",
		[h]=a,
		[i]=m,
		[e]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
		[j]={{r,9963,"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 (ConstexprKind != ConstexprSpecKind::Unspecified) {\n      // ...\n      // C++11 [dcl.constexpr]p3: functions declared constexpr are required to\n      // be either constructors or to return a literal type. Therefore,\n      // destructors cannot be declared constexpr.\n      if (isa<CXXDestructorDecl>(NewFD) && (!getLangOpts().CPlusPlus20 || ConstexprKind == ConstexprSpecKind::Consteval)) {\n        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_dtor) << static_cast<int>(ConstexprKind);"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:11:3: error: destructor cannot be declared constexpr"}
		}
	},
	["err_constexpr_dtor_subobject"]={
		[c]={{nil,p,"err_constexpr_dtor_subobject"}},
		[d]={{nil,p,"destructor cannot be declared %select{<ERROR>|constexpr|consteval|constinit}0 because %select{data member %2|base class %3}1 does not have a constexpr destructor"}},
		[f]={{nil,p,{"destructor cannot be declared ",{T,U,Ob}," because ",{"data member C","base class D"}," does not have a constexpr destructor"}}},
		[b]=k,
		[g]="destructor cannot be declared (?:constexpr|consteval|constinit) because (?:data member (.*?)|base class (.*?)) does not have a constexpr destructor",
		[h]=a,
		[i]={{nil,p,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]={{w,1697,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    // ...\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(DD->getLocation(), diag::err_constexpr_dtor_subobject) << static_cast<int>(DD->getConstexprKind()) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:62:15: error: destructor cannot be declared constexpr because base class \'A\' does not have a constexpr destructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:66:15: error: destructor cannot be declared constexpr because data member \'a\' does not have a constexpr destructor"}
		}
	},
	["err_constexpr_if_condition_expression_is_not_constant"]={
		[c]={{nil,t,"err_constexpr_if_condition_expression_is_not_constant"}},
		[d]={{nil,t,"constexpr if condition is not a constant expression"}},
		[f]={{nil,t,"constexpr if condition is not a constant expression"}},
		[b]=k,
		[g]="constexpr if condition is not a constant expression",
		[h]=a,
		[i]={{nil,t,m}},
		[e]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n  float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315"},
		[j]={{D,4058,"/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid.\nExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr) {\n  // ...\n  E = VerifyIntegerConstantExpression(E.get(), &Cond, diag::err_constexpr_if_condition_expression_is_not_constant);"}},
		[l]={
			["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:63:19: error: constexpr if condition is not a constant expression","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p2.cpp:65:19: error: constexpr if condition is not a constant expression"}
		}
	},
	["err_constexpr_invalid_template_arg"]={
		[c]={{nil,H,"err_constexpr_invalid_template_arg"}},
		[d]={{nil,H,"%select{pointer|reference}0 to %select{|subobject of }1%select{type_info object|string literal|temporary object|predefined \'%3\' variable}2 is not allowed in a template argument"}},
		[f]={{nil,H,{{"pointer","reference"}," to ",{a,"subobject of "},{"type_info object","string literal","temporary object","predefined \'D\' variable"}," is not allowed in a template argument"}}},
		[b]=k,
		[g]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument",
		[h]=a,
		[i]={{nil,H,G}},
		[e]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer","For P0732R2, P1907R1: ensure that template parameter objects don\'t refer\nto disallowed objects or have non-constant destruction."},
		[j]={{"clang/lib/Sema/SemaOverload.cpp",5990,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  // ...\n  // It\'s not a constant expression. Produce an appropriate diagnostic.\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {\n  // ...\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {\n    Notes[0].second.setDiagID(diag::err_constexpr_invalid_template_arg);"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:233:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:234:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:239:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:240:5: error: reference to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:244:5: error: reference to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:247:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:248:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:249:5: error: pointer to subobject of temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:253:5: error: pointer to temporary object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:258:5: error: pointer to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:259:5: error: reference to string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:260:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:261:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:265:5: error: pointer to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:266:5: error: reference to subobject of string literal is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:271:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:272:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:276:5: error: pointer to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:277:5: error: reference to type_info object is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:287:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:288:7: error: pointer to subobject of predefined \'__PRETTY_FUNCTION__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:289:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:290:7: error: pointer to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:291:7: error: reference to predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:292:7: error: pointer to subobject of predefined \'__func__\' variable is not allowed in a template argument","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:293:7: error: reference to subobject of predefined \'__func__\' variable is not allowed in a template argument"}
		}
	},
	["err_constexpr_local_var_non_literal_type"]={
		[c]="err_constexpr_local_var_non_literal_type",
		[d]="variable of non-literal type %1 cannot be defined in a constexpr %select{function|constructor}0 before C++23",
		[f]={{nil,nil,{"variable of non-literal type B cannot be defined in a constexpr ",{N,V}," before C++23"}},{I,C,{"variable of non-literal type B cannot be defined in a constexpr ",{N,V}," before C++2b"}},{v,nil,{"variable of non-literal type B cannot be defined in a constexpr ",{N,V}}}},
		[b]=k,
		[g]="variable of non\\-literal type (.*?) cannot be defined in a constexpr (?:function|constructor) before C\\+\\+23",
		[h]=a,
		[i]=m,
		[e]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and","C++1y constexpr extensions, round 1: Allow most forms of declaration and\nstatement in constexpr functions. Everything which doesn\'t require variable\nmutation is also allowed as an extension in C++11. \'void\' becomes a literal\ntype to support constexpr functions which return \'void\'.\n\nllvm-svn: 180022"},
		[j]={{w,1949,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///         have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Var:\n    case Decl::Decomposition: {\n      // ...\n      if (VD->isThisDeclarationADefinition()) {\n        // ...\n        } else if (CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(), diag::err_constexpr_local_var_non_literal_type, isa<CXXConstructorDecl>(Dcl))) {"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:32:14: error: variable of non-literal type \'Nonlit\' cannot be defined in a constexpr function before C++23"}
		}
	},
	["err_constexpr_main"]={
		[c]="err_constexpr_main",
		[d]={{nil,n,"\'main\' is not allowed to be declared %select{constexpr|consteval}0"},{B,nil,"\'main\' is not allowed to be declared constexpr"}},
		[f]={{nil,n,{"\'main\' is not allowed to be declared ",{T,U}}},{B,nil,"\'main\' is not allowed to be declared constexpr"}},
		[b]=k,
		[g]="\'main\' is not allowed to be declared (?:constexpr|consteval)",
		[h]=a,
		[i]=m,
		[e]={"3f333f2edf49",1328335817,"Disallow constexpr main.","Disallow constexpr main.\n\nllvm-svn: 149770"},
		[j]={{r,12090,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (FD->isConstexpr()) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_main) << FD->isConsteval() << FixItHint::CreateRemoval(DS.getConstexprSpecLoc());"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:66:1: error: \'main\' is not allowed to be declared consteval"}
		}
	},
	["err_constexpr_non_literal_param"]={
		[c]="err_constexpr_non_literal_param",
		[d]={{nil,n,"%select{constexpr|consteval}2 %select{function|constructor}1\'s %ordinal0 parameter type %3 is not a literal type"},{B,nil,"constexpr %select{function|constructor}1\'s %ordinal0 parameter type %2 is not a literal type"}},
		[f]={{nil,n,{{T,U}," ",{N,V},"\'s A parameter type D is not a literal type"}},{B,nil,{"constexpr ",{N,V},"\'s A parameter type C is not a literal type"}}},
		[b]=k,
		[g]="(?:constexpr|consteval) (?:function|constructor)\'s (.*?) parameter type (.*?) is not a literal type",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,1730,"/// Check whether a function\'s parameter types are all literal types. If so,\n/// return true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprParameterTypes(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  // ...\n  for (FunctionProtoType::param_type_iterator i = FT->param_type_begin(), e = FT->param_type_end(); i != e; ++i, ++ArgIndex) {\n    // ...\n    if (CheckLiteralType(SemaRef, Kind, ParamLoc, *i, diag::err_constexpr_non_literal_param, ArgIndex + 1, PD->getSourceRange(), isa<CXXConstructorDecl>(FD), FD->isConsteval()))"}},
		[l]={
			["clang/test/CXX/basic/basic.types/p10.cpp"]={"clang/test/CXX/basic/basic.types/p10.cpp:43:29: error: constexpr function\'s 1st parameter type \'UserProvDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:48:28: error: constexpr function\'s 1st parameter type \'NonTrivDtor\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:56:56: error: constexpr function\'s 1st parameter type \'DerivedFromNonTrivDtor<NonTrivDtorBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:80:29: error: constexpr function\'s 1st parameter type \'CopyCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:84:29: error: constexpr function\'s 1st parameter type \'MoveCtorOnly\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:100:43: error: constexpr function\'s 1st parameter type \'DerivedFromVBase<HasVBase>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:108:29: error: constexpr function\'s 1st parameter type \'NonLitMember\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:113:27: error: constexpr function\'s 1st parameter type \'NonLitBase\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:123:39: error: constexpr function\'s 1st parameter type \'MemberType<NonLiteral>\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:137:23: error: constexpr function\'s 1st parameter type \'ArrBad\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:158:20: error: constexpr function\'s 1st parameter type \'D\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:177:20: error: constexpr function\'s 1st parameter type \'H\' is not a literal type"}
		}
	},
	["err_constexpr_non_literal_return"]={
		[c]="err_constexpr_non_literal_return",
		[d]={{nil,n,"%select{constexpr|consteval}0 function\'s return type %1 is not a literal type"},{B,nil,"constexpr function\'s return type %0 is not a literal type"}},
		[f]={{nil,n,{{T,U}," function\'s return type B is not a literal type"}},{B,nil,"constexpr function\'s return type A is not a literal type"}},
		[b]=k,
		[g]="(?:constexpr|consteval) function\'s return type (.*?) is not a literal type",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,1743,"/// Check whether a function\'s return type is a literal type. If so, return\n/// true. If not, produce a suitable diagnostic and return false.\nstatic bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind) {\n  if (CheckLiteralType(SemaRef, Kind, FD->getLocation(), FD->getReturnType(), diag::err_constexpr_non_literal_return, FD->isConsteval()))"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:67:26: error: constexpr function\'s return type \'T3<VirtBase>\' is not a literal type"}
		}
	},
	["err_constexpr_redecl_mismatch"]={
		[c]="err_constexpr_redecl_mismatch",
		[d]={{nil,n,"%select{non-constexpr|constexpr|consteval}1 declaration of %0 follows %select{non-constexpr|constexpr|consteval}2 declaration"},{B,nil,"%select{non-constexpr declaration of %0 follows constexpr declaration|constexpr declaration of %0 follows non-constexpr declaration}1"}},
		[f]={{nil,n,{{"non-constexpr",T,U}," declaration of A follows ",{"non-constexpr",T,U}," declaration"}},{B,nil,{{"non-constexpr declaration of A follows constexpr declaration","constexpr declaration of A follows non-constexpr declaration"}}}},
		[b]=k,
		[g]="(?:non\\-constexpr|constexpr|consteval) declaration of (.*?) follows (?:non\\-constexpr|constexpr|consteval) declaration",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,672,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++11 [dcl.constexpr]p1: If any declaration of a function or function\n  // template has a constexpr specifier then all its declarations shall\n  // contain the constexpr specifier.\n  if (New->getConstexprKind() != Old->getConstexprKind()) {\n    Diag(New->getLocation(), diag::err_constexpr_redecl_mismatch) << New << static_cast<int>(New->getConstexprKind()) << static_cast<int>(Old->getConstexprKind());"}},
		[l]={
			["clang/test/CXX/special/class.copy/p13-0x.cpp"]={"clang/test/CXX/special/class.copy/p13-0x.cpp:100:25: error: constexpr declaration of \'V\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:103:25: error: constexpr declaration of \'W\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:109:28: error: constexpr declaration of \'S\' follows non-constexpr declaration","clang/test/CXX/special/class.copy/p13-0x.cpp:112:28: error: constexpr declaration of \'S\' follows non-constexpr declaration"}
		}
	},
	["err_constexpr_return_missing_expr"]={
		[c]="err_constexpr_return_missing_expr",
		[d]={{nil,n,"non-void %select{constexpr|consteval}1 function %0 should return a value"},{B,nil,"non-void constexpr function %0 should return a value"}},
		[f]={{nil,n,{"non-void ",{T,U}," function A should return a value"}},{B,nil,"non-void constexpr function A should return a value"}},
		[b]=k,
		[g]="non\\-void (?:constexpr|consteval) function (.*?) should return a value",
		[h]=a,
		[i]=m,
		[e]={"2887ad35c58d",1418458376,"Sema: Constexpr functions must have return statements which have an expr","Sema: Constexpr functions must have return statements which have an expr\n\nclang lets programmers be pretty cavalier when it comes to void return\nstatements in functions which have non-void return types.  However, we\ncannot be so forgiving in constexpr functions: evaluation will go off\nthe rails very quickly.\n\nInstead, keep the return statement in the AST but mark the function as\ninvalid.  Doing so gives us nice diagnostics while making constexpr\nevaluation halt.\n\nThis fixes PR21859.\n\nllvm-svn: 224189"},
		[j]={{bb,4134,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n  // ...\n  } else if (!RetValExp && !HasDependentReturnType) {\n    // ...\n    if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n    // ...\n    } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n      // ...\n      Diag(ReturnLoc, diag::err_constexpr_return_missing_expr) << FD << FD->isConsteval();"}},
		[l]={
			["clang/test/SemaCXX/consteval-return-void.cpp"]={"clang/test/SemaCXX/consteval-return-void.cpp:3:23: error: non-void consteval function \'Fun\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:5:47: error: non-void consteval function \'FunT1\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:8:42: error: non-void consteval function \'FunT2<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:12:30: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:13:30: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:14:52: error: non-void constexpr function \'operator+\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:15:52: error: non-void consteval function \'operator-\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:19:47: error: non-void constexpr function \'operator*<int>\' should return a value","clang/test/SemaCXX/consteval-return-void.cpp:20:47: error: non-void consteval function \'operator/<int>\' should return a value"}
		}
	},
	["err_constexpr_static_mem_var_requires_init"]={
		[c]="err_constexpr_static_mem_var_requires_init",
		[d]="declaration of constexpr static data member %0 requires an initializer",
		[f]="declaration of constexpr static data member A requires an initializer",
		[b]=k,
		[g]="declaration of constexpr static data member (.*?) requires an initializer",
		[h]=a,
		[i]=m,
		[e]={"eda3c8469827",1320704177,"constexpr: static data members declared constexpr are required to have an","constexpr: static data members declared constexpr are required to have an\ninitializer; all other constexpr variables are merely required to be\ninitialized. In particular, a user-provided constexpr default constructor can be\nused for such initialization.\n\nllvm-svn: 144028"},
		[j]={{r,13686,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // C++11 [class.static.data]p3: A static data member can be declared with\n    // the constexpr specifier; if so, its declaration shall specify\n    // a brace-or-equal-initializer.\n    // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to\n    // the definition of a variable [...] or the declaration of a static data\n    // member.\n    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && !Var->isThisDeclarationADemotedDefinition()) {\n      if (Var->isStaticDataMember()) {\n        // C++1z removes the relevant rule; the in-class declaration is always\n        // a definition there.\n        if (!getLangOpts().CPlusPlus17 && !Context.getTargetInfo().getCXXABI().isMicrosoft()) {\n          Diag(Var->getLocation(), diag::err_constexpr_static_mem_var_requires_init) << Var;"}},
		[l]={
			["clang/test/CXX/class/class.static/class.static.data/p3.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p3.cpp:10:24: error: declaration of constexpr static data member \'b\' requires an initializer","clang/test/CXX/class/class.static/class.static.data/p3.cpp:40:24: error: declaration of constexpr static data member \'b\' requires an initializer"}
		}
	},
	["err_constexpr_tag"]={
		[c]="err_constexpr_tag",
		[d]="%select{class|struct|interface|union|enum|enum class|enum struct}0 cannot be marked %select{<ERROR>|constexpr|consteval|constinit}1",
		[f]={{nil,nil,{{tb,kc,jc,"union","enum","enum class","enum struct"}," cannot be marked ",{T,U,Ob}}},{I,p,{{tb,kc,jc,"union","enum"}," cannot be marked ",{T,U,Ob}}},{n,n,{{tb,kc,jc,"union","enum"}," cannot be marked ",{T,U}}},{B,nil,{{tb,kc,jc,"union","enum"}," cannot be marked constexpr"}}},
		[b]=k,
		[g]="(?:class|struct|interface|union|enum|enum class|enum struct) cannot be marked (?:constexpr|consteval|constinit)",
		[h]=a,
		[i]=m,
		[e]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
		[j]={{r,5123,"/// 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.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_tag) << GetDiagnosticTypeSpecifierID(DS) << static_cast<int>(DS.getConstexprSpecifier());"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:37:1: error: struct cannot be marked consteval"}
		}
	},
	["err_constexpr_var_non_literal"]={
		[c]="err_constexpr_var_non_literal",
		[d]="constexpr variable cannot have non-literal type %0",
		[f]="constexpr variable cannot have non-literal type A",
		[b]=k,
		[g]="constexpr variable cannot have non\\-literal type (.*?)",
		[h]=a,
		[i]=m,
		[e]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues","Update constexpr implementation to match CWG\'s chosen approach for core issues\n1358, 1360, 1452 and 1453.\n - Instantiations of constexpr functions are always constexpr. This removes the\n   need for separate declaration/definition checking, which is now gone.\n - This makes it possible for a constexpr function to be virtual, if they are\n   only dependently virtual. Virtual calls to such functions are not constant\n   expressions.\n - Likewise, it\'s now possible for a literal type to have virtual base classes.\n   A constexpr constructor for such a type cannot actually produce a constant\n   expression, though, so add a special-case diagnostic for a constructor call\n   to such a type rather than trying to evaluate it.\n - Classes with trivial default constructors (for which value initialization can\n   produce a fully-initialized value) are considered literal types.\n - Classes with volatile members are not literal types.\n - constexpr constructors can be members of non-literal types. We do not yet use\n   static initialization for global objects constructed in this way.\n\nllvm-svn: 150359"},
		[j]={{r,8762,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (NewVD->isConstexpr() && !T->isDependentType() && RequireLiteralType(NewVD->getLocation(), T, diag::err_constexpr_var_non_literal)) {"}},
		[l]={
			["clang/test/CXX/special/class.ctor/p6-0x.cpp"]={"clang/test/CXX/special/class.ctor/p6-0x.cpp:25:25: error: constexpr variable cannot have non-literal type \'const NonConstexpr3\'"}
		}
	},
	["err_constexpr_var_requires_const_destruction"]={
		[c]={{nil,p,"err_constexpr_var_requires_const_destruction"}},
		[d]={{nil,p,"constexpr variable %0 must have constant destruction"}},
		[f]={{nil,p,"constexpr variable A must have constant destruction"}},
		[b]=k,
		[g]="constexpr variable (.*?) must have constant destruction",
		[h]=a,
		[i]={{nil,p,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]={{w,15886,"void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {\n  // ...\n  // If the destructor is constexpr, check whether the variable has constant\n  // destruction now.\n  if (Destructor->isConstexpr()) {\n    // ...\n    if (!VD->evaluateDestruction(Notes) && VD->isConstexpr() && HasConstantInit) {\n      Diag(VD->getLocation(), diag::err_constexpr_var_requires_const_destruction) << VD;"}},
		[l]={
			["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:17:19: error: constexpr variable \'mut_member\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:23:24: error: constexpr variable \'mut_store\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:35:24: error: constexpr variable \'mc\' must have constant destruction","clang/test/CXX/expr/expr.const/p6-2a.cpp:43:21: error: constexpr variable \'t\' must have constant destruction"}
		}
	},
	["err_constexpr_var_requires_const_init"]={
		[c]="err_constexpr_var_requires_const_init",
		[d]="constexpr variable %0 must be initialized by a constant expression",
		[f]="constexpr variable A must be initialized by a constant expression",
		[b]=k,
		[g]="constexpr variable (.*?) must be initialized by a constant expression",
		[h]=a,
		[i]=m,
		[e]={"2316cd8b798b",1317323497,"constexpr: semantic checking for constexpr variables.","constexpr: semantic checking for constexpr variables.\n\nWe had an extension which allowed const static class members of floating-point type to have in-class initializers, \'as a C++0x extension\'. However, C++0x does not allow this. The extension has been kept, and extended to all literal types in C++0x mode (with a fixit to add the \'constexpr\' specifier).\n\nllvm-svn: 140801"},
		[j]={{r,13830,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n      if (Var->isConstexpr())\n        Diag(Var->getLocation(), diag::err_constexpr_var_requires_const_init) << Var;"},{r,14221,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n      // ...\n      Diag(DiagLoc, diag::err_constexpr_var_requires_const_init) << var << Init->getSourceRange();"},{"clang/lib/Sema/SemaInit.cpp",8530,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (!ZeroInitializationFixit.empty()) {\n    // ...\n    // The initialization would have succeeded with this fixit. Since the fixit\n    // is on the error, we need to build a valid AST in this case, so this isn\'t\n    // handled in the Failed() branch above.\n    if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD << FixItHint::CreateInsertion(ZeroInitializationFixitLoc, ZeroInitializationFixit);"},{"clang/lib/Sema/SemaInit.cpp",9966,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_DefaultInitOfConst:\n    if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n    // ...\n    } else if (const auto *VD = dyn_cast_if_present<VarDecl>(Entity.getDecl()); VD && VD->isConstexpr()) {\n      S.Diag(Kind.getLocation(), diag::err_constexpr_var_requires_const_init) << VD;"}},
		[l]={
			["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:47:16: error: constexpr variable \'weak_function_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:49:16: error: constexpr variable \'weak_method_is_non_null\' must be initialized by a constant expression","clang/test/SemaCXX/attr-weak.cpp:56:16: error: constexpr variable \'virtual_weak_method_is_non_null\' must be initialized by a constant expression"}
		}
	},
	["err_constexpr_virtual"]={
		[c]="err_constexpr_virtual",
		[d]="virtual function cannot be constexpr",
		[f]="virtual function cannot be constexpr",
		[b]=k,
		[g]="virtual function cannot be constexpr",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,1814,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (!isa<CXXConstructorDecl>(NewFD)) {\n    // ...\n    if (Method && Method->isVirtual()) {\n      if (getLangOpts().CPlusPlus20) {\n      // ...\n      } else {\n        // ...\n        Diag(Method->getLocation(), diag::err_constexpr_virtual);"}},
		[l]={
			["clang/test/SemaCXX/cxx17-compat.cpp"]={"clang/test/SemaCXX/cxx17-compat.cpp:68:26: error: virtual function cannot be constexpr"}
		}
	},
	["err_constexpr_virtual_base"]={
		[c]="err_constexpr_virtual_base",
		[d]="constexpr %select{member function|constructor}0 not allowed in %select{struct|interface|class}1 with virtual base %plural{1:class|:classes}2",
		[f]={{nil,nil,{"constexpr ",{"member function",V}," not allowed in ",{kc,jc,tb}," with virtual base ",{tb,"classes"}}}},
		[b]=k,
		[g]="constexpr (?:member function|constructor) not allowed in (?:struct|interface|class) with virtual base (?:class|classes)",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,1789,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  // ...\n  if (MD && MD->isInstance()) {\n    // ...\n    if (RD->getNumVBases()) {\n      // ...\n      Diag(NewFD->getLocation(), diag::err_constexpr_virtual_base) << isa<CXXConstructorDecl>(NewFD) << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:52:15: error: constexpr constructor not allowed in struct with virtual base class"}
		}
	},
	["err_constexpr_vla"]={
		[c]="err_constexpr_vla",
		[d]="variably-modified type %0 cannot be used in a constexpr %select{function|constructor}1",
		[f]={{nil,nil,{"variably-modified type A cannot be used in a constexpr ",{N,V}}}},
		[b]=k,
		[g]="variably\\-modified type (.*?) cannot be used in a constexpr (?:function|constructor)",
		[h]=a,
		[i]=m,
		[e]={fb,1317436288,eb,db},
		[j]={{w,1890,"/// Check the given declaration statement is legal within a constexpr function\n/// body. C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.\n///\n/// \\return true if the body is OK (maybe only as an extension), false if we\n///         have diagnosed a problem.\nstatic bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind) {\n  // C++11 [dcl.constexpr]p3 and p4:\n  //  The definition of a constexpr function(p3) or constructor(p4) [...] shall\n  //  contain only\n  for (const auto *DclIt : DS->decls()) {\n    // ...\n    case Decl::Typedef:\n    case Decl::TypeAlias: {\n      // ...\n      if (TN->getUnderlyingType()->isVariablyModifiedType()) {\n        // Don\'t allow variably-modified types in constexpr functions.\n        if (Kind == Sema::CheckConstexprKind::Diagnose) {\n          // ...\n          SemaRef.Diag(TL.getBeginLoc(), diag::err_constexpr_vla) << TL.getSourceRange() << TL.getType() << isa<CXXConstructorDecl>(Dcl);"}}
	},
	["err_constexpr_wrong_decl_kind"]={
		[c]={{nil,n,"err_constexpr_wrong_decl_kind"}},
		[d]={{nil,p,"%select{<ERROR>|constexpr|consteval|constinit}0 can only be used in %select{|variable and function|function|variable}0 declarations"},{n,n,"%select{constexpr|consteval}0 can only be used in %select{variable and |}0function declarations"}},
		[f]={{nil,p,{{T,U,Ob}," can only be used in ",{a,"variable and function",N,"variable"}," declarations"}},{n,n,{{T,U}," can only be used in ",{"variable and ",a},"function declarations"}}},
		[b]=k,
		[g]="(?:constexpr|consteval|constinit) can only be used in (?:|variable and function|function|variable) declarations",
		[h]=a,
		[i]={{nil,n,m}},
		[e]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier","[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semantic for the consteval specifier as specified by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r3.html\n\nwith this patch, the consteval specifier is treated as constexpr but can only be applied to function declaration.\n\nChanges:\n - add the consteval keyword.\n - add parsing of consteval specifier for normal declarations and lambdas expressions.\n - add the whether a declaration is constexpr is now represented by and enum everywhere except for variable because they can\'t be consteval.\n - adapt diagnostic about constexpr to print constexpr or consteval depending on the case.\n - add tests for basic semantic.\n\nReviewers: rsmith, martong, shafik\n\nReviewed By: rsmith\n\nSubscribers: eraman, efriedma, rnkovacs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D61790\n\nllvm-svn: 363362"},
		[j]={{r,5127,"/// 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.hasConstexprSpecifier()) {\n    // C++0x [dcl.constexpr]p1: constexpr can only be applied to declarations\n    // and definitions of functions and variables.\n    // C++2a [dcl.constexpr]p1: The consteval specifier shall be applied only to\n    // the declaration of a function or function template\n    if (Tag)\n    // ...\n    else\n      Diag(DS.getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(DS.getConstexprSpecifier());"},{r,7790,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  case ConstexprSpecKind::Consteval:\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{r,9181,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n  if (ConstexprKind == ConstexprSpecKind::Constinit) {\n    SemaRef.Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constexpr_wrong_decl_kind) << static_cast<int>(ConstexprKind);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:44:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:48:1: error: constinit can only be used in variable declarations","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:50:1: error: constinit can only be used in variable declarations"}
		}
	},
	["err_constinit_added_too_late"]={
		[c]={{nil,p,"err_constinit_added_too_late"}},
		[d]={{nil,p,"\'constinit\' specifier added after initialization of variable"}},
		[f]={{nil,p,"\'constinit\' specifier added after initialization of variable"}},
		[b]=k,
		[g]="\'constinit\' specifier added after initialization of variable",
		[h]=a,
		[i]={{nil,p,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]={{r,3172,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  // ...\n  if (AttrBeforeInit) {\n  // ...\n  } else {\n    // ...\n    S.Diag(CIAttr->getLocation(), CIAttr->isConstinit() ? diag::err_constinit_added_too_late : diag::warn_require_const_init_added_too_late) << FixItHint::CreateRemoval(SourceRange(CIAttr->getLocation()));"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:15:10: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:40:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:41:1: error: \'constinit\' specifier added after initialization of variable","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:42:1: error: \'constinit\' specifier added after initialization of variable"}
		}
	},
	["err_constinit_local_variable"]={
		[c]={{nil,p,"err_constinit_local_variable"}},
		[d]={{nil,p,"local variable cannot be declared \'constinit\'"}},
		[f]={{nil,p,"local variable cannot be declared \'constinit\'"}},
		[b]=k,
		[g]="local variable cannot be declared \'constinit\'",
		[h]=a,
		[i]={{nil,p,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]={{r,7808,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  case ConstexprSpecKind::Constinit:\n    if (!NewVD->hasGlobalStorage())\n      Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_constinit_local_variable);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:10:3: error: local variable cannot be declared \'constinit\'"}
		}
	},
	["err_constrained_non_templated_function"]={
		[c]={{nil,C,"err_constrained_non_templated_function"}},
		[d]={{nil,C,"non-templated function cannot have a requires clause"}},
		[f]={{nil,C,"non-templated function cannot have a requires clause"}},
		[b]=k,
		[g]="non\\-templated function cannot have a requires clause",
		[h]=a,
		[i]={{nil,C,m}},
		[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]={{r,11984,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // C++20: dcl.decl.general p4:\n    // The optional requires-clause ([temp.pre]) in an init-declarator or\n    // member-declarator shall be present only if the declarator declares a\n    // templated function ([dcl.fct]).\n    if (Expr *TRC = NewFD->getTrailingRequiresClause()) {\n      // ...\n      if (!NewFD->getDescribedFunctionTemplate() && // -a template\n        // ...\n        Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"},{lb,1415,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  // C++20: dcl.decl.general p4:\n  // The optional requires-clause ([temp.pre]) in an init-declarator or\n  // member-declarator shall be present only if the declarator declares a\n  // templated function ([dcl.fct]).\n  if (Expr *TRC = Method->getTrailingRequiresClause()) {\n    // ...\n    // Note: we only have to check if this is defined in a template entity, OR\n    // if we are a template, since the rest don\'t apply. The requires clause\n    // applies to the call operator, which we already know is a member function,\n    // AND defined.\n    if (!Method->getDescribedFunctionTemplate() && !Method->isTemplated()) {\n      Diag(TRC->getBeginLoc(), diag::err_constrained_non_templated_function);"}},
		[l]={
			["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:11:34: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:12:42: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:13:53: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:15:35: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:16:31: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:18:30: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:20:23: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:17: error: non-templated function cannot have a requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:23:35: error: non-templated function cannot have a requires clause"}
		}
	},
	["err_constrained_virtual_method"]={
		[c]={{nil,p,"err_constrained_virtual_method"}},
		[d]={{nil,p,"virtual function cannot have a requires clause"}},
		[f]={{nil,p,"virtual function cannot have a requires clause"}},
		[b]=k,
		[g]="virtual function cannot have a requires clause",
		[h]=a,
		[i]={{nil,p,m}},
		[e]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
		[j]={{r,11948,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    // Find any virtual functions that this function overrides.\n    if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(NewFD)) {\n      // ...\n      if (Method->isVirtual() && NewFD->getTrailingRequiresClause())\n        // ...\n        Diag(NewFD->getTrailingRequiresClause()->getBeginLoc(), diag::err_constrained_virtual_method);"}},
		[l]={
			["clang/test/CXX/class.derived/class.virtual/p6.cpp"]={"clang/test/CXX/class.derived/class.virtual/p6.cpp:5:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:7:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:13:30: error: virtual function cannot have a requires clause","clang/test/CXX/class.derived/class.virtual/p6.cpp:17:54: error: virtual function cannot have a requires clause"}
		}
	},
	["err_constraint_depends_on_self"]={
		[c]={{nil,I,"err_constraint_depends_on_self"}},
		[d]={{nil,I,"satisfaction of constraint \'%0\' depends on itself"}},
		[f]={{nil,I,"satisfaction of constraint \'A\' depends on itself"}},
		[b]=k,
		[g]="satisfaction of constraint \'(.*?)\' depends on itself",
		[h]=a,
		[i]={{nil,I,m}},
		[e]={ib,1625925174,hb,gb},
		[j]={{"clang/lib/Sema/SemaConcept.cpp",309,"static bool DiagRecursiveConstraintEval(Sema &S, llvm::FoldingSetNodeID &ID, const NamedDecl *Templ, const Expr *E, const MultiLevelTemplateArgumentList &MLTAL) {\n  // ...\n  // Note that we have to do this with our own collection, because there are\n  // times where a constraint-expression check can cause us to need to evaluate\n  // other constriants that are unrelated, such as when evaluating a recovery\n  // expression, or when trying to determine the constexpr-ness of special\n  // members. Otherwise we could just use the\n  // Sema::InstantiatingTemplate::isAlreadyBeingInstantiated function.\n  if (S.SatisfactionStackContains(Templ, ID)) {\n    S.Diag(E->getExprLoc(), diag::err_constraint_depends_on_self) << const_cast<Expr *>(E) << E->getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/concepts-recursive-inst.cpp"]={"clang/test/SemaTemplate/concepts-recursive-inst.cpp:63:12: error: satisfaction of constraint \'Inf<Inf auto>\' depends on itself","clang/test/SemaTemplate/concepts-recursive-inst.cpp:91:21: error: satisfaction of constraint \'requires (T a) { foo(a); }\' depends on itself"}
		}
	},
	["err_constructor_bad_name"]={
		[c]="err_constructor_bad_name",
		[d]="missing return type for function %0; did you mean the constructor name %1?",
		[f]="missing return type for function A; did you mean the constructor name B?",
		[b]=k,
		[g]="missing return type for function (.*?); did you mean the constructor name (.*?)\\?",
		[h]=a,
		[i]=M,
		[e]={"fb8b7b9a1c52",1381795226,"PR17567: Improve diagnostic for a mistyped constructor name. If we see something","PR17567: Improve diagnostic for a mistyped constructor name. If we see something\nthat looks like a function declaration, except that it\'s missing a return type,\ntry typo-correcting it to the relevant constructor name.\n\nIn passing, fix a bug where the missing-type-specifier recovery codepath would\ndrop a preceding scope specifier on the floor, leading to follow-on diagnostics\nand incorrect recovery for the auto-in-c++98 hack.\n\nllvm-svn: 192644"},
		[j]={{L,2877,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // ...\n  // Determine whether this identifier could plausibly be the name of something\n  // being declared (with a missing type).\n  if (!isTypeSpecifier(DSC) && (!SS || DSC == DeclSpecContext::DSC_top_level || DSC == DeclSpecContext::DSC_class)) {\n    // ...\n    case tok::l_paren: {\n      // ...\n      // If we\'re in a context where we could be declaring a constructor,\n      // check whether this is a constructor declaration with a bogus name.\n      if (DSC == DeclSpecContext::DSC_class || (DSC == DeclSpecContext::DSC_top_level && SS)) {\n        // ...\n        if (Actions.isCurrentClassNameTypo(II, SS)) {\n          Diag(Loc, diag::err_constructor_bad_name) << Tok.getIdentifierInfo() << II << FixItHint::CreateReplacement(Tok.getLocation(), II->getName());"}},
		[l]={
			["clang/test/Parser/cxx-decl.cpp"]={"clang/test/Parser/cxx-decl.cpp:247:5: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?","clang/test/Parser/cxx-decl.cpp:250:11: error: missing return type for function \'FooBar\'; did you mean the constructor name \'Foobar\'?"}
		}
	},
	["err_constructor_byvalue_arg"]={
		[c]="err_constructor_byvalue_arg",
		[d]="copy constructor must pass its first argument by reference",
		[f]="copy constructor must pass its first argument by reference",
		[b]=k,
		[g]="copy constructor must pass its first argument by reference",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{w,10792,"/// CheckConstructor - Checks a fully-formed constructor for\n/// well-formedness, issuing any diagnostics required. Returns true if\n/// the constructor declarator is invalid.\nvoid Sema::CheckConstructor(CXXConstructorDecl *Constructor) {\n  // ...\n  // C++ [class.copy]p3:\n  //   A declaration of a constructor for a class X is ill-formed if\n  //   its first parameter is of type (optionally cv-qualified) X and\n  //   either there are no other parameters or else all other\n  //   parameters have default arguments.\n  if (!Constructor->isInvalidDecl() && Constructor->hasOneParamOrDefaultArgs() && Constructor->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {\n    // ...\n    if (Context.getCanonicalType(ParamType).getUnqualifiedType() == ClassTy) {\n      // ...\n      Diag(ParamLoc, diag::err_constructor_byvalue_arg) << FixItHint::CreateInsertion(ParamLoc, ConstRef);"}},
		[l]={
			["clang/test/SemaCXX/copy-constructor-error.cpp"]={"clang/test/SemaCXX/copy-constructor-error.cpp:4:8: error: copy constructor must pass its first argument by reference"}
		}
	},
	["err_constructor_cannot_be"]={
		[c]="err_constructor_cannot_be",
		[d]="constructor cannot be declared \'%0\'",
		[f]="constructor cannot be declared \'A\'",
		[b]=k,
		[g]="constructor cannot be declared \'(.*?)\'",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{w,10718,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  // C++ [class.ctor]p3:\n  //   A constructor shall not be virtual (10.3) or static (9.4). A\n  //   constructor can be invoked for a const, volatile or const\n  //   volatile object. A constructor shall not be declared const,\n  //   volatile, or const volatile (9.3.2).\n  if (isVirtual) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"virtual\" << SourceRange(D.getDeclSpec().getVirtualSpecLoc()) << SourceRange(D.getIdentifierLoc());"},{w,10725,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_constructor_cannot_be) << \"static\" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << SourceRange(D.getIdentifierLoc());"}},
		[l]={
			["clang/test/SemaCXX/constructor.cpp"]={"clang/test/SemaCXX/constructor.cpp:14:10: error: constructor cannot be declared \'static\'","clang/test/SemaCXX/constructor.cpp:15:11: error: constructor cannot be declared \'virtual\'"}
		}
	},
	["err_constructor_redeclared"]={
		[c]="err_constructor_redeclared",
		[d]="constructor cannot be redeclared",
		[f]="constructor cannot be redeclared",
		[b]=k,
		[g]="constructor cannot be redeclared",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{r,3999,"/// 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            NewDiag = diag::err_constructor_redeclared;"}},
		[l]={
			["clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp:46:3: error: constructor cannot be redeclared"}
		}
	},
	["err_constructor_return_type"]={
		[c]="err_constructor_return_type",
		[d]="constructor cannot have a return type",
		[f]="constructor cannot have a return type",
		[b]=k,
		[g]="constructor cannot have a return type",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{r,9271,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n  // ...\n  } else if (DC->isRecord()) {\n    // If the name of the function is the same as the name of the record,\n    // then this must be an invalid constructor that has a return type.\n    // (The parser checks for a return type and makes the declarator a\n    // constructor if it has no return type).\n    if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo() == cast<CXXRecordDecl>(DC)->getIdentifier()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_constructor_return_type) << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"},{w,10734,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {\n    diagnoseIgnoredQualifiers(diag::err_constructor_return_type, TypeQuals, SourceLocation(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc());"}},
		[l]={
			["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:81:14: error: constructor cannot have a return type"}
		}
	},
	["err_continuation_class"]={
		[c]="err_continuation_class",
		[d]="class extension has no primary class",
		[f]="class extension has no primary class",
		[b]=k,
		[g]="class extension has no primary class",
		[h]=a,
		[i]=m,
		[e]={O,1236199783,Q,R},
		[j]={{Mb,429,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // ...\n  // We need to look in the @interface to see if the @property was\n  // already declared.\n  if (!CCPrimary) {\n    Diag(CDecl->getLocation(), diag::err_continuation_class);"}}
	},
	["err_continue_from_cond_var_init"]={
		[c]={{nil,t,"err_continue_from_cond_var_init"}},
		[d]={{nil,t,"cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable"}},
		[f]={{nil,t,"cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable"}},
		[b]=k,
		[g]="cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable",
		[h]=a,
		[i]={{nil,t,m}},
		[e]={Cb,1590001902,Hb,Jb},
		[j]={{bb,3337,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  // ...\n  if (S->isConditionVarScope()) {\n    // ...\n    return StmtError(Diag(ContinueLoc, diag::err_continue_from_cond_var_init));"}},
		[l]={
			["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:643:20: error: cannot jump from this continue statement to the loop increment; jump bypasses initialization of loop condition variable"}
		}
	},
	["err_continue_not_in_loop"]={
		[c]="err_continue_not_in_loop",
		[d]="\'continue\' statement not in loop statement",
		[f]="\'continue\' statement not in loop statement",
		[b]=k,
		[g]="\'continue\' statement not in loop statement",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{bb,3331,"StmtResult Sema::ActOnContinueStmt(SourceLocation ContinueLoc, Scope *CurScope) {\n  // ...\n  if (!S) {\n    // ...\n    return StmtError(Diag(ContinueLoc, diag::err_continue_not_in_loop));"}},
		[l]={
			["clang/test/Parser/bad-control.c"]={"clang/test/Parser/bad-control.c:8:3: error: \'continue\' statement not in loop statement","clang/test/Parser/bad-control.c:23:10: error: \'continue\' statement not in loop statement"}
		}
	},
	["err_conv_function_not_member"]={
		[c]="err_conv_function_not_member",
		[d]="conversion function must be a non-static member function",
		[f]="conversion function must be a non-static member function",
		[b]=k,
		[g]="conversion function must be a non\\-static member function",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{r,9239,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n    if (!DC->isRecord()) {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member);"},{w,10990,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // C++ [class.conv.fct]p1:\n  //   Neither parameter types nor return type can be specified. The\n  //   type of a conversion function (8.3.5) is \"function taking no\n  //   parameter returning conversion-type-id.\"\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_conv_function_not_member) << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << D.getName().getSourceRange();"}},
		[l]={
			[Db]={"clang/test/SemaCXX/conversion-function.cpp:19:10: error: conversion function must be a non-static member function","clang/test/SemaCXX/conversion-function.cpp:22:1: error: conversion function must be a non-static member function"}
		}
	},
	["err_conv_function_redeclared"]={
		[c]="err_conv_function_redeclared",
		[d]="conversion function cannot be redeclared",
		[f]="conversion function cannot be redeclared",
		[b]=k,
		[g]="conversion function cannot be redeclared",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{r,4003,"/// 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            NewDiag = diag::err_conv_function_redeclared;"}},
		[l]={
			[Db]={"clang/test/SemaCXX/conversion-function.cpp:52:3: error: conversion function cannot be redeclared","clang/test/SemaCXX/conversion-function.cpp:53:3: error: conversion function cannot be redeclared"}
		}
	},
	["err_conv_function_return_type"]={
		[c]="err_conv_function_return_type",
		[d]="conversion function cannot have a return type",
		[f]="conversion function cannot have a return type",
		[b]=k,
		[g]="conversion function cannot have a return type",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,11011,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_return_type) << SourceRange(DS.getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"}},
		[l]={
			[Db]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have a return type"}
		}
	},
	["err_conv_function_to_array"]={
		[c]="err_conv_function_to_array",
		[d]="conversion function cannot convert to an array type",
		[f]="conversion function cannot convert to an array type",
		[b]=k,
		[g]="conversion function cannot convert to an array type",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,11120,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [class.conv.fct]p4:\n  //   The conversion-type-id shall not represent a function type nor\n  //   an array type.\n  if (ConvType->isArrayType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_array);"}},
		[l]={
			[Db]={"clang/test/SemaCXX/conversion-function.cpp:41:3: error: conversion function cannot convert to an array type"}
		}
	},
	["err_conv_function_to_function"]={
		[c]="err_conv_function_to_function",
		[d]="conversion function cannot convert to a function type",
		[f]="conversion function cannot convert to a function type",
		[b]=k,
		[g]="conversion function cannot convert to a function type",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,11124,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [class.conv.fct]p4:\n  //   The conversion-type-id shall not represent a function type nor\n  //   an array type.\n  if (ConvType->isArrayType()) {\n  // ...\n  } else if (ConvType->isFunctionType()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_to_function);"}},
		[l]={
			["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:29: error: conversion function cannot convert to a function type"}
		}
	},
	["err_conv_function_variadic"]={
		[c]="err_conv_function_variadic",
		[d]="conversion function cannot be variadic",
		[f]="conversion function cannot be variadic",
		[b]=k,
		[g]="conversion function cannot be variadic",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,11036,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n  // ...\n  } else if (Proto->isVariadic()) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_variadic);"}},
		[l]={
			[Db]={"clang/test/SemaCXX/conversion-function.cpp:37:3: error: conversion function cannot be variadic"}
		}
	},
	["err_conv_function_with_complex_decl"]={
		[c]="err_conv_function_with_complex_decl",
		[d]="cannot specify any part of a return type in the declaration of a conversion function%select{; put the complete type after \'operator\'|; use a typedef to declare a conversion to %1|; use an alias template to declare a conversion to %1|}0",
		[f]={{nil,nil,{"cannot specify any part of a return type in the declaration of a conversion function",{"; put the complete type after \'operator\'","; use a typedef to declare a conversion to B","; use an alias template to declare a conversion to B",a}}}},
		[b]=k,
		[g]="cannot specify any part of a return type in the declaration of a conversion function(?:; put the complete type after \'operator\'|; use a typedef to declare a conversion to (.*?)|; use an alias template to declare a conversion to (.*?)|)",
		[h]=a,
		[i]=m,
		[e]={"212fa2efb700",1271117071,"Diagnose declarations of conversion functions with declarators other than \'()\'.","Diagnose declarations of conversion functions with declarators other than \'()\'.\n\nllvm-svn: 101098"},
		[j]={{w,11021,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (DS.hasTypeSpecifier() && !D.isInvalidType()) {\n  // ...\n  } else if (DS.getTypeQualifiers() && !D.isInvalidType()) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_complex_decl) << SourceRange(D.getIdentifierLoc()) << 0;"},{w,11084,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Diagnose \"&operator bool()\" and other such nonsense.  This\n  // is actually a gcc extension which we don\'t support.\n  if (Proto->getReturnType() != ConvType) {\n    // ...\n    auto &&DB = Diag(Loc, diag::err_conv_function_with_complex_decl);"}},
		[l]={
			["clang/test/SemaCXX/PR31422.cpp"]={"clang/test/SemaCXX/PR31422.cpp:6:44: error: cannot specify any part of a return type in the declaration of a conversion function; use an alias template to declare a conversion to \'auto (Ts &&...) const\'"}
		}
	},
	["err_conv_function_with_params"]={
		[c]="err_conv_function_with_params",
		[d]="conversion function cannot have any parameters",
		[f]="conversion function cannot have any parameters",
		[b]=k,
		[g]="conversion function cannot have any parameters",
		[h]=a,
		[i]=m,
		[e]={z,1237025389,x,y},
		[j]={{w,11030,"/// CheckConversionDeclarator - Called by ActOnDeclarator to check the\n/// well-formednes of the conversion function declarator @p D with\n/// type @p R. If there are any errors in the declarator, this routine\n/// will emit diagnostics and return true. Otherwise, it will return\n/// false. Either way, the type @p R will be updated to reflect a\n/// well-formed type for the conversion operator.\nvoid Sema::CheckConversionDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // Make sure we don\'t have any parameters.\n  if (Proto->getNumParams() > 0) {\n    Diag(D.getIdentifierLoc(), diag::err_conv_function_with_params);"}},
		[l]={
			[Db]={"clang/test/SemaCXX/conversion-function.cpp:31:8: error: conversion function cannot have any parameters","clang/test/SemaCXX/conversion-function.cpp:34:3: error: conversion function cannot have any parameters"}
		}
	},
	["err_convertvector_incompatible_vector"]={
		[c]="err_convertvector_incompatible_vector",
		[d]="first two arguments to __builtin_convertvector must have the same number of elements",
		[f]="first two arguments to __builtin_convertvector must have the same number of elements",
		[b]=k,
		[g]="first two arguments to __builtin_convertvector must have the same number of elements",
		[h]=a,
		[i]=m,
		[e]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector","Add the intrinsic __builtin_convertvector\n\nLLVM supports applying conversion instructions to vectors of the same number of\nelements (fptrunc, fptosi, etc.) but there had been no way for a Clang user to\ncause such instructions to be generated when using builtin vector types.\n\nC-style casting on vectors is already defined in terms of bitcasts, and so\ncannot be used for these conversions as well (without leading to a very\nconfusing set of semantics). As a result, this adds a __builtin_convertvector\nintrinsic (patterned after the OpenCL __builtin_astype intrinsic). This is\nintended to aid the creation of vector intrinsic headers that create generic IR\ninstead of target-dependent intrinsics (in other words, this is a generic\n_mm_cvtepi32_ps). As noted in the documentation, the action of\n__builtin_convertvector is defined in terms of the action of a C-style cast on\neach vector element.\n\nllvm-svn: 190915"},
		[j]={{A,8546,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!SrcTy->isDependentType() && !DstTy->isDependentType()) {\n    // ...\n    if (SrcElts != DstElts)\n      return ExprError(Diag(BuiltinLoc, diag::err_convertvector_incompatible_vector) << E->getSourceRange());"}},
		[l]={
			["clang/test/Sema/convertvector.c"]={"clang/test/Sema/convertvector.c:7:10: error: first two arguments to __builtin_convertvector must have the same number of elements"}
		}
	},
	["err_convertvector_non_vector"]={
		[c]="err_convertvector_non_vector",
		[d]="first argument to __builtin_convertvector must be a vector",
		[f]="first argument to __builtin_convertvector must be a vector",
		[b]=k,
		[g]="first argument to __builtin_convertvector must be a vector",
		[h]=a,
		[i]=m,
		[e]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector","Add the intrinsic __builtin_convertvector\n\nLLVM supports applying conversion instructions to vectors of the same number of\nelements (fptrunc, fptosi, etc.) but there had been no way for a Clang user to\ncause such instructions to be generated when using builtin vector types.\n\nC-style casting on vectors is already defined in terms of bitcasts, and so\ncannot be used for these conversions as well (without leading to a very\nconfusing set of semantics). As a result, this adds a __builtin_convertvector\nintrinsic (patterned after the OpenCL __builtin_astype intrinsic). This is\nintended to aid the creation of vector intrinsic headers that create generic IR\ninstead of target-dependent intrinsics (in other words, this is a generic\n_mm_cvtepi32_ps). As noted in the documentation, the action of\n__builtin_convertvector is defined in terms of the action of a C-style cast on\neach vector element.\n\nllvm-svn: 190915"},
		[j]={{A,8535,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!SrcTy->isVectorType() && !SrcTy->isDependentType())\n    return ExprError(Diag(BuiltinLoc, diag::err_convertvector_non_vector) << E->getSourceRange());"}},
		[l]={
			["clang/test/Sema/convertvector.c"]={"clang/test/Sema/convertvector.c:15:10: error: first argument to __builtin_convertvector must be a vector"}
		}
	}
};