Module:ClangDiags/DiagsLongData4

From emmtrix Wiki
Jump to navigation Jump to search

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

local a="";
local b="id_hist";
local c="regex2";
local d="source";
local e="category_hist";
local f="regex3";
local g="commit";
local h="regex1";
local i="message_hist";
local j="hierarchical_hist";
local k="(?:error|fatal error)\\: ";
local l="tests2";
local m="Semantic Issue";
local n="16.0";
local o="11.0";
local p="clang/lib/Sema/SemaDecl.cpp";
local q="clang/lib/Sema/SemaExpr.cpp";
local r="9.0";
local s="15.0";
local t="clang/lib/Sema/SemaDeclCXX.cpp";
local u="clang/lib/Sema/SemaDeclAttr.cpp";
local v="None";
local w="13.0";
local x="5a8987ca5113";
local y="Update tablegen diagnostic files to be in sync with the def files.";
local z="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local A="7.0";
local B="14.0";
local C="Parse Issue";
local D="clang/lib/Sema/DeclSpec.cpp";
local E="5.0";
local F="10.0";
local G="clang/lib/Sema/SemaType.cpp";
local H="clang/lib/Sema/SemaInit.cpp";
local I="clang/lib/Sema/SemaExprCXX.cpp";
local J="6.0";
local K="clang/lib/Sema/SemaChecking.cpp";
local L="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 M="Implement P2361 Unevaluated string literals";
local N="95f50964fbf5";
local O="Lexical or Preprocessor Issue";
local P="clang/lib/Parse/ParseDecl.cpp";
local Q="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 R="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local S="b1c4d5507fad";
local T="Lambda Issue";
local U="clang/lib/Parse/ParseDeclCXX.cpp";
local V="8.0";
local W=" (F vs G)";
local X="lvalue";
local Y="rvalue";
local Z="a block element";
local ab="clang/lib/Lex/LiteralSupport.cpp";
local bb="clang/lib/Sema/SemaExprObjC.cpp";
local cb="clang/lib/Parse/Parser.cpp";
local db="clang/lib/Parse/ParseExprCXX.cpp";
local eb="volatile";
local fb="[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 gb="clang/lib/Sema/SemaCoroutine.cpp";
local hb="931fcd3ba011";
local ib="[WebAssembly] Improve clang diagnostics for wasm attributes";
local jb=" ";
local kb="clang/lib/Sema/SemaTemplate.cpp";
local lb="const";
local mb="12.0";
local nb="clang/lib/Sema/JumpDiagnostics.cpp";
local ob="destructor";
local pb="a member subobject";
local qb="Coroutines Issue";
local rb="clang/lib/Sema/SemaDeclObjC.cpp";
local sb="11.1";
local tb="fatal error\\: ";
local ub=": different exception specifications";
local vb="a value";
local wb=": different number of parameters (F vs G)";
local xb=": type mismatch at F parameter";
local yb=" (G vs H)";
local zb=": different return type";
local Ab="restrict";
local Bb="none";
local Cb="const and restrict";
local Db=" of incompatible type";
local Eb="const and volatile";
local Fb="volatile and restrict";
local Gb="const, volatile, and restrict";
local Hb="a new value";
local Ib=": different classes";
local Jb="with an ";
local Kb="a parameter of CF audited function";
local Lb="an array element";
local Mb="a base class";
local Nb="a constructor delegation";
local Ob="a vector element";
local Pb="an exception object";
local Qb="a complex element";
local Rb="a lambda capture";
local Sb="a compound literal initializer";
local Tb=" of type D";
local Ub="a related result";
local Vb="return object";
local Wb="a parameter";
local Xb="of type B with an ";
local Yb="a variable";
local Zb="clang/lib/Parse/ParseExpr.cpp";
local ac="Modules Issue";
local bc="cannot initialize ";
local cc="c28aee6a51a9";
local dc="clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp";
local ec="move assignment operator";
local fc="copy assignment operator";
local gc="Improve diagnostics for ill-formed literal operator declarations.";
local hc="move constructor";
local ic="copy constructor";
local jc="clang/lib/Frontend/CompilerInvocation.cpp";
local kc="Improve diagnostics for ill-formed literal operator declarations.\n\nPatch by Erik Pilkington!\n\nllvm-svn: 261034";

return {
	["err_func_def_incomplete_result"]={
		[b]="err_func_def_incomplete_result",
		[i]="incomplete result type %0 in function definition",
		[j]="incomplete result type A in function definition",
		[h]=k,
		[c]="incomplete result type (.*?) in function definition",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,15348,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !FD->isInvalidDecl() && BodyKind != FnBodyKind::Delete && (RequireCompleteType(FD->getLocation(), ResultType, diag::err_func_def_incomplete_result) || RequireNonAbstractType(FD->getLocation(), FD->getReturnType(), diag::err_abstract_type_in_decl, AbstractReturnType)))"},{rb,378,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // ...\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !MDecl->isInvalidDecl() && RequireCompleteType(MDecl->getLocation(), ResultType, diag::err_func_def_incomplete_result))"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.general/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.general/p2.cpp:5:12: error: incomplete result type \'Incomplete\' in function definition"}
		}
	},
	["err_func_def_no_params"]={
		[b]="err_func_def_no_params",
		[i]="function definition does not declare parameters",
		[j]="function definition does not declare parameters",
		[h]=k,
		[c]="function definition does not declare parameters",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{U,2971,"/// 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  // Check for a member function definition.\n  if (BitfieldSize.isUnset()) {\n    // ...\n    if (DefinitionKind != FunctionDefinitionKind::Declaration) {\n      if (!DeclaratorInfo.isFunctionDeclarator()) {\n        Diag(DeclaratorInfo.getIdentifierLoc(), diag::err_func_def_no_params);"}},
		[l]={
			["clang/test/Parser/cxx-class.cpp"]={"clang/test/Parser/cxx-class.cpp:77:9: error: function definition does not declare parameters","clang/test/Parser/cxx-class.cpp:87:10: error: function definition does not declare parameters"}
		}
	},
	["err_func_returning_array_function"]={
		[b]="err_func_returning_array_function",
		[i]="function cannot return %select{array|function}0 type %1",
		[j]={{nil,nil,{"function cannot return ",{"array","function"}," type B"}}},
		[h]=k,
		[c]="function cannot return (?:array|function) type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{q,21192,"/// 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    unsigned diagID = diag::err_func_returning_array_function;"},{q,21341,"ExprResult RebuildUnknownAnyExpr::VisitObjCMessageExpr(ObjCMessageExpr *E) {\n  // Verify that this is a legal result type of a call.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    S.Diag(E->getExprLoc(), diag::err_func_returning_array_function) << DestType->isFunctionType() << DestType;"},{G,2912,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(Loc, diag::err_func_returning_array_function) << T->isFunctionType() << T;"},{G,5267,"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        unsigned diagID = diag::err_func_returning_array_function;"}},
		[l]={
			["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:9:7: error: function cannot return function type \'int (void)\'"}
		}
	},
	["err_func_returning_qualified_void"]={
		["groups"]={"qualified-void-return-type"},
		["maingroup"]="qualified-void-return-type",
		[b]="err_func_returning_qualified_void",
		[i]="function cannot return qualified void type %0",
		[j]="function cannot return qualified void type A",
		[h]="(?:warning|error|fatal error)\\: ",
		[c]="function cannot return qualified void type (.*?)",
		[f]=" \\[(?:\\-Werror,)?\\-Wqualified\\-void\\-return\\-type[^\\]]*\\]",
		[e]=m,
		[g]={"c116802ef387",1421340353,"PR 20146","PR 20146\nreject CV void return type on C definitions per 6.9.1/3\n\nllvm-svn: 226178"},
		[d]={{G,5361,"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      // cv-qualifiers on return types are pointless except when the type is a\n      // class type in C++.\n      if ((T.getCVRQualifiers() || T->isAtomicType()) && !(S.getLangOpts().CPlusPlus && (T->isDependentType() || T->isRecordType()))) {\n        if (T->isVoidType() && !S.getLangOpts().CPlusPlus && D.getFunctionDefinitionKind() == FunctionDefinitionKind::Definition) {\n          // ...\n          S.Diag(DeclType.Loc, diag::err_func_returning_qualified_void) << T;"}},
		[l]={
			["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:34: warning: function cannot return qualified void type \'const void\' [-Wqualified-void-return-type]"}
		}
	},
	["err_function_attribute_mismatch"]={
		[b]={{nil,E,"err_function_attribute_mismatch"}},
		[i]={{nil,E,"function declared with %0 attribute was previously declared without the %0 attribute"}},
		[j]={{nil,E,"function declared with A attribute was previously declared without the A attribute"}},
		[h]=k,
		[c]="function declared with (.*?) attribute was previously declared without the (.*?) attribute",
		[f]=a,
		[e]={{nil,E,m}},
		[g]={"318a6eae06dd",1493294460,"[X86] Support of no_caller_saved_registers attribute","[X86] Support of no_caller_saved_registers attribute\n\nImplements the Clang part for no_caller_saved_registers attribute as appears here: \nhttps://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5ed3cc7b66af4758f7849ed6f65f4365be8223be.\n\nDifferential Revision: https://reviews.llvm.org/D31871\n\nllvm-svn: 301535"},
		[d]={{p,3845,"/// 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  // Merge ns_returns_retained attribute.\n  if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) {\n    if (NewTypeInfo.getProducesResult()) {\n      Diag(New->getLocation(), diag::err_function_attribute_mismatch) << \"\'ns_returns_retained\'\";"},{p,3860,"/// 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.getNoCallerSavedRegs() != NewTypeInfo.getNoCallerSavedRegs()) {\n    if (NewTypeInfo.getNoCallerSavedRegs()) {\n      // ...\n      Diag(New->getLocation(), diag::err_function_attribute_mismatch) << Attr;"}},
		[l]={
			["clang/test/SemaCXX/attr-x86-no_caller_saved_registers.cpp"]={"clang/test/SemaCXX/attr-x86-no_caller_saved_registers.cpp:24:49: error: function declared with \'no_caller_saved_registers\' attribute was previously declared without the \'no_caller_saved_registers\' attribute"}
		}
	},
	["err_function_decl_cmse_ns_call"]={
		[b]={{nil,o,"err_function_decl_cmse_ns_call"}},
		[i]={{nil,o,"functions may not be declared with \'cmse_nonsecure_call\' attribute"}},
		[j]={{nil,o,"functions may not be declared with \'cmse_nonsecure_call\' attribute"}},
		[h]=k,
		[c]="functions may not be declared with \'cmse_nonsecure_call\' attribute",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{p,9666,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (R.getCanonicalType()->castAs<FunctionType>()->getCmseNSCallAttr())\n    Diag(D.getIdentifierLoc(), diag::err_function_decl_cmse_ns_call);"}},
		[l]={
			["clang/test/Sema/arm-cmse.c"]={"clang/test/Sema/arm-cmse.c:8:6: error: functions may not be declared with \'cmse_nonsecure_call\' attribute","clang/test/Sema/arm-cmse.c:22:23: error: functions may not be declared with \'cmse_nonsecure_call\' attribute"}
		}
	},
	["err_function_declared_typedef"]={
		[b]="err_function_declared_typedef",
		[i]="function definition declared \'typedef\'",
		[j]="function definition declared \'typedef\'",
		[h]=k,
		[c]="function definition declared \'typedef\'",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{P,2190,"/// 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    // Look at the next token to make sure that this isn\'t a function\n    // declaration.  We have to check this because __attribute__ might be the\n    // start of a function definition in GCC-extended K&R C.\n    if (!isDeclarationAfterDeclarator()) {\n      // Function definitions are only allowed at file scope and in C++ classes.\n      // The C++ inline method definition case is handled elsewhere, so we only\n      // need to handle the file scope definition case.\n      if (Context == DeclaratorContext::File) {\n        if (isStartOfFunctionDefinition(D)) {\n          if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n            Diag(Tok, diag::err_function_declared_typedef);"},{U,2983,"/// 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  // Check for a member function definition.\n  if (BitfieldSize.isUnset()) {\n    // ...\n    if (DefinitionKind != FunctionDefinitionKind::Declaration) {\n      // ...\n      if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        Diag(DeclaratorInfo.getIdentifierLoc(), diag::err_function_declared_typedef);"},{"clang/lib/Parse/ParseTemplate.cpp",324,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  // ...\n  if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n    // ...\n    if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n      // ...\n      Diag(DS.getStorageClassSpecLoc(), diag::err_function_declared_typedef) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
		[l]={
			["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:8:33: error: function definition declared \'typedef\'"}
		}
	},
	["err_function_definition_not_allowed"]={
		[b]="err_function_definition_not_allowed",
		[i]="function definition is not allowed here",
		[j]="function definition is not allowed here",
		[h]=k,
		[c]="function definition is not allowed here",
		[f]=a,
		[e]=C,
		[g]={"012efe22bcf4",1366128092,"Fix PR4296: Add parser detection/error recovery for nested functions, from Serve Pavlov!","Fix PR4296: Add parser detection/error recovery for nested functions, from Serve Pavlov!\n\nllvm-svn: 179603"},
		[d]={{P,2218,"/// 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    // Look at the next token to make sure that this isn\'t a function\n    // declaration.  We have to check this because __attribute__ might be the\n    // start of a function definition in GCC-extended K&R C.\n    if (!isDeclarationAfterDeclarator()) {\n      // Function definitions are only allowed at file scope and in C++ classes.\n      // The C++ inline method definition case is handled elsewhere, so we only\n      // need to handle the file scope definition case.\n      if (Context == DeclaratorContext::File) {\n      // ...\n      } else {\n        if (Tok.is(tok::l_brace)) {\n          Diag(Tok, diag::err_function_definition_not_allowed);"},{"clang/lib/Parse/ParseTemplate.cpp",315,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  // ...\n  if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n    // Function definitions are only allowed at file scope and in C++ classes.\n    // The C++ inline method definition case is handled elsewhere, so we only\n    // need to handle the file scope definition case.\n    if (Context != DeclaratorContext::File) {\n      Diag(Tok, diag::err_function_definition_not_allowed);"}},
		[l]={
			["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:98:21: error: function definition is not allowed here"}
		}
	},
	["err_function_is_not_record"]={
		[b]="err_function_is_not_record",
		[i]="unexpected %0 in function call; perhaps remove the %0?",
		[j]="unexpected A in function call; perhaps remove the A?",
		[h]=k,
		[c]="unexpected (.*?) in function call; perhaps remove the (.*?)\\?",
		[f]=a,
		[e]=C,
		[g]={"638264ea2a3d",1373665382,"Provide a better diagnostic and a fixit for a \'.\' or \'->\' before the left paren","Provide a better diagnostic and a fixit for a \'.\' or \'->\' before the left paren\nof a function call.\n\nThis fixes PR5898 and means we now have a better diagnostic here than GCC.\n\nllvm-svn: 186208"},
		[d]={{Zb,2158,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///       postfix-expression: [C99 6.5.2]\n///         primary-expression\n///         postfix-expression \'[\' expression \']\'\n///         postfix-expression \'[\' braced-init-list \']\'\n///         postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///         postfix-expression \'(\' argument-expression-list[opt] \')\'\n///         postfix-expression \'.\' identifier\n///         postfix-expression \'->\' identifier\n///         postfix-expression \'++\'\n///         postfix-expression \'--\'\n///         \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///         \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///       argument-expression-list: [C99 6.5.2]\n///         argument-expression ...[opt]\n///         argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  // ...\n  while (true) {\n    // ...\n    case tok::arrow:\n    case tok::period: {\n      // ...\n      if (getLangOpts().CPlusPlus && !LHS.isInvalid()) {\n        // ...\n        if (BaseType && Tok.is(tok::l_paren) && (BaseType->isFunctionType() || BaseType->isSpecificPlaceholderType(BuiltinType::BoundMember))) {\n          Diag(OpLoc, diag::err_function_is_not_record) << OpKind << Base->getSourceRange() << FixItHint::CreateRemoval(OpLoc);"}},
		[l]={
			["clang/test/FixIt/fixit.cpp"]={"clang/test/FixIt/fixit.cpp:372:17: error: unexpected \'.\' in function call; perhaps remove the \'.\'?","clang/test/FixIt/fixit.cpp:375:15: error: unexpected \'->\' in function call; perhaps remove the \'->\'?"}
		}
	},
	["err_function_marked_override_not_overriding"]={
		[b]="err_function_marked_override_not_overriding",
		[i]="%0 marked \'override\' but does not override any member functions",
		[j]="A marked \'override\' but does not override any member functions",
		[h]=k,
		[c]="(.*?) marked \'override\' but does not override any member functions",
		[f]=a,
		[e]=m,
		[g]={"fd8355373333",1295503034,"Diagnose virtual member functions marked override but not overriding any virtual member functions.","Diagnose virtual member functions marked override but not overriding any virtual member functions.\n\nllvm-svn: 123888"},
		[d]={{t,3283,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  // ...\n  if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)\n    Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding) << MD->getDeclName();"}},
		[l]={
			["clang/test/CXX/class.derived/class.virtual/p3-0x.cpp"]={"clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:10:16: error: \'f\' marked \'override\' but does not override any member functions","clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:29:16: error: \'f\' marked \'override\' but does not override any member functions","clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:42:16: error: \'f\' marked \'override\' but does not override any member functions","clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:80:18: error: \'g\' marked \'override\' but does not override any member functions"}
		}
	},
	["err_function_needs_feature"]={
		[b]="err_function_needs_feature",
		[i]="always_inline function %1 requires target feature \'%2\', but would be inlined into function %0 that is compiled without support for \'%2\'",
		[j]="always_inline function B requires target feature \'C\', but would be inlined into function A that is compiled without support for \'C\'",
		[h]=k,
		[c]="always_inline function (.*?) requires target feature \'(.*?)\', but would be inlined into function (.*?) that is compiled without support for \'(.*?)\'",
		[f]=a,
		[e]={{nil,V,v},{"7.1",nil,m}},
		[g]={"2b2d56f059e7",1447289052,"Provide a frontend based error for always_inline functions that require","Provide a frontend based error for always_inline functions that require\ntarget features that the caller function doesn\'t provide. This matches\nthe existing backend failure to inline functions that don\'t have\nmatching target features - and diagnoses earlier in the case of\nalways_inline.\n\nFix up a few test cases that were, in fact, invalid if you tried\nto generate code from the backend with the specified target features\nand add a couple of tests to illustrate what\'s going on.\n\nThis should fix PR25246.\n\nllvm-svn: 252834"},
		[d]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2636,"// 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  } else if (!TargetDecl->isMultiVersion() && TargetDecl->hasAttr<TargetAttr>()) {\n    // ...\n    if (!llvm::all_of(ReqFeatures, [&](StringRef Feature) {\n      // ...\n      CGM.getDiags().Report(Loc, diag::err_function_needs_feature) << FD->getDeclName() << TargetDecl->getDeclName() << MissingFeature;"},{"clang/lib/CodeGen/CodeGenFunction.cpp",2645,"// 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  } else if (!TargetDecl->isMultiVersion() && TargetDecl->hasAttr<TargetAttr>()) {\n  // ...\n  } else if (!FD->isMultiVersion() && FD->hasAttr<TargetAttr>()) {\n    // ...\n    for (const auto &F : CalleeFeatureMap) {\n      if (F.getValue() && (!CallerFeatureMap.lookup(F.getKey()) || !CallerFeatureMap.find(F.getKey())->getValue()))\n        CGM.getDiags().Report(Loc, diag::err_function_needs_feature) << FD->getDeclName() << TargetDecl->getDeclName() << F.getKey();"}},
		[l]={
			["clang/test/Sema/arm-neon-target.c"]={"clang/test/Sema/arm-neon-target.c:49:3: error: always_inline function \'vdot_u32\' requires target feature \'dotprod\', but would be inlined into function \'undefined\' that is compiled without support for \'dotprod\'","clang/test/Sema/arm-neon-target.c:51:3: error: always_inline function \'vceqz_f16\' requires target feature \'fullfp16\', but would be inlined into function \'undefined\' that is compiled without support for \'fullfp16\'","clang/test/Sema/arm-neon-target.c:52:3: error: always_inline function \'vrnd_f16\' requires target feature \'fullfp16\', but would be inlined into function \'undefined\' that is compiled without support for \'fullfp16\'","clang/test/Sema/arm-neon-target.c:53:3: error: always_inline function \'vmaxnm_f16\' requires target feature \'fullfp16\', but would be inlined into function \'undefined\' that is compiled without support for \'fullfp16\'","clang/test/Sema/arm-neon-target.c:55:3: error: always_inline function \'vmmlaq_s32\' requires target feature \'i8mm\', but would be inlined into function \'undefined\' that is compiled without support for \'i8mm\'","clang/test/Sema/arm-neon-target.c:57:3: error: always_inline function \'vbfdot_f32\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:60:3: error: always_inline function \'vdup_n_bf16\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:62:3: error: always_inline function \'vcvt_f32_bf16\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:63:3: error: always_inline function \'vcvt_bf16_f32\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:65:3: error: always_inline function \'vqrdmlahq_s32\' requires target feature \'v8.1a\', but would be inlined into function \'undefined\' that is compiled without support for \'v8.1a\'","clang/test/Sema/arm-neon-target.c:67:3: error: always_inline function \'vcaddq_rot90_f32\' requires target feature \'v8.3a\', but would be inlined into function \'undefined\' that is compiled without support for \'v8.3a\'","clang/test/Sema/arm-neon-target.c:68:3: error: always_inline function \'vcmla_rot90_f16\' requires target feature \'v8.3a\', but would be inlined into function \'undefined\' that is compiled without support for \'v8.3a\'"}
		}
	},
	["err_function_parameter_pack_without_parameter_packs"]={
		[b]="err_function_parameter_pack_without_parameter_packs",
		[i]="type %0 of function parameter pack does not contain any unexpanded parameter packs",
		[j]="type A of function parameter pack does not contain any unexpanded parameter packs",
		[h]=k,
		[c]="type (.*?) of function parameter pack does not contain any unexpanded parameter packs",
		[f]=a,
		[e]=m,
		[g]={"27b4c16fefde",1293144282,"Implement parsing of function parameter packs and non-type template","Implement parsing of function parameter packs and non-type template\nparameter packs (C++0x [dcl.fct]p13), including disambiguation between\nunnamed function parameter packs and varargs (C++0x [dcl.fct]p14) for\ncases like \n\n  void f(T...)\n\nwhere T may or may not contain unexpanded parameter packs.\n\nllvm-svn: 122520"},
		[d]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2840,"ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, const MultiLevelTemplateArgumentList &TemplateArgs, int indexAdjustment, std::optional<unsigned> NumExpansions, bool ExpectParameterPack, bool EvaluateConstraint) {\n  // ...\n  if (PackExpansionTypeLoc ExpansionTL = OldTL.getAs<PackExpansionTypeLoc>()) {\n    // ...\n    if (NewDI->getType()->containsUnexpandedParameterPack()) {\n    // ...\n    } else if (ExpectParameterPack) {\n      // ...\n      Diag(OldParm->getLocation(), diag::err_function_parameter_pack_without_parameter_packs) << NewDI->getType();"},{G,5923,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // If there was an ellipsis in the declarator, the declaration declares a\n  // parameter pack whose type may be a pack expansion type.\n  if (D.hasEllipsis()) {\n    // ...\n    case DeclaratorContext::Prototype:\n    case DeclaratorContext::LambdaExprParameter:\n    case DeclaratorContext::RequiresExpr:\n      // C++0x [dcl.fct]p13:\n      //   [...] When it is part of a parameter-declaration-clause, the\n      //   parameter pack is a function parameter pack (14.5.3). The type T\n      //   of the declarator-id of the function parameter pack shall contain\n      //   a template parameter pack; each template parameter pack in T is\n      //   expanded by the function parameter pack.\n      //\n      // We represent function parameter packs as function parameters whose\n      // type is a pack expansion.\n      if (!T->containsUnexpandedParameterPack() && (!LangOpts.CPlusPlus20 || !T->getContainedAutoType())) {\n        S.Diag(D.getEllipsisLoc(), diag::err_function_parameter_pack_without_parameter_packs) << T << D.getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:47:11: error: type \'T\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:49:14: error: type \'int\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:60:10: error: type \'T[]\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:63:10: error: type \'T[]\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:67:13: error: type \'int[]\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:68:13: error: type \'int[]\' of function parameter pack does not contain any unexpanded parameter packs"}
		}
	},
	["err_function_scope_depth_exceeded"]={
		[b]={{nil,F,"err_function_scope_depth_exceeded"}},
		[i]={{nil,F,"function scope depth exceeded maximum of %0"}},
		[j]={{nil,F,"function scope depth exceeded maximum of A"}},
		[h]=tb,
		[c]="function scope depth exceeded maximum of (.*?)",
		[f]=a,
		[e]={{nil,F,C}},
		[g]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
		[d]={{P,7297,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///       parameter-type-list: [C99 6.7.5]\n///         parameter-list\n///         parameter-list \',\' \'...\'\n/// [C++]   parameter-list \'...\'\n///\n///       parameter-list: [C99 6.7.5]\n///         parameter-declaration\n///         parameter-list \',\' parameter-declaration\n///\n///       parameter-declaration: [C99 6.7.5]\n///         declaration-specifiers declarator\n/// [C++]   declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                       initializer-clause\n/// [GNU]   declaration-specifiers declarator attributes\n///         declaration-specifiers abstract-declarator[opt]\n/// [C++]   declaration-specifiers abstract-declarator[opt]\n///           \'=\' assignment-expression\n/// [GNU]   declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // Avoid exceeding the maximum function scope depth.\n  // See https://bugs.llvm.org/show_bug.cgi?id=19607\n  // Note Sema::ActOnParamDeclarator calls ParmVarDecl::setScopeInfo with\n  // getFunctionPrototypeDepth() - 1.\n  if (getCurScope()->getFunctionPrototypeDepth() - 1 > ParmVarDecl::getMaxFunctionScopeDepth()) {\n    Diag(Tok.getLocation(), diag::err_function_scope_depth_exceeded) << ParmVarDecl::getMaxFunctionScopeDepth();"}}
	},
	["err_function_start_invalid_type"]={
		[b]={{nil,B,"err_function_start_invalid_type"}},
		[i]={{nil,B,"argument must be a function"}},
		[j]={{nil,B,"argument must be a function"}},
		[h]=k,
		[c]="argument must be a function",
		[f]=a,
		[e]={{nil,B,m}},
		[g]={"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"},
		[d]={{K,268,"/// Check that the argument to __builtin_function_start is a function.\nstatic bool SemaBuiltinFunctionStart(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!FD) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_function_start_invalid_type) << TheCall->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/builtins.cpp"]={"clang/test/SemaCXX/builtins.cpp:49:11: error: argument must be a function"}
		}
	},
	["err_function_template_partial_spec"]={
		[b]="err_function_template_partial_spec",
		[i]="function template partial specialization is not allowed",
		[j]="function template partial specialization is not allowed",
		[h]=k,
		[c]="function template partial specialization is not allowed",
		[f]=a,
		[e]=m,
		[g]={"a5f6f9c7a1bb",1295895279,"Disallow function template partial specializations, from Hans","Disallow function template partial specializations, from Hans\nWennborg! Fixes PR8295.\n\nllvm-svn: 124135"},
		[d]={{p,10364,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // If the declarator is a template-id, translate the parser\'s template\n    // argument list into our AST format.\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n      // ...\n      if (NewFD->isInvalidDecl()) {\n      // ...\n      } else if (FunctionTemplate) {\n        // ...\n        Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec) << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc);"}},
		[l]={
			["clang/test/SemaTemplate/function-template-specialization.cpp"]={"clang/test/SemaTemplate/function-template-specialization.cpp:48:30: error: function template partial specialization is not allowed"}
		}
	},
	["err_function_template_spec_ambiguous"]={
		[b]="err_function_template_spec_ambiguous",
		[i]="function template specialization %0 ambiguously refers to more than one function template; explicitly specify%select{| additional}1 template arguments to identify a particular function template",
		[j]={{nil,nil,{"function template specialization A ambiguously refers to more than one function template; explicitly specify",{a," additional"}," template arguments to identify a particular function template"}}},
		[h]=k,
		[c]="function template specialization (.*?) ambiguously refers to more than one function template; explicitly specify(?:| additional) template arguments to identify a particular function template",
		[f]=a,
		[e]=m,
		[g]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This","WIP implementation of explicit function template specialization. This\nfirst implementation recognizes when a function declaration is an\nexplicit function template specialization (based on the presence of a\ntemplate<> header), performs template argument deduction + ambiguity\nresolution to determine which template is being specialized, and hooks\n\nThere are many caveats here:\n  - We completely and totally drop any explicitly-specified template\n  arguments on the floor\n  - We don\'t diagnose any of the extra semantic things that we should\n  diagnose. \n  - I haven\'t looked to see that we\'re getting the right linkage for\n  explicit specializations\n\nOn a happy note, this silences a bunch of errors that show up in\nlibstdc++\'s <iostream>, although Clang still can\'t get through the\nentire header.\n\nllvm-svn: 82728"},
		[d]={{kb,9498,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // ...\n  UnresolvedSetIterator Result = getMostSpecialized(Candidates.begin(), Candidates.end(), FailedCandidates, FD->getLocation(), PDiag(diag::err_function_template_spec_no_match) << FD->getDeclName(), PDiag(diag::err_function_template_spec_ambiguous) << FD->getDeclName() << (ExplicitTemplateArgs != nullptr), PDiag(diag::note_function_template_spec_matched));"}},
		[l]={
			["clang/test/SemaTemplate/function-template-specialization.cpp"]={"clang/test/SemaTemplate/function-template-specialization.cpp:27:17: error: function template specialization \'f1\' ambiguously refers to more than one function template; explicitly specify template arguments to identify a particular function template"}
		}
	},
	["err_function_template_spec_no_match"]={
		[b]="err_function_template_spec_no_match",
		[i]="no function template matches function template specialization %0",
		[j]="no function template matches function template specialization A",
		[h]=k,
		[c]="no function template matches function template specialization (.*?)",
		[f]=a,
		[e]=m,
		[g]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This","WIP implementation of explicit function template specialization. This\nfirst implementation recognizes when a function declaration is an\nexplicit function template specialization (based on the presence of a\ntemplate<> header), performs template argument deduction + ambiguity\nresolution to determine which template is being specialized, and hooks\n\nThere are many caveats here:\n  - We completely and totally drop any explicitly-specified template\n  arguments on the floor\n  - We don\'t diagnose any of the extra semantic things that we should\n  diagnose. \n  - I haven\'t looked to see that we\'re getting the right linkage for\n  explicit specializations\n\nOn a happy note, this silences a bunch of errors that show up in\nlibstdc++\'s <iostream>, although Clang still can\'t get through the\nentire header.\n\nllvm-svn: 82728"},
		[d]={{kb,9497,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // ...\n  UnresolvedSetIterator Result = getMostSpecialized(Candidates.begin(), Candidates.end(), FailedCandidates, FD->getLocation(), PDiag(diag::err_function_template_spec_no_match) << FD->getDeclName(), PDiag(diag::err_function_template_spec_ambiguous) << FD->getDeclName() << (ExplicitTemplateArgs != nullptr), PDiag(diag::note_function_template_spec_matched));"}},
		[l]={
			["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: no function template matches function template specialization \'f\'"}
		}
	},
	["err_gc_weak_property_strong_type"]={
		[b]="err_gc_weak_property_strong_type",
		[i]="weak attribute declared on a __strong type property in GC mode",
		[j]="weak attribute declared on a __strong type property in GC mode",
		[h]=k,
		[c]="weak attribute declared on a __strong type property in GC mode",
		[f]=a,
		[e]=m,
		[g]={"eebdb67420c1",1315412661,"objc-gc: More sema work for properties declared \'weak\'","objc-gc: More sema work for properties declared \'weak\'\nin GC mode. // rdar://10073896\n\nllvm-svn: 139235"},
		[d]={{"clang/lib/Sema/SemaObjCProperty.cpp",1238,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n        // ...\n        if (PropertyIvarType.isObjCGCStrong()) {\n          Diag(PropertyDiagLoc, diag::err_gc_weak_property_strong_type);"}}
	},
	["err_generic_sel_multi_match"]={
		[b]="err_generic_sel_multi_match",
		[i]="controlling expression type %0 compatible with %1 generic association types",
		[j]="controlling expression type A compatible with B generic association types",
		[h]=k,
		[c]="controlling expression type (.*?) compatible with (.*?) generic association types",
		[f]=a,
		[e]=m,
		[g]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
		[d]={{q,1848,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  // C11 6.5.1.1p2 \"The controlling expression of a generic selection shall have\n  // type compatible with at most one of the types named in its generic\n  // association list.\"\n  if (CompatIndices.size() > 1) {\n    // ...\n    Diag(SR.getBegin(), diag::err_generic_sel_multi_match) << SR << P.second << (unsigned)CompatIndices.size();"}},
		[l]={
			["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:16:19: error: controlling expression type \'void (*)()\' compatible with 2 generic association types"}
		}
	},
	["err_generic_sel_no_match"]={
		[b]="err_generic_sel_no_match",
		[i]="controlling expression type %0 not compatible with any generic association type",
		[j]="controlling expression type A not compatible with any generic association type",
		[h]=k,
		[c]="controlling expression type (.*?) not compatible with any generic association type",
		[f]=a,
		[e]=m,
		[g]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
		[d]={{q,1865,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  // C11 6.5.1.1p2 \"If a generic selection has no default generic association,\n  // its controlling expression shall have type compatible with exactly one of\n  // the types named in its generic association list.\"\n  if (DefaultIndex == -1U && CompatIndices.size() == 0) {\n    // ...\n    Diag(SR.getBegin(), diag::err_generic_sel_no_match) << SR << P.second;"}},
		[l]={
			["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:6:19: error: controlling expression type \'char\' not compatible with any generic association type"}
		}
	},
	["err_getter_not_found"]={
		[b]="err_getter_not_found",
		[i]="no getter method for read from property",
		[j]="no getter method for read from property",
		[h]=k,
		[c]="no getter method for read from property",
		[f]=a,
		[e]=m,
		[g]={"0f0b302ffe8e",1293047195,"Complain on missing property getter method only","Complain on missing property getter method only\nif property-dot expression is decidedly\nan rvalue. // rdar://8155806.\n\nllvm-svn: 122430"},
		[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",830,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n  // Explicit properties always have getters, but implicit ones don\'t.\n  // Check that before proceeding.\n  if (RefExpr->isImplicitProperty() && !RefExpr->getImplicitPropertyGetter()) {\n    S.Diag(RefExpr->getLocation(), diag::err_getter_not_found) << RefExpr->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:92:9: error: no getter method for read from property","clang/test/SemaObjC/property-user-setter.m:135:15: error: no getter method for read from property"}
		}
	},
	["err_global_asm_qualifier_ignored"]={
		[b]={{nil,o,"err_global_asm_qualifier_ignored"}},
		[i]={{nil,o,"meaningless \'%0\' on asm outside function"}},
		[j]={{nil,o,"meaningless \'A\' on asm outside function"}},
		[h]=k,
		[c]="meaningless \'(.*?)\' on asm outside function",
		[f]=a,
		[e]={{nil,o,"Inline Assembly Issue"}},
		[g]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
		[d]={{cb,1659,"/// ParseSimpleAsm\n///\n/// [GNU] simple-asm-expr:\n///         \'asm\' \'(\' asm-string-literal \')\'\n///\nExprResult Parser::ParseSimpleAsm(bool ForAsmLabel, SourceLocation *EndLoc) {\n  // ...\n  if (isGNUAsmQualifier(Tok)) {\n    // ...\n    Diag(Tok, diag::err_global_asm_qualifier_ignored) << GNUAsmQualifiers::getQualifierName(getGNUAsmQualifier(Tok)) << FixItHint::CreateRemoval(RemovalRange);"}},
		[l]={
			["clang/test/Parser/asm-qualifiers.c"]={"clang/test/Parser/asm-qualifiers.c:55:5: error: meaningless \'volatile\' on asm outside function","clang/test/Parser/asm-qualifiers.c:56:5: error: meaningless \'inline\' on asm outside function","clang/test/Parser/asm-qualifiers.c:57:5: error: meaningless \'goto\' on asm outside function"}
		}
	},
	["err_global_call_not_config"]={
		[b]="err_global_call_not_config",
		[i]="call to global function %0 not configured",
		[j]="call to global function A not configured",
		[h]=k,
		[c]="call to global function (.*?) not configured",
		[f]=a,
		[e]=m,
		[g]={"34a20b081e43",1317599355,"CUDA: diagnose unconfigured calls to global functions","CUDA: diagnose unconfigured calls to global functions\n\nllvm-svn: 140975"},
		[d]={{q,7514,"/// 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 (getLangOpts().CUDA) {\n    if (Config) {\n    // ...\n    } else {\n      // CUDA: Calls to global functions must be configured\n      if (FDecl && FDecl->hasAttr<CUDAGlobalAttr>())\n        return ExprError(Diag(LParenLoc, diag::err_global_call_not_config) << FDecl << Fn->getSourceRange());"}},
		[l]={
			["clang/test/SemaCUDA/kernel-call.cu"]={"clang/test/SemaCUDA/kernel-call.cu:16:5: error: call to global function \'g1\' not configured"}
		}
	},
	["err_global_module_introducer_not_at_start"]={
		[b]={{nil,r,"err_global_module_introducer_not_at_start"}},
		[i]={{nil,r,"\'module;\' introducing a global module fragment can appear only at the start of the translation unit"}},
		[j]={{nil,r,"\'module;\' introducing a global module fragment can appear only at the start of the translation unit"}},
		[h]=k,
		[c]="\'module;\' introducing a global module fragment can appear only at the start of the translation unit",
		[f]=a,
		[e]={{nil,r,ac}},
		[g]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
		[d]={{cb,2416,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///   module-declaration:   [C++20]\n///     \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///   global-module-fragment:  [C++2a]\n///     \'module\' \';\' top-level-declaration-seq[opt]\n///   module-declaration:      [C++2a]\n///     \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///   private-module-fragment: [C++2a]\n///     \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a global-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::semi)) {\n    // ...\n    if (ImportState != Sema::ModuleImportState::FirstDecl) {\n      Diag(StartLoc, diag::err_global_module_introducer_not_at_start) << SourceRange(StartLoc, SemiLoc);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:37:1: error: \'module;\' introducing a global module fragment can appear only at the start of the translation unit"}
		}
	},
	["err_gnu_inline_asm_disabled"]={
		[b]="err_gnu_inline_asm_disabled",
		[i]="GNU-style inline assembly is disabled",
		[j]="GNU-style inline assembly is disabled",
		[h]=k,
		[c]="GNU\\-style inline assembly is disabled",
		[f]=a,
		[e]="Inline Assembly Issue",
		[g]={"cb0d13fc2337",1421449528,"Adding option -fno-inline-asm to disallow inline asm","Adding option -fno-inline-asm to disallow inline asm\n\nSummary:\nThis patch add a new option to dis-allow all inline asm.\nAny GCC style inline asm will be reported as an error.\n\nReviewers: rnk, echristo\n\nReviewed By: rnk, echristo\n\nSubscribers: bob.wilson, rnk, echristo, rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D6870\n\nllvm-svn: 226340"},
		[d]={{cb,897,"/// ParseExternalDeclaration:\n///\n/// The `Attrs` that are passed in are C++11 attributes and appertain to the\n/// declaration.\n///\n///       external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]\n///         function-definition\n///         declaration\n/// [GNU]   asm-definition\n/// [GNU]   __extension__ external-declaration\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC]  @end\n/// [C++]   linkage-specification\n/// [GNU] asm-definition:\n///         simple-asm-expr \';\'\n/// [C++11] empty-declaration\n/// [C++11] attribute-declaration\n///\n/// [C++11] empty-declaration:\n///           \';\'\n///\n/// [C++0x/GNU] \'extern\' \'template\' declaration\n///\n/// [C++20] module-import-declaration\n///\nParser::DeclGroupPtrTy Parser::ParseExternalDeclaration(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec *DS) {\n  // ...\n  case tok::kw_asm: {\n    // ...\n    // Check if GNU-style InlineAsm is disabled.\n    // Empty asm string is allowed because it will not introduce\n    // any assembly code.\n    if (!(getLangOpts().GNUAsm || Result.isInvalid())) {\n      // ...\n      if (!SL->getString().trim().empty())\n        Diag(StartLoc, diag::err_gnu_inline_asm_disabled);"},{"clang/lib/Parse/ParseStmtAsm.cpp",749,"/// ParseAsmStatement - Parse a GNU extended asm statement.\n///       asm-statement:\n///         gnu-asm-statement\n///         ms-asm-statement\n///\n/// [GNU] gnu-asm-statement:\n///         \'asm\' asm-qualifier-list[opt] \'(\' asm-argument \')\' \';\'\n///\n/// [GNU] asm-argument:\n///         asm-string-literal\n///         asm-string-literal \':\' asm-operands[opt]\n///         asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n///         asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n///                 \':\' asm-clobbers\n///\n/// [GNU] asm-clobbers:\n///         asm-string-literal\n///         asm-clobbers \',\' asm-string-literal\n///\nStmtResult Parser::ParseAsmStatement(bool &msAsm) {\n  // ...\n  // Check if GNU-style InlineAsm is disabled.\n  // Error on anything other than empty string.\n  if (!(getLangOpts().GNUAsm || AsmString.isInvalid())) {\n    // ...\n    if (!SL->getString().trim().empty())\n      Diag(Loc, diag::err_gnu_inline_asm_disabled);"}},
		[l]={
			["clang/test/Parser/no-gnu-inline-asm.c"]={"clang/test/Parser/no-gnu-inline-asm.c:7:1: error: GNU-style inline assembly is disabled","clang/test/Parser/no-gnu-inline-asm.c:16:7: error: GNU-style inline assembly is disabled"}
		}
	},
	["err_goto_into_protected_scope"]={
		[b]="err_goto_into_protected_scope",
		[i]="cannot jump from this goto statement to its label",
		[j]="cannot jump from this goto statement to its label",
		[h]=k,
		[c]="cannot jump from this goto statement to its label",
		[f]=a,
		[e]=m,
		[g]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,","rewrite the goto scope checking code to be more efficient, simpler,\nproduce better diagnostics, and be more correct in ObjC cases (fixing\nrdar://6803963).\n\nAn example is that we now diagnose:\n\nint test1(int x) {\n  goto L;\n  int a[x];\n  int b[x];\n  L:\n  return sizeof a;\n}\n\nwith:\n\nscope-check.c:15:3: error: illegal goto into protected scope\n  goto L;\n  ^\nscope-check.c:17:7: note: scope created by variable length array\n  int b[x];\n      ^\nscope-check.c:16:7: note: scope created by variable length array\n  int a[x];\n      ^\n\ninstead of just saying \"invalid jump\".  An ObjC example is:\n\nvoid test1() {\n  goto L;\n  @try {\nL: ;\n  } @finally {\n  }\n}\n\nt.m:6:3: error: illegal goto into protected scope\n  goto L;\n  ^\nt.m:7:3: note: scope created by @try block\n  @try {\n  ^\n\nThere are a whole ton of fixme\'s for stuff to do, but I believe that this\nis a monotonic improvement over what we had.\n\nllvm-svn: 69437"},
		[d]={{nb,666,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    // With a goto,\n    if (GotoStmt *GS = dyn_cast<GotoStmt>(Jump)) {\n      // The label may not have a statement if it\'s coming from inline MS ASM.\n      if (GS->getLabel()->getStmt()) {\n        CheckJump(GS, GS->getLabel()->getStmt(), GS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"},{nb,694,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    // We only get indirect gotos here when they have a constant target.\n    if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n      // ...\n      CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"},{nb,845,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"},{nb,945,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // ...\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope.  Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      // ...\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n        S.Diag(From->getBeginLoc(), diag::err_goto_into_protected_scope);"}},
		[l]={
			["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:45:3: error: cannot jump from this goto statement to its label"}
		}
	},
	["err_goto_ms_asm_label"]={
		[b]="err_goto_ms_asm_label",
		[i]="cannot jump from this goto statement to label %0 inside an inline assembly block",
		[j]="cannot jump from this goto statement to label A inside an inline assembly block",
		[h]=k,
		[c]="cannot jump from this goto statement to label (.*?) inside an inline assembly block",
		[f]=a,
		[e]=m,
		[g]={"31097581aad8",1411352514,"ms-inline-asm: Scope inline asm labels to functions","ms-inline-asm: Scope inline asm labels to functions\n\nSummary:\nThis fixes PR20023.  In order to implement this scoping rule, we piggy\nback on the existing LabelDecl machinery, by creating LabelDecl\'s that\nwill carry the \"internal\" name of the inline assembly label, which we\nwill rewrite the asm label to.\n\nReviewers: rnk\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D4589\n\nllvm-svn: 218230"},
		[d]={{nb,995,"void JumpScopeChecker::CheckGotoStmt(GotoStmt *GS) {\n  if (GS->getLabel()->isMSAsmLabel()) {\n    S.Diag(GS->getGotoLoc(), diag::err_goto_ms_asm_label) << GS->getLabel()->getIdentifier();"}},
		[l]={
			["clang/test/Sema/ms-inline-asm.c"]={"clang/test/Sema/ms-inline-asm.c:118:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block","clang/test/Sema/ms-inline-asm.c:124:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block","clang/test/Sema/ms-inline-asm.c:128:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block","clang/test/Sema/ms-inline-asm.c:136:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block"}
		}
	},
	["err_half_const_requires_fp16"]={
		[b]="err_half_const_requires_fp16",
		[i]="half precision constant requires cl_khr_fp16",
		[j]="half precision constant requires cl_khr_fp16",
		[h]=k,
		[c]="half precision constant requires cl_khr_fp16",
		[f]=a,
		[e]=m,
		[g]={"5c1a2c5d3e8f",1455708877,"[OpenCL] Added half type literal with suffix h.","[OpenCL] Added half type literal with suffix h.\n\nOpenCL Extension v1.2 s9.5 allows half precision floating point\ntype literals with suffices h or H when cl_khr_fp16 is enabled.\n\nExample:  half x = 1.0h;\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16865\n\nllvm-svn: 261084"},
		[d]={{q,4020,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n    // ...\n    if (Literal.isHalf) {\n      if (getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", getLangOpts()))\n      // ...\n      else {\n        Diag(Tok.getLocation(), diag::err_half_const_requires_fp16);"}},
		[l]={
			["clang/test/SemaOpenCL/half.cl"]={"clang/test/SemaOpenCL/half.cl:4:20: error: half precision constant requires cl_khr_fp16","clang/test/SemaOpenCL/half.cl:18:15: error: half precision constant requires cl_khr_fp16","clang/test/SemaOpenCL/half.cl:19:7: error: half precision constant requires cl_khr_fp16"}
		}
	},
	["err_header_import_not_header_unit"]={
		[b]={{nil,r,"err_header_import_not_header_unit"}},
		[i]={{nil,r,"header file %0 (aka \'%1\') cannot be imported because it is not known to be a header unit"}},
		[j]={{nil,r,"header file A (aka \'B\') cannot be imported because it is not known to be a header unit"}},
		[h]=k,
		[c]="header file (.*?) \\(aka \'(.*?)\'\\) cannot be imported because it is not known to be a header unit",
		[f]=a,
		[e]={{nil,r,O}},
		[g]={"8af8b8611c5d",1555017503,"[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.","[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.\n\nllvm-svn: 358231"},
		[d]={{"clang/lib/Lex/PPDirectives.cpp",2393,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // If this is a C++20 pp-import declaration, diagnose if we didn\'t find any\n  // module corresponding to the named header.\n  if (IsImportDecl && !SuggestedModule) {\n    Diag(FilenameTok, diag::err_header_import_not_header_unit) << OriginalFilename << File->getName();"}}
	},
	["err_header_import_semi_in_macro"]={
		[b]={{nil,r,"err_header_import_semi_in_macro"}},
		[i]={{nil,r,"semicolon terminating header import declaration cannot be produced by a macro"}},
		[j]={{nil,r,"semicolon terminating header import declaration cannot be produced by a macro"}},
		[h]=k,
		[c]="semicolon terminating header import declaration cannot be produced by a macro",
		[f]=a,
		[e]={{nil,r,O}},
		[g]={"8af8b8611c5d",1555017503,"[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.","[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.\n\nllvm-svn: 358231"},
		[d]={{"clang/lib/Lex/Preprocessor.cpp",1211,"/// Lex a token following the \'import\' contextual keyword.\n///\n///     pp-import: [C++20]\n///           import header-name pp-import-suffix[opt] ;\n///           import header-name-tokens pp-import-suffix[opt] ;\n/// [ObjC]    @ import module-name ;\n/// [Clang]   import module-name ;\n///\n///     header-name-tokens:\n///           string-literal\n///           < [any sequence of preprocessing-tokens other than >] >\n///\n///     module-name:\n///           module-name-qualifier[opt] identifier\n///\n///     module-name-qualifier\n///           module-name-qualifier[opt] identifier .\n///\n/// We respond to a pp-import by importing macros from the named module.\nbool Preprocessor::LexAfterModuleImport(Token &Result) {\n  // ...\n  if (ImportingHeader) {\n    // ...\n    if (SemiLoc.isMacroID())\n      Diag(SemiLoc, diag::err_header_import_semi_in_macro);"}}
	},
	["err_hex_constant_requires"]={
		[b]="err_hex_constant_requires",
		[i]="hexadecimal floating %select{constant|literal}0 requires %select{an exponent|a significand}1",
		[j]={{nil,nil,{"hexadecimal floating ",{"constant","literal"}," requires ",{"an exponent","a significand"}}}},
		[h]=k,
		[c]="hexadecimal floating (?:constant|literal) requires (?:an exponent|a significand)",
		[f]=a,
		[e]=O,
		[g]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17.\n\nllvm-svn: 262753"},
		[d]={{ab,1300,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle a hex number like 0x1234.\n  if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n    // ...\n    if (!HasSignificandDigits) {\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_hex_constant_requires) << LangOpts.CPlusPlus << 1;"},{ab,1336,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle a hex number like 0x1234.\n  if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n    // ...\n    // A binary exponent can appear with or with a \'.\'. If dotted, the\n    // binary exponent is required.\n    if (*s == \'p\' || *s == \'P\') {\n    // ...\n    } else if (saw_period) {\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_hex_constant_requires) << LangOpts.CPlusPlus << 0;"}},
		[l]={
			["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:35:16: error: hexadecimal floating constant requires a significand"}
		}
	},
	["err_hex_escape_no_digits"]={
		[b]="err_hex_escape_no_digits",
		[i]="\\%0 used with no following hex digits",
		[j]="\\A used with no following hex digits",
		[h]=k,
		[c]="\\\\(.*?) used with no following hex digits",
		[f]=a,
		[e]=O,
		[g]={S,1236199783,R,Q},
		[d]={{"clang/lib/Lex/Lexer.cpp",3334,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Delimited && Kind == \'U\') {\n    if (Diagnose)\n      Diag(SlashLoc, diag::err_hex_escape_no_digits) << StringRef(KindLoc, 1);"},{ab,201,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  case \'x\': { // Hex escape.\n    // ...\n    if (ThisTokBuf != ThisTokEnd && *ThisTokBuf == \'{\') {\n    // ...\n    } else if (ThisTokBuf == ThisTokEnd || !isHexDigit(*ThisTokBuf)) {\n      if (Diags)\n        Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_hex_escape_no_digits) << \"x\";"},{ab,464,"static bool ProcessNumericUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, bool &Delimited, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  if (UcnBegin[1] == \'u\' && in_char_string_literal && ThisTokBuf != ThisTokEnd && *ThisTokBuf == \'{\') {\n  // ...\n  } else if (ThisTokBuf == ThisTokEnd || !isHexDigit(*ThisTokBuf)) {\n    if (Diags)\n      Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::err_hex_escape_no_digits) << StringRef(&ThisTokBuf[-1], 1);"}},
		[l]={
			["clang/test/Sema/ucn-cstring.c"]={"clang/test/Sema/ucn-cstring.c:11:19: error: \\U used with no following hex digits"}
		}
	},
	["err_hidden_visibility_dllexport"]={
		[b]={{nil,n,"err_hidden_visibility_dllexport"}},
		[i]={{nil,n,"hidden visibility cannot be applied to \'dllexport\' declaration"}},
		[j]={{nil,n,"hidden visibility cannot be applied to \'dllexport\' declaration"}},
		[h]=k,
		[c]="hidden visibility cannot be applied to \'dllexport\' declaration",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={"6f9c4851ab7c",1663023396,"[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllim...","[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport\n\nHidden visibility is incompatible with dllexport.\nHidden and protected visibilities are incompatible with dllimport.\n(PlayStation uses dllexport protected.)\n\nWhen an explicit visibility attribute applies on a dllexport/dllimport\ndeclaration, report a Frontend error (Sema does not compute visibility).\n\nReviewed By: mstorsjo\n\nDifferential Revision: https://reviews.llvm.org/D133266"},
		[d]={{"clang/lib/CodeGen/CodeGenModule.cpp",1385,"void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const {\n  // ...\n  if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) {\n    // ...\n    if (GV->hasDLLExportStorageClass()) {\n      if (LV.getVisibility() == HiddenVisibility)\n        getDiags().Report(D->getLocation(), diag::err_hidden_visibility_dllexport);"}}
	},
	["err_hip_invalid_args_builtin_mangled_name"]={
		[b]={{nil,w,"err_hip_invalid_args_builtin_mangled_name"}},
		[i]={{nil,w,"invalid argument: symbol must be a device-side function or global variable"}},
		[j]={{nil,w,"invalid argument: symbol must be a device-side function or global variable"}},
		[h]=k,
		[c]="invalid argument\\: symbol must be a device\\-side function or global variable",
		[f]=a,
		[e]={{nil,w,m}},
		[g]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
		[d]={{K,2795,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_get_device_side_mangled_name: {\n    // ...\n    if (!Check(TheCall)) {\n      Diag(TheCall->getBeginLoc(), diag::err_hip_invalid_args_builtin_mangled_name);"}},
		[l]={
			["clang/test/SemaCUDA/builtin-mangled-name.cu"]={"clang/test/SemaCUDA/builtin-mangled-name.cu:12:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:14:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:16:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:18:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:20:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:22:7: error: invalid argument: symbol must be a device-side function or global variable"}
		}
	},
	["err_hlsl_attr_invalid_ast_node"]={
		[b]={{nil,n,"err_hlsl_attr_invalid_ast_node"}},
		[i]={{nil,n,"attribute %0 only applies to %1"}},
		[j]={{nil,n,"attribute A only applies to B"}},
		[h]=k,
		[c]="attribute (.*?) only applies to (.*?)",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{u,7165,"static void handleHLSLSV_DispatchThreadIDAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: support semantic on field.\n  // See https://github.com/llvm/llvm-project/issues/57889.\n  if (isa<FieldDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_invalid_ast_node) << AL << \"parameter\";"}}
	},
	["err_hlsl_attr_invalid_type"]={
		[b]={{nil,n,"err_hlsl_attr_invalid_type"}},
		[i]={{nil,n,"attribute %0 only applies to a field or parameter of type \'%1\'"}},
		[j]={{nil,n,"attribute A only applies to a field or parameter of type \'B\'"}},
		[h]=k,
		[c]="attribute (.*?) only applies to a field or parameter of type \'(.*?)\'",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{u,7172,"static void handleHLSLSV_DispatchThreadIDAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isLegalTypeForHLSLSV_DispatchThreadID(VD->getType())) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_invalid_type) << AL << \"uint/uint2/uint3\";"}},
		[l]={
			["clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl"]={"clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl:5:24: error: attribute \'SV_DispatchThreadID\' only applies to a field or parameter of type \'uint/uint2/uint3\'","clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl:15:22: error: attribute \'SV_DispatchThreadID\' only applies to a field or parameter of type \'uint/uint2/uint3\'"}
		}
	},
	["err_hlsl_attr_unsupported_in_stage"]={
		[b]={{nil,s,"err_hlsl_attr_unsupported_in_stage"}},
		[i]={{nil,s,"attribute %0 is unsupported in %select{Pixel|Vertex|Geometry|Hull|Domain|Compute|Library|RayGeneration|Intersection|AnyHit|ClosestHit|Miss|Callable|Mesh|Amplification|Invalid}1 shaders, requires %2"}},
		[j]={{nil,s,{"attribute A is unsupported in ",{"Pixel","Vertex","Geometry","Hull","Domain","Compute","Library","RayGeneration","Intersection","AnyHit","ClosestHit","Miss","Callable","Mesh","Amplification","Invalid"}," shaders, requires C"}}},
		[h]=k,
		[c]="attribute (.*?) is unsupported in (?:Pixel|Vertex|Geometry|Hull|Domain|Compute|Library|RayGeneration|Intersection|AnyHit|ClosestHit|Miss|Callable|Mesh|Amplification|Invalid) shaders, requires (.*?)",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"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"},
		[d]={{u,7056,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!llvm::is_contained({Triple::Compute, Triple::Mesh, Triple::Amplification, Triple::Library}, Env)) {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) << AL << Pipeline << \"Compute, Amplification, Mesh or Library\";"},{u,7127,"static void handleHLSLSVGroupIndexAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Env != Triple::Compute && Env != Triple::Library) {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) << AL << (uint32_t)Pipeline << \"Compute\";"},{u,7154,"static void handleHLSLSV_DispatchThreadIDAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: it is OK for a compute shader entry and pixel shader entry live in\n  // same HLSL file.Issue https://github.com/llvm/llvm-project/issues/57880.\n  if (Target.getEnvironment() != Triple::Compute && Target.getEnvironment() != Triple::Library) {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) << AL << Pipeline << \"Compute\";"}},
		[l]={
			["clang/test/SemaHLSL/Semantics/entry_parameter.hlsl"]={"clang/test/SemaHLSL/Semantics/entry_parameter.hlsl:7:22: error: attribute \'SV_GroupIndex\' is unsupported in Mesh shaders, requires Compute","clang/test/SemaHLSL/Semantics/entry_parameter.hlsl:7:47: error: attribute \'SV_DispatchThreadID\' is unsupported in Mesh shaders, requires Compute"}
		}
	},
	["err_hlsl_attribute_param_mismatch"]={
		[b]={{nil,s,"err_hlsl_attribute_param_mismatch"}},
		[i]={{nil,s,"%0 attribute parameters do not match the previous declaration"}},
		[j]={{nil,s,"A attribute parameters do not match the previous declaration"}},
		[h]=k,
		[c]="(.*?) attribute parameters do not match the previous declaration",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"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"},
		[d]={{u,7112,"HLSLNumThreadsAttr *Sema::mergeHLSLNumThreadsAttr(Decl *D, const AttributeCommonInfo &AL, int X, int Y, int Z) {\n  if (HLSLNumThreadsAttr *NT = D->getAttr<HLSLNumThreadsAttr>()) {\n    if (NT->getX() != X || NT->getY() != Y || NT->getZ() != Z) {\n      Diag(NT->getLocation(), diag::err_hlsl_attribute_param_mismatch) << AL;"},{u,7209,"HLSLShaderAttr *Sema::mergeHLSLShaderAttr(Decl *D, const AttributeCommonInfo &AL, HLSLShaderAttr::ShaderType ShaderType) {\n  if (HLSLShaderAttr *NT = D->getAttr<HLSLShaderAttr>()) {\n    if (NT->getType() != ShaderType) {\n      Diag(NT->getLocation(), diag::err_hlsl_attribute_param_mismatch) << AL;"}},
		[l]={
			["clang/test/SemaHLSL/shader_type_attr.hlsl"]={"clang/test/SemaHLSL/shader_type_attr.hlsl:31:2: error: \'shader\' attribute parameters do not match the previous declaration","clang/test/SemaHLSL/shader_type_attr.hlsl:43:2: error: \'shader\' attribute parameters do not match the previous declaration"}
		}
	},
	["err_hlsl_entry_shader_attr_mismatch"]={
		[b]="err_hlsl_entry_shader_attr_mismatch",
		[i]="%0 attribute on entry function does not match the pipeline stage",
		[j]="A attribute on entry function does not match the pipeline stage",
		[h]=k,
		[c]="(.*?) attribute on entry function does not match the pipeline stage",
		[f]=a,
		[e]=v,
		[g]={N,1625925174,M,L},
		[d]={{p,10275,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().HLSL) {\n    // ...\n    // Skip operator overload which not identifier.\n    // Also make sure NewFD is in translation-unit scope.\n    if (!NewFD->isInvalidDecl() && Name.isIdentifier() && NewFD->getName() == TargetInfo.getTargetOpts().HLSLEntry && S->getDepth() == 0) {\n      // ...\n      if (!NewFD->isInvalidDecl()) {\n        // ...\n        // To share code with HLSLShaderAttr, add HLSLShaderAttr to entry\n        // function.\n        if (HLSLShaderAttr *NT = NewFD->getAttr<HLSLShaderAttr>()) {\n          if (NT->getType() != ShaderType)\n            Diag(NT->getLocation(), diag::err_hlsl_entry_shader_attr_mismatch) << NT;"}},
		[l]={
			["clang/test/SemaHLSL/entry_shader.hlsl"]={"clang/test/SemaHLSL/entry_shader.hlsl:5:21: error: \'shader\' attribute on entry function does not match the pipeline stage"}
		}
	},
	["err_hlsl_expected_space"]={
		[b]={{nil,n,"err_hlsl_expected_space"}},
		[i]={{nil,n,"invalid space specifier \'%0\' used; expected \'space\' followed by an integer, like space1"}},
		[j]={{nil,n,"invalid space specifier \'A\' used; expected \'space\' followed by an integer, like space1"}},
		[h]=k,
		[c]="invalid space specifier \'(.*?)\' used; expected \'space\' followed by an integer, like space1",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{u,7271,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Space.startswith(\"space\")) {\n    S.Diag(SpaceArgLoc, diag::err_hlsl_expected_space) << Space;"},{u,7277,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (SpaceNum.getAsInteger(10, Num)) {\n    S.Diag(SpaceArgLoc, diag::err_hlsl_expected_space) << Space;"}},
		[l]={
			["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:11:26: error: invalid space specifier \'s2\' used; expected \'space\' followed by an integer, like space1","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:19:26: error: invalid space specifier \'spaces\' used; expected \'space\' followed by an integer, like space1"}
		}
	},
	["err_hlsl_init_priority_unsupported"]={
		[b]={{nil,n,"err_hlsl_init_priority_unsupported"}},
		[i]={{nil,n,"initializer priorities are not supported in HLSL"}},
		[j]={{nil,n,"initializer priorities are not supported in HLSL"}},
		[h]=k,
		[c]="initializer priorities are not supported in HLSL",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{u,2344,"static void handleConstructorAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.getLangOpts().HLSL && AL.getNumArgs()) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_init_priority_unsupported);"},{u,3851,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.getLangOpts().HLSL) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_init_priority_unsupported);"}},
		[l]={
			["clang/test/SemaHLSL/GlobalConstructors.hlsl"]={"clang/test/SemaHLSL/GlobalConstructors.hlsl:12:20: error: initializer priorities are not supported in HLSL","clang/test/SemaHLSL/GlobalConstructors.hlsl:15:16: error: initializer priorities are not supported in HLSL"}
		}
	},
	["err_hlsl_missing_numthreads"]={
		[b]={{nil,n,"err_hlsl_missing_numthreads"}},
		[i]={{nil,n,"missing numthreads attribute for %0 shader entry"}},
		[j]={{nil,n,"missing numthreads attribute for A shader entry"}},
		[h]=k,
		[c]="missing numthreads attribute for (.*?) shader entry",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{p,12290,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n  // ...\n  case llvm::Triple::EnvironmentType::Compute:\n    if (!FD->hasAttr<HLSLNumThreadsAttr>()) {\n      Diag(FD->getLocation(), diag::err_hlsl_missing_numthreads) << Triple.getEnvironmentName();"}},
		[l]={
			["clang/test/SemaHLSL/entry.hlsl"]={"clang/test/SemaHLSL/entry.hlsl:13:6: error: missing numthreads attribute for compute shader entry"}
		}
	},
	["err_hlsl_missing_semantic_annotation"]={
		[b]={{nil,n,"err_hlsl_missing_semantic_annotation"}},
		[i]={{nil,n,"semantic annotations must be present for all parameters of an entry function or patch constant function"}},
		[j]={{nil,n,"semantic annotations must be present for all parameters of an entry function or patch constant function"}},
		[h]=k,
		[c]="semantic annotations must be present for all parameters of an entry function or patch constant function",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{p,12301,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n  // ...\n  for (const auto *Param : FD->parameters()) {\n    if (!Param->hasAttr<HLSLAnnotationAttr>()) {\n      // ...\n      Diag(FD->getLocation(), diag::err_hlsl_missing_semantic_annotation);"}},
		[l]={
			["clang/test/SemaHLSL/Semantics/missing_entry_annotation.hlsl"]={"clang/test/SemaHLSL/Semantics/missing_entry_annotation.hlsl:4:6: error: semantic annotations must be present for all parameters of an entry function or patch constant function"}
		}
	},
	["err_hlsl_numthreads_argument_oor"]={
		[b]={{nil,s,"err_hlsl_numthreads_argument_oor"}},
		[i]={{nil,s,"argument \'%select{X|Y|Z}0\' to numthreads attribute cannot exceed %1"}},
		[j]={{nil,s,{"argument \'",{"X","Y","Z"},"\' to numthreads attribute cannot exceed B"}}},
		[h]=k,
		[c]="argument \'(?:X|Y|Z)\' to numthreads attribute cannot exceed (.*?)",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"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"},
		[d]={{u,7077,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (X > 1024) {\n    S.Diag(AL.getArgAsExpr(0)->getExprLoc(), diag::err_hlsl_numthreads_argument_oor) << 0 << 1024;"},{u,7085,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Y > 1024) {\n    S.Diag(AL.getArgAsExpr(1)->getExprLoc(), diag::err_hlsl_numthreads_argument_oor) << 1 << 1024;"},{u,7093,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Z > ZMax) {\n    S.Diag(AL.getArgAsExpr(2)->getExprLoc(), diag::err_hlsl_numthreads_argument_oor) << 2 << ZMax;"}},
		[l]={
			["clang/test/SemaHLSL/num_threads.hlsl"]={"clang/test/SemaHLSL/num_threads.hlsl:78:17: error: argument \'Z\' to numthreads attribute cannot exceed 1"}
		}
	},
	["err_hlsl_numthreads_invalid"]={
		[b]={{nil,s,"err_hlsl_numthreads_invalid"}},
		[i]={{nil,s,"total number of threads cannot exceed %0"}},
		[j]={{nil,s,"total number of threads cannot exceed A"}},
		[h]=k,
		[c]="total number of threads cannot exceed (.*?)",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"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"},
		[d]={{u,7098,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (X * Y * Z > ThreadMax) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_numthreads_invalid) << ThreadMax;"}},
		[l]={
			["clang/test/SemaHLSL/num_threads.hlsl"]={"clang/test/SemaHLSL/num_threads.hlsl:80:2: error: total number of threads cannot exceed 768"}
		}
	},
	["err_hlsl_operator_unsupported"]={
		[b]={{nil,s,"err_hlsl_operator_unsupported"}},
		[i]={{nil,s,"the \'%select{&|*|->}0\' operator is unsupported in HLSL"}},
		[j]={{nil,s,{"the \'",{"&","*","->"},"\' operator is unsupported in HLSL"}}},
		[h]=k,
		[c]="the \'(?:&|\\*|\\-\\>)\' operator is unsupported in HLSL",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"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"},
		[d]={{q,16163,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  if (getLangOpts().HLSL && OpLoc.isValid()) {\n    if (Opc == UO_AddrOf)\n      return ExprError(Diag(OpLoc, diag::err_hlsl_operator_unsupported) << 0);"},{q,16224,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  if (getLangOpts().HLSL && OpLoc.isValid()) {\n    // ...\n    if (Opc == UO_Deref)\n      return ExprError(Diag(OpLoc, diag::err_hlsl_operator_unsupported) << 1);"},{"clang/lib/Sema/SemaExprMember.cpp",1735,"/// The main callback when the parser finds something like\n///   expression . [nested-name-specifier] identifier\n///   expression -> [nested-name-specifier] identifier\n/// where \'identifier\' encompasses a fairly broad spectrum of\n/// possibilities, including destructor and operator references.\n///\n/// \\param OpKind either tok::arrow or tok::period\n/// \\param ObjCImpDecl the current Objective-C \\@implementation\n///   decl; this is an ugly hack around the fact that Objective-C\n///   \\@implementations aren\'t properly put in the context chain\nExprResult Sema::ActOnMemberAccessExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, UnqualifiedId &Id, Decl *ObjCImpDecl) {\n  // ...\n  if (getLangOpts().HLSL && IsArrow)\n    return ExprError(Diag(OpLoc, diag::err_hlsl_operator_unsupported) << 2);"}},
		[l]={
			["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:22:22: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:26:12: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:30:12: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:30:15: error: the \'->\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:34:5: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:36:3: error: the \'*\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:41:11: error: the \'->\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:50:21: error: the \'&\' operator is unsupported in HLSL"}
		}
	},
	["err_hlsl_pointers_unsupported"]={
		[b]={{nil,s,"err_hlsl_pointers_unsupported"}},
		[i]={{nil,s,"%select{pointers|references}0 are unsupported in HLSL"}},
		[j]={{nil,s,{{"pointers","references"}," are unsupported in HLSL"}}},
		[h]=k,
		[c]="(?:pointers|references) are unsupported in HLSL",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"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"},
		[d]={{G,2190,"/// Build a pointer type.\n///\n/// \\param T The type to which we\'ll be building a pointer.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// pointer type or, if there is no such entity, the location of the\n/// type that will have pointer type.\n///\n/// \\param Entity The name of the entity that involves the pointer\n/// type, if known.\n///\n/// \\returns A suitable pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().HLSL && Loc.isValid()) {\n    Diag(Loc, diag::err_hlsl_pointers_unsupported) << 0;"},{G,2275,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().HLSL && Loc.isValid()) {\n    Diag(Loc, diag::err_hlsl_pointers_unsupported) << 1;"},{G,3108,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().HLSL && Loc.isValid()) {\n    Diag(Loc, diag::err_hlsl_pointers_unsupported) << 0;"}},
		[l]={
			["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:70:19: error: pointers are unsupported in HLSL","clang/test/SemaHLSL/group_shared.hlsl:73:7: error: pointers are unsupported in HLSL"}
		}
	},
	["err_hlsl_separate_attr_arg_and_number"]={
		[b]={{nil,n,"err_hlsl_separate_attr_arg_and_number"}},
		[i]={{nil,n,"wrong argument format for hlsl attribute, use %0 instead"}},
		[j]={{nil,n,"wrong argument format for hlsl attribute, use A instead"}},
		[h]=k,
		[c]="wrong argument format for hlsl attribute, use (.*?) instead",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={"e3fd0b20731f",1658170225,"[HLSL] Add resource binding attribute for HLSL.","[HLSL] Add resource binding attribute for HLSL.\n\nThe resource binding attribute is to set the virtual registers and logical register spaces resources in HLSL are bound to.\nFormat is \'\'register(ID,  space)\'\' like register(t3,  space1).\nID must be start with\nt – for shader resource views (SRV),\ns – for samplers,\nu – for unordered access views (UAV),\nb – for constant buffer views (CBV).\n\nRegister space is default to space0.\n\nThe full documentation is available here: https://docs.microsoft.com/en-us/windows/win32/direct3d12/resource-binding-in-hlsl\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D130033"},
		[d]={{"clang/lib/Parse/ParseHLSL.cpp",114,"static void fixSeparateAttrArgAndNumber(StringRef ArgStr, SourceLocation ArgLoc, Token Tok, ArgsVector &ArgExprs, Parser &P, ASTContext &Ctx, Preprocessor &PP) {\n  // ...\n  P.Diag(ArgLoc, diag::err_hlsl_separate_attr_arg_and_number) << FixedArg << FixItHint::CreateReplacement(SourceRange(ArgLoc, EndNumLoc), FixedArg);"}},
		[l]={
			["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:30:22: error: wrong argument format for hlsl attribute, use b2 instead","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:34:22: error: wrong argument format for hlsl attribute, use b2 instead","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:34:27: error: wrong argument format for hlsl attribute, use space3 instead"}
		}
	},
	["err_hlsl_unsupported_register_number"]={
		[b]={{nil,n,"err_hlsl_unsupported_register_number"}},
		[i]={{nil,n,"register number should be an integer"}},
		[j]={{nil,n,"register number should be an integer"}},
		[h]=k,
		[c]="register number should be an integer",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{u,7265,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate.\n  if (!Slot.empty()) {\n    // ...\n    if (SlotNum.getAsInteger(10, Num)) {\n      S.Diag(ArgLoc, diag::err_hlsl_unsupported_register_number);"}},
		[l]={
			["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:15:22: error: register number should be an integer","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:27:22: error: register number should be an integer"}
		}
	},
	["err_hlsl_unsupported_register_type"]={
		[b]={{nil,n,"err_hlsl_unsupported_register_type"}},
		[i]={{nil,n,"invalid resource class specifier \'%0\' used; expected \'b\', \'s\', \'t\', or \'u\'"}},
		[j]={{nil,n,"invalid resource class specifier \'A\' used; expected \'b\', \'s\', \'t\', or \'u\'"}},
		[h]=k,
		[c]="invalid resource class specifier \'(.*?)\' used; expected \'b\', \'s\', \'t\', or \'u\'",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{u,7257,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate.\n  if (!Slot.empty()) {\n    // ...\n    default:\n      S.Diag(ArgLoc, diag::err_hlsl_unsupported_register_type) << Slot.substr(0, 1);"}},
		[l]={
			["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:4:20: error: invalid resource class specifier \'c\' used; expected \'b\', \'s\', \'t\', or \'u\'","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:7:22: error: invalid resource class specifier \'i\' used; expected \'b\', \'s\', \'t\', or \'u\'"}
		}
	},
	["err_iboutletcollection_builtintype"]={
		[b]="err_iboutletcollection_builtintype",
		[i]="type argument of iboutletcollection attribute cannot be a builtin type",
		[j]="type argument of iboutletcollection attribute cannot be a builtin type",
		[h]=k,
		[c]="type argument of iboutletcollection attribute cannot be a builtin type",
		[f]=a,
		[e]=m,
		[g]={"9d7d3d84ac95",1282087156,"Diagnose if type of iboutletcollection attribute is a builtin type.","Diagnose if type of iboutletcollection attribute is a builtin type.\n\nllvm-svn: 111324"},
		[d]={{u,1536,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Diagnose use of non-object type in iboutletcollection attribute.\n  // FIXME. Gnu attribute extension ignores use of builtin types in\n  // attributes. So, __attribute__((iboutletcollection(char))) will be\n  // treated as __attribute__((iboutletcollection())).\n  if (!QT->isObjCIdType() && !QT->isObjCObjectType()) {\n    S.Diag(AL.getLoc(), QT->isBuiltinType() ? diag::err_iboutletcollection_builtintype : diag::err_iboutletcollection_type) << QT;"}},
		[l]={
			["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:25:20: error: type argument of iboutletcollection attribute cannot be a builtin type"}
		}
	},
	["err_iboutletcollection_type"]={
		[b]="err_iboutletcollection_type",
		[i]="invalid type %0 as argument of iboutletcollection attribute",
		[j]="invalid type A as argument of iboutletcollection attribute",
		[h]=k,
		[c]="invalid type (.*?) as argument of iboutletcollection attribute",
		[f]=a,
		[e]=m,
		[g]={"b5d59b66c27e",1282076592,"Patch to add type parameter support for attribute iboutletcollection.","Patch to add type parameter support for attribute iboutletcollection.\nRadar 8308053.\n\nllvm-svn: 111275"},
		[d]={{u,1520,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.hasParsedType())\n  // ...\n  else {\n    // ...\n    if (!PT) {\n      S.Diag(AL.getLoc(), diag::err_iboutletcollection_type) << \"NSObject\";"},{u,1537,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Diagnose use of non-object type in iboutletcollection attribute.\n  // FIXME. Gnu attribute extension ignores use of builtin types in\n  // attributes. So, __attribute__((iboutletcollection(char))) will be\n  // treated as __attribute__((iboutletcollection())).\n  if (!QT->isObjCIdType() && !QT->isObjCObjectType()) {\n    S.Diag(AL.getLoc(), QT->isBuiltinType() ? diag::err_iboutletcollection_builtintype : diag::err_iboutletcollection_type) << QT;"}},
		[l]={
			["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:23:20: error: invalid type \'PV\' (aka \'void *\') as argument of iboutletcollection attribute"}
		}
	},
	["err_ice_ambiguous_conversion"]={
		[b]="err_ice_ambiguous_conversion",
		[i]="ambiguous conversion from type %0 to an integral or unscoped enumeration type",
		[j]="ambiguous conversion from type A to an integral or unscoped enumeration type",
		[h]=k,
		[c]="ambiguous conversion from type (.*?) to an integral or unscoped enumeration type",
		[f]=a,
		[e]=m,
		[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
		[d]={{q,17882,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      // ...\n      SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ice_ambiguous_conversion) << T; }"}},
		[l]={
			["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:18:9: error: ambiguous conversion from type \'const A\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:50:24: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:58:11: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:67:9: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:74:12: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:82:19: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type"}
		}
	},
	["err_ice_explicit_conversion"]={
		[b]="err_ice_explicit_conversion",
		[i]="integral constant expression requires explicit conversion from %0 to %1",
		[j]="integral constant expression requires explicit conversion from A to B",
		[h]=k,
		[c]="integral constant expression requires explicit conversion from (.*?) to (.*?)",
		[f]=a,
		[e]=m,
		[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
		[d]={{q,17871,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      // ...\n      SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_ice_explicit_conversion) << T << ConvTy; }"}},
		[l]={
			["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:49:24: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:57:11: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:66:9: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:73:12: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:81:19: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'"}
		}
	},
	["err_ice_incomplete_type"]={
		[b]="err_ice_incomplete_type",
		[i]="integral constant expression has incomplete class type %0",
		[j]="integral constant expression has incomplete class type A",
		[h]=k,
		[c]="integral constant expression has incomplete class type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
		[d]={{q,17866,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      // ...\n      SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ice_incomplete_type) << T; }"}},
		[l]={
			["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:48:24: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:56:11: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:65:9: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:72:12: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:80:19: error: integral constant expression has incomplete class type \'struct Incomplete\'"}
		}
	},
	["err_ice_not_integral"]={
		[b]="err_ice_not_integral",
		[i]={{nil,mb,"%select{integer|integral}1 constant expression must have %select{integer|integral or unscoped enumeration}1 type, not %0"},{sb,nil,"integral constant expression must have integral or unscoped enumeration type, not %0"}},
		[j]={{nil,mb,{{"integer","integral"}," constant expression must have ",{"integer","integral or unscoped enumeration"}," type, not A"}},{sb,nil,"integral constant expression must have integral or unscoped enumeration type, not A"}},
		[h]=k,
		[c]="(?:integer|integral) constant expression must have (?:integer|integral or unscoped enumeration) type, not (.*?)",
		[f]=a,
		[e]=m,
		[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
		[d]={{q,17796,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, AllowFoldKind CanFold) {\n  class SimpleICEDiagnoser : public VerifyICEDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ice_not_integral) << T << S.LangOpts.CPlusPlus; }"}},
		[l]={
			["clang/test/SemaCXX/enum-bitfield.cpp"]={"clang/test/SemaCXX/enum-bitfield.cpp:17:12: error: integral constant expression must have integral or unscoped enumeration type, not \'Z\'"}
		}
	},
	["err_ice_too_large"]={
		[b]="err_ice_too_large",
		[i]="integer constant expression evaluates to value %0 that cannot be represented in a %1-bit %select{signed|unsigned}2 integer type",
		[j]={{nil,nil,{"integer constant expression evaluates to value A that cannot be represented in a B-bit ",{"signed","unsigned"}," integer type"}}},
		[h]=k,
		[c]="integer constant expression evaluates to value (.*?) that cannot be represented in a (.*?)\\-bit (?:signed|unsigned) integer type",
		[f]=a,
		[e]=m,
		[g]={"31f42318d833",1406213483,"Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Sm...","Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Smith. Amends r213657.\n\nllvm-svn: 213865"},
		[d]={{u,235,"/// 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 (!I->isIntN(32)) {\n    S.Diag(Expr->getExprLoc(), diag::err_ice_too_large) << toString(*I, 10, false) << 32 << /* Unsigned */ 1;"},{u,263,"/// Wrapper around checkUInt32Argument, with an extra check to be sure\n/// that the result will fit into a regular (signed) int. All args have the same\n/// purpose as they do in checkUInt32Argument.\ntemplate <typename AttrInfo> static bool checkPositiveIntArgument(Sema &S, const AttrInfo &AI, const Expr *Expr, int &Val, unsigned Idx = UINT_MAX) {\n  // ...\n  if (UVal > (uint32_t)std::numeric_limits<int>::max()) {\n    // ...\n    S.Diag(Expr->getExprLoc(), diag::err_ice_too_large) << toString(I, 10, false) << 32 << /* Unsigned */ 0;"},{u,5619,"// Checks whether an argument of launch_bounds attribute is\n// acceptable, performs implicit conversion to Rvalue, and returns\n// non-nullptr Expr result on success. Otherwise, it returns nullptr\n// and may output an error.\nstatic Expr *makeLaunchBoundsArgExpr(Sema &S, Expr *E, const CUDALaunchBoundsAttr &AL, const unsigned Idx) {\n  // ...\n  // Make sure we can fit it in 32 bits.\n  if (!I->isIntN(32)) {\n    S.Diag(E->getExprLoc(), diag::err_ice_too_large) << toString(*I, 10, false) << 32 << /* Unsigned */ 1;"}},
		[l]={
			["clang/test/Sema/constructor-attribute.c"]={"clang/test/Sema/constructor-attribute.c:8:40: error: integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type"}
		}
	},
	["err_id_after_template_in_nested_name_spec"]={
		[b]="err_id_after_template_in_nested_name_spec",
		[i]="expected template name after \'template\' keyword in nested name specifier",
		[j]="expected template name after \'template\' keyword in nested name specifier",
		[h]=k,
		[c]="expected template name after \'template\' keyword in nested name specifier",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{db,303,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///       \'::\'[opt] nested-name-specifier\n///       \'::\'\n///\n///       nested-name-specifier:\n///         type-name \'::\'\n///         namespace-name \'::\'\n///         nested-name-specifier identifier \'::\'\n///         nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // Parse the optional \'template\' keyword, then make sure we have\n    // \'identifier <\' after it.\n    if (Tok.is(tok::kw_template)) {\n      // ...\n      if (Tok.is(tok::identifier)) {\n      // ...\n      } else if (Tok.is(tok::kw_operator)) {\n        // ...\n        if (TemplateName.getKind() != UnqualifiedIdKind::IK_OperatorFunctionId && TemplateName.getKind() != UnqualifiedIdKind::IK_LiteralOperatorId) {\n          Diag(TemplateName.getSourceRange().getBegin(), diag::err_id_after_template_in_nested_name_spec) << TemplateName.getSourceRange();"}}
	},
	["err_ident_list_in_fn_declaration"]={
		[b]="err_ident_list_in_fn_declaration",
		[i]="a parameter list without types is only allowed in a function definition",
		[j]="a parameter list without types is only allowed in a function definition",
		[h]=k,
		[c]="a parameter list without types is only allowed in a function definition",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{G,5459,"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      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        if (FTI.NumParams && FTI.Params[0].Param == nullptr) {\n          // ...\n          S.Diag(FTI.Params[0].IdentLoc, diag::err_ident_list_in_fn_declaration);"}},
		[l]={
			["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:20:8: error: a parameter list without types is only allowed in a function definition"}
		}
	},
	["err_ifunc_resolver_return"]={
		[b]="err_ifunc_resolver_return",
		[i]="ifunc resolver function must return a pointer",
		[j]="ifunc resolver function must return a pointer",
		[h]=k,
		[c]="ifunc resolver function must return a pointer",
		[f]=a,
		[e]={{nil,V,v},{"7.1",nil,m}},
		[g]={"85eda12d0937",1460360939,"[GCC] Attribute ifunc support in clang","[GCC] Attribute ifunc support in clang\n\nThis patch add support for GCC attribute((ifunc(\"resolver\"))) for\ntargets that use ELF as object file format. In general ifunc is a\nspecial kind of function alias with type @gnu_indirect_function. LLVM\npatch http://reviews.llvm.org/D15525\n\nDifferential Revision: http://reviews.llvm.org/D15524\n\nllvm-svn: 265917"},
		[d]={{"clang/lib/CodeGen/CodeGenModule.cpp",609,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (IsIFunc) {\n    // ...\n    if (!FTy->getReturnType()->isPointerTy()) {\n      Diags.Report(Location, diag::err_ifunc_resolver_return);"}},
		[l]={
			["clang/test/CodeGen/attr-ifunc.c"]={"clang/test/CodeGen/attr-ifunc.c:27:30: error: ifunc resolver function must return a pointer"}
		}
	},
	["err_illegal_container_subscripting_op"]={
		[b]="err_illegal_container_subscripting_op",
		[i]="illegal operation on Objective-C container subscripting",
		[j]="illegal operation on Objective-C container subscripting",
		[h]=k,
		[c]="illegal operation on Objective\\-C container subscripting",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",1573,"/// Check an increment or decrement of a pseudo-object expression.\nExprResult Sema::checkPseudoObjectIncDec(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // ...\n  if (ObjCPropertyRefExpr *refExpr = dyn_cast<ObjCPropertyRefExpr>(opaqueRef)) {\n  // ...\n  } else if (isa<ObjCSubscriptRefExpr>(opaqueRef)) {\n    Diag(opcLoc, diag::err_illegal_container_subscripting_op);"}},
		[l]={
			["clang/test/SemaObjC/objc-container-subscripting.m"]={"clang/test/SemaObjC/objc-container-subscripting.m:23:24: error: illegal operation on Objective-C container subscripting","clang/test/SemaObjC/objc-container-subscripting.m:24:24: error: illegal operation on Objective-C container subscripting","clang/test/SemaObjC/objc-container-subscripting.m:25:15: error: illegal operation on Objective-C container subscripting"}
		}
	},
	["err_illegal_decl_array_of_functions"]={
		[b]="err_illegal_decl_array_of_functions",
		[i]="\'%0\' declared as array of functions of type %1",
		[j]="\'A\' declared as array of functions of type B",
		[h]=k,
		[c]="\'(.*?)\' declared as array of functions of type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,2531,"/// 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 (T->isFunctionType()) {\n    Diag(Loc, diag::err_illegal_decl_array_of_functions) << getPrintableNameForEntity(Entity) << T;"}},
		[l]={
			["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:60:14: error: \'x\' declared as array of functions of type \'int (void)\'"}
		}
	},
	["err_illegal_decl_array_of_references"]={
		[b]="err_illegal_decl_array_of_references",
		[i]="\'%0\' declared as array of references of type %1",
		[j]="\'A\' declared as array of references of type B",
		[h]=k,
		[c]="\'(.*?)\' declared as array of references of type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,2486,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // C++ [dcl.array]p1:\n    //   T is called the array element type; this type shall not be a reference\n    //   type, the (possibly cv-qualified) type void, a function type or an\n    //   abstract class type.\n    //\n    // C++ [dcl.array]p3:\n    //   When several \"array of\" specifications are adjacent, [...] only the\n    //   first of the constant expressions that specify the bounds of the arrays\n    //   may be omitted.\n    //\n    // Note: function types are handled in the common path with C.\n    if (T->isReferenceType()) {\n      Diag(Loc, diag::err_illegal_decl_array_of_references) << getPrintableNameForEntity(Entity) << T;"}},
		[l]={
			["clang/test/Sema/illegal-types.c"]={"clang/test/Sema/illegal-types.c:5:14: error: \'type name\' declared as array of references of type \'int &\'","clang/test/Sema/illegal-types.c:6:15: error: \'p\' declared as array of references of type \'int &\'"}
		}
	},
	["err_illegal_decl_mempointer_in_nonclass"]={
		[b]="err_illegal_decl_mempointer_in_nonclass",
		[i]="\'%0\' does not point into a class",
		[j]="\'A\' does not point into a class",
		[h]=k,
		[c]="\'(.*?)\' does not point into a class",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,5691,"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::MemberPointer: {\n      // ...\n      if (SS.isInvalid()) {\n      // ...\n      } else if (S.isDependentScopeSpecifier(SS) || isa_and_nonnull<CXXRecordDecl>(S.computeDeclContext(SS))) {\n      // ...\n      } else {\n        S.Diag(DeclType.Mem.Scope().getBeginLoc(), diag::err_illegal_decl_mempointer_in_nonclass) << (D.getIdentifier() ? D.getIdentifier()->getName() : \"type name\") << DeclType.Mem.Scope().getRange();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp:66:27: error: \'pm\' does not point into a class","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp:68:28: error: \'pmf\' does not point into a class"}
		}
	},
	["err_illegal_decl_mempointer_to_reference"]={
		[b]="err_illegal_decl_mempointer_to_reference",
		[i]="\'%0\' declared as a member pointer to a reference of type %1",
		[j]="\'A\' declared as a member pointer to a reference of type B",
		[h]=k,
		[c]="\'(.*?)\' declared as a member pointer to a reference of type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"124f34c15014",1246320417,"Make an error message more clear.","Make an error message more clear.\n\nllvm-svn: 74481"},
		[d]={{G,3084,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  // C++ 8.3.3p3: A pointer to member shall not point to ... a member\n  //   with reference type, or \"cv void.\"\n  if (T->isReferenceType()) {\n    Diag(Loc, diag::err_illegal_decl_mempointer_to_reference) << getPrintableNameForEntity(Entity) << T;"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:18:28: error: \'pm\' declared as a member pointer to a reference of type \'int &\'"}
		}
	},
	["err_illegal_decl_mempointer_to_void"]={
		[b]="err_illegal_decl_mempointer_to_void",
		[i]="\'%0\' declared as a member pointer to void",
		[j]="\'A\' declared as a member pointer to void",
		[h]=k,
		[c]="\'(.*?)\' declared as a member pointer to void",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,3090,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (T->isVoidType()) {\n    Diag(Loc, diag::err_illegal_decl_mempointer_to_void) << getPrintableNameForEntity(Entity);"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:25:8: error: \'p\' declared as a member pointer to void"}
		}
	},
	["err_illegal_decl_pointer_to_reference"]={
		[b]="err_illegal_decl_pointer_to_reference",
		[i]="\'%0\' declared as a pointer to a reference of type %1",
		[j]="\'A\' declared as a pointer to a reference of type B",
		[h]=k,
		[c]="\'(.*?)\' declared as a pointer to a reference of type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,2177,"/// Build a pointer type.\n///\n/// \\param T The type to which we\'ll be building a pointer.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// pointer type or, if there is no such entity, the location of the\n/// type that will have pointer type.\n///\n/// \\param Entity The name of the entity that involves the pointer\n/// type, if known.\n///\n/// \\returns A suitable pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n  if (T->isReferenceType()) {\n    // ...\n    Diag(Loc, diag::err_illegal_decl_pointer_to_reference) << getPrintableNameForEntity(Entity) << T;"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-typedef.cpp"]={"clang/test/SemaTemplate/instantiate-typedef.cpp:5:12: error: \'type\' declared as a pointer to a reference of type \'int &\'"}
		}
	},
	["err_illegal_decl_reference_to_reference"]={
		[b]="err_illegal_decl_reference_to_reference",
		[i]="%0 declared as a reference to a reference",
		[j]="A declared as a reference to a reference",
		[h]=k,
		[c]="(.*?) declared as a reference to a reference",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{P,6305,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///       declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]     pointer[opt] direct-declarator\n/// [C++]   direct-declarator\n/// [C++]   ptr-operator declarator\n///\n///       pointer: [C99 6.7.5]\n///         \'*\' type-qualifier-list[opt]\n///         \'*\' type-qualifier-list[opt] pointer\n///\n///       ptr-operator:\n///         \'*\' cv-qualifier-seq[opt]\n///         \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]   \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///         \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    if (D.getNumTypeObjects() > 0) {\n      // ...\n      if (InnerChunk.Kind == DeclaratorChunk::Reference) {\n        if (const IdentifierInfo *II = D.getIdentifier())\n          Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference) << II;"},{P,6308,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///       declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]     pointer[opt] direct-declarator\n/// [C++]   direct-declarator\n/// [C++]   ptr-operator declarator\n///\n///       pointer: [C99 6.7.5]\n///         \'*\' type-qualifier-list[opt]\n///         \'*\' type-qualifier-list[opt] pointer\n///\n///       ptr-operator:\n///         \'*\' cv-qualifier-seq[opt]\n///         \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]   \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///         \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    if (D.getNumTypeObjects() > 0) {\n      // ...\n      if (InnerChunk.Kind == DeclaratorChunk::Reference) {\n        if (const IdentifierInfo *II = D.getIdentifier())\n        // ...\n        else\n          Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference) << \"type name\";"}},
		[l]={
			["clang/test/Parser/cxx0x-rvalue-reference.cpp"]={"clang/test/Parser/cxx0x-rvalue-reference.cpp:7:9: error: \'ar\' declared as a reference to a reference"}
		}
	},
	["err_illegal_initializer"]={
		[b]="err_illegal_initializer",
		[i]="illegal initializer (only variables can be initialized)",
		[j]="illegal initializer (only variables can be initialized)",
		[h]=k,
		[c]="illegal initializer \\(only variables can be initialized\\)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,13140,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (!VDecl) {\n    // ...\n    Diag(RealDecl->getLocation(), diag::err_illegal_initializer);"},{t,18152,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n  // ...\n  else if (auto *M = dyn_cast<CXXMethodDecl>(D))\n  // ...\n  else\n    Diag(D->getLocation(), diag::err_illegal_initializer);"}},
		[l]={
			["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:59:15: error: illegal initializer (only variables can be initialized)"}
		}
	},
	["err_illegal_initializer_type"]={
		[b]="err_illegal_initializer_type",
		[i]="illegal initializer type %0",
		[j]="illegal initializer type A",
		[h]=k,
		[c]="illegal initializer type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{H,1366,"void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) {\n  // ...\n  } else if (DeclType->isScalarType()) {\n  // ...\n  } else if (DeclType->isVectorType()) {\n  // ...\n  } else if (const RecordDecl *RD = getRecordDecl(DeclType)) {\n  // ...\n  } else if (DeclType->isArrayType()) {\n  // ...\n  } else if (DeclType->isVoidType() || DeclType->isFunctionType()) {\n    // ...\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_illegal_initializer_type) << DeclType;"},{H,1390,"void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) {\n  // ...\n  } else if (DeclType->isScalarType()) {\n  // ...\n  } else if (DeclType->isVectorType()) {\n  // ...\n  } else if (const RecordDecl *RD = getRecordDecl(DeclType)) {\n  // ...\n  } else if (DeclType->isArrayType()) {\n  // ...\n  } else if (DeclType->isVoidType() || DeclType->isFunctionType()) {\n  // ...\n  } else if (DeclType->isReferenceType()) {\n  // ...\n  } else if (DeclType->isObjCObjectType()) {\n  // ...\n  } else if (DeclType->isOCLIntelSubgroupAVCType() || DeclType->isSizelessBuiltinType()) {\n  // ...\n  } else if (DeclType->isDependentType()) {\n  // ...\n  } else {\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_illegal_initializer_type) << DeclType;"}},
		[l]={
			["clang/test/Sema/compound-literal.c"]={"clang/test/Sema/compound-literal.c:34:16: error: illegal initializer type \'void (void)\'"}
		}
	},
	["err_illegal_message_expr_incomplete_type"]={
		[b]="err_illegal_message_expr_incomplete_type",
		[i]="Objective-C message has incomplete result type %0",
		[j]="Objective-C message has incomplete result type A",
		[h]=k,
		[c]="Objective\\-C message has incomplete result type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"1d44608cc112",1276714564,"Make sure result type of objc++ message expression is","Make sure result type of objc++ message expression is\ncomplete before attempting to bind it to a temporary.\nFixes PR7386.\n\nllvm-svn: 106130"},
		[d]={{bb,2699,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && !Method->getReturnType()->isVoidType() && RequireCompleteType(LBracLoc, Method->getReturnType(), diag::err_illegal_message_expr_incomplete_type))"},{bb,3240,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && !Method->getReturnType()->isVoidType() && RequireCompleteType(LBracLoc, Method->getReturnType(), diag::err_illegal_message_expr_incomplete_type))"}}
	},
	["err_illegal_qualifiers_on_catch_parm"]={
		[b]="err_illegal_qualifiers_on_catch_parm",
		[i]="illegal qualifiers on @catch parameter",
		[j]="illegal qualifiers on @catch parameter",
		[h]=k,
		[c]="illegal qualifiers on @catch parameter",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{rb,5163,"/// 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    Diag(IdLoc, diag::err_illegal_qualifiers_on_catch_parm);"}},
		[l]={
			["clang/test/SemaObjC/catch-stmt.m"]={"clang/test/SemaObjC/catch-stmt.m:10:20: error: illegal qualifiers on @catch parameter"}
		}
	},
	["err_illegal_super_cast"]={
		[b]="err_illegal_super_cast",
		[i]="cannot cast \'super\' (it isn\'t an expression)",
		[j]="cannot cast \'super\' (it isn\'t an expression)",
		[h]=k,
		[c]="cannot cast \'super\' \\(it isn\'t an expression\\)",
		[f]=a,
		[e]=C,
		[g]={x,1237025389,y,z},
		[d]={{Zb,3119,"/// ParseParenExpression - This parses the unit that starts with a \'(\' token,\n/// based on what is allowed by ExprType.  The actual thing parsed is returned\n/// in ExprType. If stopIfCastExpr is true, it will only return the parsed type,\n/// not the parsed cast-expression.\n///\n/// \\verbatim\n///       primary-expression: [C99 6.5.1]\n///         \'(\' expression \')\'\n/// [GNU]   \'(\' compound-statement \')\'      (if !ParenExprOnly)\n///       postfix-expression: [C99 6.5.2]\n///         \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///         \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///       cast-expression: [C99 6.5.4]\n///         \'(\' type-name \')\' cast-expression\n/// [ARC]   bridged-cast-expression\n/// [ARC] bridged-cast-expression:\n///         (__bridge type-name) cast-expression\n///         (__bridge_transfer type-name) cast-expression\n///         (__bridge_retained type-name) cast-expression\n///       fold-expression: [C++1z]\n///         \'(\' cast-expression fold-operator \'...\' \')\'\n///         \'(\' \'...\' fold-operator cast-expression \')\'\n///         \'(\' cast-expression fold-operator \'...\'\n///                 fold-operator cast-expression \')\'\n/// [OPENMP] Array shaping operation\n///       \'(\' \'[\' expression \']\' { \'[\' expression \']\' } cast-expression\n/// \\endverbatim\nExprResult Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr, bool isTypeCast, ParsedType &CastTy, SourceLocation &RParenLoc) {\n  // ...\n  // None of these cases should fall through with an invalid Result\n  // unless they\'ve already reported an error.\n  if (ExprType >= CompoundStmt && Tok.is(tok::l_brace)) {\n  // ...\n  } else if (ExprType >= CompoundLiteral && BridgeCast) {\n  // ...\n  } else if (ExprType >= CompoundLiteral && isTypeIdInParens(isAmbiguousTypeId)) {\n    // ...\n    // If our type is followed by an identifier and either \':\' or \']\', then\n    // this is probably an Objective-C message send where the leading \'[\' is\n    // missing. Recover as if that were the case.\n    if (!DeclaratorInfo.isInvalidType() && Tok.is(tok::identifier) && !InMessageExpression && getLangOpts().ObjC && (NextToken().is(tok::colon) || NextToken().is(tok::r_square))) {\n    // ...\n    } else {\n      // ...\n      if (ExprType == CastExpr) {\n        // ...\n        // Reject the cast of super idiom in ObjC.\n        if (Tok.is(tok::identifier) && getLangOpts().ObjC && Tok.getIdentifierInfo() == Ident_super && getCurScope()->isInObjcMethodScope() && GetLookAheadToken(1).isNot(tok::period)) {\n          Diag(Tok.getLocation(), diag::err_illegal_super_cast) << SourceRange(OpenLoc, RParenLoc);"}},
		[l]={
			["clang/test/SemaObjC/call-super-2.m"]={"clang/test/SemaObjC/call-super-2.m:44:21: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:46:30: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:50:29: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:54:30: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:76:23: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:80:29: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:84:30: error: cannot cast \'super\' (it isn\'t an expression)"}
		}
	},
	["err_illegal_union_or_anon_struct_member"]={
		[b]="err_illegal_union_or_anon_struct_member",
		[i]={{nil,A,"%select{anonymous struct|union}0 member %1 has a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2"},{J,nil,"%select{anonymous struct|union}0 member %1 has a non-trivial %select{constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2"}},
		[j]={{nil,A,{{"anonymous struct","union"}," member B has a non-trivial ",{"default constructor",ic,hc,fc,ec,ob}}},{J,nil,{{"anonymous struct","union"}," member B has a non-trivial ",{"constructor",ic,hc,fc,ec,ob}}}},
		[h]=k,
		[c]="(?:anonymous struct|union) member (.*?) has a non\\-trivial (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor)",
		[f]=a,
		[e]=m,
		[g]={"33aee3934acf",1281979628,"Emit diagnostic error when the field of an anonymous struct is non trivial.","Emit diagnostic error when the field of an anonymous struct is non trivial.\n\nllvm-svn: 111158"},
		[d]={{p,18325,"bool Sema::CheckNontrivialField(FieldDecl *FD) {\n  // ...\n  if (const RecordType *RT = EltTy->getAs<RecordType>()) {\n    // ...\n    if (RDecl->getDefinition()) {\n      // ...\n      if (member != CXXInvalid) {\n        // ...\n        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : diag::err_illegal_union_or_anon_struct_member) << FD->getParent()->isUnion() << FD->getDeclName() << member;"}},
		[l]={
			["clang/test/CXX/class/class.union/p1.cpp"]={"clang/test/CXX/class/class.union/p1.cpp:39:11: error: union member \'v\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:40:15: error: union member \'vbase\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:41:8: error: union member \'ctor\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:42:9: error: union member \'ctor2\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:43:12: error: union member \'ctortmpl\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:44:12: error: union member \'copyctor\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:45:14: error: union member \'copyassign\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:46:8: error: union member \'dtor\' has a non-trivial destructor","clang/test/CXX/class/class.union/p1.cpp:53:5: error: union member \'m1\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:56:5: error: union member \'m2\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:59:5: error: union member \'m3\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:62:5: error: union member \'m3a\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:65:5: error: union member \'m4\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:68:5: error: union member \'m5\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:71:5: error: union member \'m6\' has a non-trivial destructor","clang/test/CXX/class/class.union/p1.cpp:79:5: error: union member \'m1\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:81:5: error: union member \'m2\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:83:5: error: union member \'m3\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:85:5: error: union member \'m3a\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:87:5: error: union member \'m4\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:89:5: error: union member \'m5\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:91:5: error: union member \'m6\' has a non-trivial destructor","clang/test/CXX/class/class.union/p1.cpp:96:5: error: union member \'m8\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial destructor"}
		}
	},
	["err_illegal_use_of_flt_eval_macro"]={
		[b]={{nil,s,"err_illegal_use_of_flt_eval_macro"}},
		[i]={{nil,s,"\'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'"}},
		[j]={{nil,s,"\'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'"}},
		[h]=k,
		[c]="\'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'\\#pragma clang fp eval_method\'",
		[f]=a,
		[e]={{nil,s,O}},
		[g]={N,1625925174,M,L},
		[d]={{"clang/lib/Lex/PPMacroExpansion.cpp",1641,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n  // ...\n  if (II == Ident__LINE__) {\n  // ...\n  } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n  // ...\n  } else if (II == Ident__DATE__) {\n  // ...\n  } else if (II == Ident__TIME__) {\n  // ...\n  } else if (II == Ident__INCLUDE_LEVEL__) {\n  // ...\n  } else if (II == Ident__TIMESTAMP__) {\n  // ...\n  } else if (II == Ident__FLT_EVAL_METHOD__) {\n    // ...\n    if (getLastFPEvalPragmaLocation().isValid()) {\n      // ...\n      Diag(Tok, diag::err_illegal_use_of_flt_eval_macro);"}},
		[l]={
			["clang/test/Sema/fp-eval-pragma.cpp"]={"clang/test/Sema/fp-eval-pragma.cpp:22:22: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:46:14: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:62:13: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:79:12: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:85:12: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:96:5: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'"}
		}
	},
	["err_imaginary_not_supported"]={
		[b]="err_imaginary_not_supported",
		[i]="imaginary types are not supported",
		[j]="imaginary types are not supported",
		[h]=k,
		[c]="imaginary types are not supported",
		[f]=a,
		[e]=m,
		[g]={"719a46bbf14a",1285234831,"Don\'t crash on _Imaginary.","Don\'t crash on _Imaginary.\n\nllvm-svn: 114637"},
		[d]={{G,1805,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // FIXME: Imaginary.\n  if (DS.getTypeSpecComplex() == DeclSpec::TSC_imaginary)\n    S.Diag(DS.getTypeSpecComplexLoc(), diag::err_imaginary_not_supported);"}},
		[l]={
			["clang/test/CodeGen/imaginary.c"]={"clang/test/CodeGen/imaginary.c:4:8: error: imaginary types are not supported"}
		}
	},
	["err_immediate_function_used_before_definition"]={
		[b]="err_immediate_function_used_before_definition",
		[i]="immediate function %0 used before it is defined",
		[j]="immediate function A used before it is defined",
		[h]=k,
		[c]="immediate function (.*?) used before it is defined",
		[f]=a,
		[e]=m,
		[g]={N,1625925174,M,L},
		[d]={{t,2451,"bool Sema::CheckImmediateEscalatingFunctionDefinition(FunctionDecl *FD, const sema::FunctionScopeInfo *FSI) {\n  // ...\n  if (FSI->FoundImmediateEscalatingExpression) {\n    // ...\n    if (it != UndefinedButUsed.end()) {\n      Diag(it->second, diag::err_immediate_function_used_before_definition) << it->first;"}},
		[l]={
			["clang/test/SemaCXX/cxx2b-consteval-propagate.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-propagate.cpp:108:11: error: immediate function \'f<int>\' used before it is defined"}
		}
	},
	["err_impcast_complex_scalar"]={
		[b]={{nil,J,"err_impcast_complex_scalar"}},
		[i]={{nil,J,"implicit conversion from %0 to %1 is not permitted in C++"}},
		[j]={{nil,J,"implicit conversion from A to B is not permitted in C++"}},
		[h]=k,
		[c]="implicit conversion from (.*?) to (.*?) is not permitted in C\\+\\+",
		[f]=a,
		[e]={{nil,J,m}},
		[g]={"0241637c0ea3",1502234285,"Sema: disable implicit conversion from _Complex to real types in C++.","Sema: disable implicit conversion from _Complex to real types in C++.\n\nConverting a _Complex type to a real one simply discards the imaginary part.\nThis can easily lead to loss of information so for safety (and GCC\ncompatibility) this patch disallows that when the conversion would be implicit.\n\nThe one exception is bool, which actually compares both real and imaginary\nparts and so is safe.\n\nllvm-svn: 310427"},
		[d]={{K,14762,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n  // ...\n  // Strip complex types.\n  if (isa<ComplexType>(Source)) {\n    if (!isa<ComplexType>(Target)) {\n      // ...\n      return DiagnoseImpCast(S, E, T, CC, S.getLangOpts().CPlusPlus ? diag::err_impcast_complex_scalar : diag::warn_impcast_complex_scalar);"}},
		[l]={
			["clang/test/SemaCXX/complex-conversion.cpp"]={"clang/test/SemaCXX/complex-conversion.cpp:9:10: error: implicit conversion from \'_Complex float\' to \'float\' is not permitted in C++","clang/test/SemaCXX/complex-conversion.cpp:12:15: error: implicit conversion from \'_Complex float\' to \'float\' is not permitted in C++","clang/test/SemaCXX/complex-conversion.cpp:13:16: error: implicit conversion from \'_Complex double\' to \'double\' is not permitted in C++"}
		}
	},
	["err_implementation_of_class_stub"]={
		[b]={{nil,r,"err_implementation_of_class_stub"}},
		[i]={{nil,r,"cannot declare implementation of a class declared with the \'objc_class_stub\' attribute"}},
		[j]={{nil,r,"cannot declare implementation of a class declared with the \'objc_class_stub\' attribute"}},
		[h]=k,
		[c]="cannot declare implementation of a class declared with the \'objc_class_stub\' attribute",
		[f]=a,
		[e]={{nil,r,m}},
		[g]={"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"},
		[d]={{rb,4171,"// 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    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (IDecl->hasAttr<ObjCClassStubAttr>())\n        Diag(IC->getLocation(), diag::err_implementation_of_class_stub);"}},
		[l]={
			["clang/test/SemaObjC/class-stub-attr.m"]={"clang/test/SemaObjC/class-stub-attr.m:16:17: error: cannot declare implementation of a class declared with the \'objc_class_stub\' attribute"}
		}
	},
	["err_implicit_coroutine_std_nothrow_type_not_found"]={
		[b]={{nil,E,"err_implicit_coroutine_std_nothrow_type_not_found"}},
		[i]={{nil,E,"std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()"}},
		[j]={{nil,E,"std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()"}},
		[h]=k,
		[c]="std\\:\\:nothrow was not found; include \\<new\\> before defining a coroutine which uses get_return_object_on_allocation_failure\\(\\)",
		[f]=a,
		[e]={{nil,E,qb}},
		[g]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i...","[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() is present.\n\nSummary:\nThis patch implements [dcl.fct.def.coroutine]p8:\n> The unqualified-id get_return_object_on_allocation_failure is looked up in the scope of\n> class P by class member access lookup (3.4.5). If a declaration is found, ..., and if a \n> global allocation function is selected, the ::operator new(size_t, nothrow_t) form shall be used.\n> [...]\n> The allocation function used in this case must have a non-throwing noexcept-specification.\n\nReviewers: GorNishanov, rsmith, majnemer, aaron.ballman\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31562\n\nllvm-svn: 300420"},
		[d]={{gb,1020,"/// Look up the std::nothrow object.\nstatic Expr *buildStdNoThrowDeclRef(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Result, Std)) {\n    // ...\n    S.Diag(Loc, diag::err_implicit_coroutine_std_nothrow_type_not_found);"}}
	},
	["err_implicit_empty_initializer"]={
		[b]="err_implicit_empty_initializer",
		[i]="initializer for aggregate with no elements requires explicit braces",
		[j]="initializer for aggregate with no elements requires explicit braces",
		[h]=k,
		[c]="initializer for aggregate with no elements requires explicit braces",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{H,1111,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (maxElements == 0) {\n    if (!VerifyOnly)\n      SemaRef.Diag(ParentIList->getInit(Index)->getBeginLoc(), diag::err_implicit_empty_initializer);"}},
		[l]={
			["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:233:40: error: initializer for aggregate with no elements requires explicit braces","clang/test/Sema/array-init.c:237:26: error: initializer for aggregate with no elements requires explicit braces"}
		}
	},
	["err_implicit_instantiate_member_undefined"]={
		[b]="err_implicit_instantiate_member_undefined",
		[i]="implicit instantiation of undefined member %0",
		[j]="implicit instantiation of undefined member A",
		[h]=k,
		[c]="implicit instantiation of undefined member (.*?)",
		[f]=a,
		[e]=m,
		[g]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only","Instantiation for member classes of class templates. Note that only\nthe declarations of member classes are instantiated when the owning\nclass template is instantiated. The definitions of such member classes\nare instantiated when a complete type is required.\n\nThis change also introduces the injected-class-name into a class\ntemplate specialization.\n\nllvm-svn: 67707"},
		[d]={{kb,843,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  // ...\n  if (PatternDef) {\n  // ...\n  } else if (InstantiatedFromMember) {\n    if (isa<FunctionDecl>(Instantiation)) {\n    // ...\n    } else {\n      // ...\n      Diag(PointOfInstantiation, diag::err_implicit_instantiate_member_undefined) << InstantiationTy;"}},
		[l]={
			["clang/test/SemaCXX/base-class-ambiguity-check.cpp"]={"clang/test/SemaCXX/base-class-ambiguity-check.cpp:15:20: error: implicit instantiation of undefined member \'Foo2<int>::Base1\'","clang/test/SemaCXX/base-class-ambiguity-check.cpp:15:27: error: implicit instantiation of undefined member \'Foo2<int>::Base2\'"}
		}
	},
	["err_implied_comparison_category_type_not_found"]={
		[b]={{nil,A,"err_implied_comparison_category_type_not_found"}},
		[i]={{nil,F,"cannot %select{use builtin operator \'<=>\'|default \'operator<=>\'}1 because type \'%0\' was not found; include <compare>"},{r,A,"cannot deduce return type of \'operator<=>\' because type \'%0\' was not found; include <compare>"}},
		[j]={{nil,F,{"cannot ",{"use builtin operator \'<=>\'","default \'operator<=>\'"}," because type \'A\' was not found; include <compare>"}},{r,A,"cannot deduce return type of \'operator<=>\' because type \'A\' was not found; include <compare>"}},
		[h]=k,
		[c]="cannot (?:use builtin operator \'\\<\\=\\>\'|default \'operator\\<\\=\\>\') because type \'(.*?)\' was not found; include \\<compare\\>",
		[f]=a,
		[e]={{nil,A,v}},
		[g]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant\n\nSummary:\nThis patch tackles long hanging fruit for the builtin operator<=> expressions. It is currently needs some cleanup before landing, but I want to get some initial feedback.\n\nThe main changes are:\n\n* Lookup, build, and store the required standard library types and expressions in `ASTContext`. By storing them in ASTContext we don\'t need to store (and duplicate) the required expressions in the BinaryOperator AST nodes. \n\n* Implement [expr.spaceship] checking, including diagnosing narrowing conversions. \n\n* Implement `ExprConstant` for builtin spaceship operators.\n\n* Implement builitin operator<=> support in `CodeGenAgg`. Initially I emitted the required comparisons using `ScalarExprEmitter::VisitBinaryOperator`, but this caused the operand expressions to be emitted once for every required cmp.\n\n* Implement [builtin.over] with modifications to support the intent of P0946R0. See the note on `BuiltinOperatorOverloadBuilder::addThreeWayArithmeticOverloads` for more information about the workaround.\n\n\n\n\nReviewers: rsmith, aaron.ballman, majnemer, rnk, compnerd, rjmccall\n\nReviewed By: rjmccall\n\nSubscribers: rjmccall, rsmith, aaron.ballman, junbuml, mgorny, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45476\n\nllvm-svn: 331677"},
		[d]={{t,11637,"QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, SourceLocation Loc, ComparisonCategoryUsage Usage) {\n  // ...\n  // If lookup failed\n  if (!Info) {\n    // ...\n    Diag(Loc, diag::err_implied_comparison_category_type_not_found) << NameForDiags << (int)Usage;"}},
		[l]={
			["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:9:14: error: cannot use builtin operator \'<=>\' because type \'std::partial_ordering\' was not found; include <compare>","clang/test/SemaCXX/std-compare-cxx2a.cpp:14:10: error: cannot default \'operator<=>\' because type \'std::strong_ordering\' was not found; include <compare>","clang/test/SemaCXX/std-compare-cxx2a.cpp:22:102: error: cannot default \'operator<=>\' because type \'std::strong_ordering\' was not found; include <compare>"}
		}
	},
	["err_implied_coroutine_type_not_found"]={
		[b]={{nil,E,"err_implied_coroutine_type_not_found"}},
		[i]="%0 type was not found; include <coroutine> before defining a coroutine",
		[j]="A type was not found; include <coroutine> before defining a coroutine",
		[h]=k,
		[c]="(.*?) type was not found; include \\<coroutine\\> before defining a coroutine",
		[f]=a,
		[e]={{nil,E,qb}},
		[g]={"6dcb0eb301c7",1489028983,"[coroutines] Build and pass coroutine_handle to await_suspend","[coroutines] Build and pass coroutine_handle to await_suspend\n\nSummary:\nThis patch adds passing a coroutine_handle object to await_suspend calls.\nIt builds the coroutine_handle using coroutine_handle<PromiseType>::from_address(__builtin_coro_frame()).\n\n(a revision of https://reviews.llvm.org/D26316 that for some reason refuses to apply via arc patch)\n\nReviewers: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits, EricWF\n\nDifferential Revision: https://reviews.llvm.org/D30769\n\nllvm-svn: 297356"},
		[d]={{gb,150,"/// Look up the std::coroutine_handle<PromiseType>.\nstatic QualType lookupCoroutineHandleType(Sema &S, QualType PromiseType, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Result, CoroNamespace)) {\n    S.Diag(Loc, diag::err_implied_coroutine_type_not_found) << \"std::coroutine_handle\";"},{gb,1938,"ClassTemplateDecl *Sema::lookupCoroutineTraits(SourceLocation KwLoc, SourceLocation FuncLoc) {\n  // ...\n  if (!Found) {\n    // ...\n    Diag(KwLoc, diag::err_implied_coroutine_type_not_found) << \"std::coroutine_traits\";"}},
		[l]={
			["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:8:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:13:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:19:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:24:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:148:6: error: std::coroutine_handle type was not found; include <coroutine> before defining a coroutine"}
		}
	},
	["err_implied_std_coroutine_traits_promise_type_not_class"]={
		[b]="err_implied_std_coroutine_traits_promise_type_not_class",
		[i]="this function cannot be a coroutine: %0 is not a class",
		[j]="this function cannot be a coroutine: A is not a class",
		[h]=k,
		[c]="this function cannot be a coroutine\\: (.*?) is not a class",
		[f]=a,
		[e]=qb,
		[g]={"9f690bd80bb6",1445925765,"[coroutines] Creation of promise object, lookup of operator co_await, building","[coroutines] Creation of promise object, lookup of operator co_await, building\nof await_* calls, and AST representation for same.\n\nllvm-svn: 251387"},
		[d]={{gb,127,"/// Look up the std::coroutine_traits<...>::promise_type for the given\n/// function type.\nstatic QualType lookupPromiseType(Sema &S, const FunctionDecl *FD, SourceLocation KwLoc) {\n  // ...\n  if (!PromiseType->getAsCXXRecordDecl()) {\n    S.Diag(FuncLoc, diag::err_implied_std_coroutine_traits_promise_type_not_class) << buildElaboratedType();"}},
		[l]={
			["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:100:8: error: this function cannot be a coroutine: \'std::coroutine_traits<double, double>::promise_type\' (aka \'int\') is not a class"}
		}
	},
	["err_implied_std_coroutine_traits_promise_type_not_found"]={
		[b]="err_implied_std_coroutine_traits_promise_type_not_found",
		[i]="this function cannot be a coroutine: %q0 has no member named \'promise_type\'",
		[j]="this function cannot be a coroutine: A has no member named \'promise_type\'",
		[h]=k,
		[c]="this function cannot be a coroutine\\: (.*?) has no member named \'promise_type\'",
		[f]=a,
		[e]=qb,
		[g]={"9f690bd80bb6",1445925765,"[coroutines] Creation of promise object, lookup of operator co_await, building","[coroutines] Creation of promise object, lookup of operator co_await, building\nof await_* calls, and AST representation for same.\n\nllvm-svn: 251387"},
		[d]={{gb,111,"/// Look up the std::coroutine_traits<...>::promise_type for the given\n/// function type.\nstatic QualType lookupPromiseType(Sema &S, const FunctionDecl *FD, SourceLocation KwLoc) {\n  // ...\n  if (!Promise) {\n    S.Diag(FuncLoc, diag::err_implied_std_coroutine_traits_promise_type_not_found) << RD;"}},
		[l]={
			["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:82:14: error: this function cannot be a coroutine: \'std::coroutine_traits<DummyVoidTag>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:89:5: error: this function cannot be a coroutine: \'std::coroutine_traits<int>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:93:5: error: this function cannot be a coroutine: \'std::coroutine_traits<int, int>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:1207:20: error: this function cannot be a coroutine: \'std::coroutine_traits<CoroHandleMemberFunctionTest::BadCoroMemberTag, CoroHandleMemberFunctionTest::TestType &>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:1211:20: error: this function cannot be a coroutine: \'std::coroutine_traits<CoroHandleMemberFunctionTest::BadCoroMemberTag, const CoroHandleMemberFunctionTest::TestType &&, int>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:1216:27: error: this function cannot be a coroutine: \'std::coroutine_traits<CoroHandleMemberFunctionTest::BadCoroMemberTag, long *>\' has no member named \'promise_type\'"}
		}
	},
	["err_implied_std_initializer_list_not_found"]={
		[b]="err_implied_std_initializer_list_not_found",
		[i]="cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>",
		[j]="cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>",
		[h]=k,
		[c]="cannot deduce type of initializer list because std\\:\\:initializer_list was not found; include \\<initializer_list\\>",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{t,11794,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!Std) {\n    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);"},{t,11801,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Result, Std)) {\n    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);"}},
		[l]={
			["clang/test/Parser/objcxx0x-lambda-expressions.mm"]={"clang/test/Parser/objcxx0x-lambda-expressions.mm:26:12: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>","clang/test/Parser/objcxx0x-lambda-expressions.mm:39:12: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>","clang/test/Parser/objcxx0x-lambda-expressions.mm:41:12: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>"}
		}
	},
	["err_import_in_wrong_fragment"]={
		[b]={{nil,s,"err_import_in_wrong_fragment"}},
		[i]={{nil,s,"module%select{| partition}0 imports cannot be in the %select{global|private}1 module fragment"}},
		[j]={{nil,s,{"module",{a," partition"}," imports cannot be in the ",{"global","private"}," module fragment"}}},
		[h]=k,
		[c]="module(?:| partition) imports cannot be in the (?:global|private) module fragment",
		[f]=a,
		[e]={{nil,s,ac}},
		[g]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
		[d]={{cb,2569,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///           \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///           \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///           \'export\'[opt] \'import\' module-name\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' module-partition\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' header-name\n///                   attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  case Sema::ModuleImportState::GlobalFragment:\n  case Sema::ModuleImportState::PrivateFragmentImportAllowed:\n    // We can only have pre-processor directives in the global module fragment\n    // which allows pp-import, but not of a partition (since the global module\n    // does not have partitions).\n    // We cannot import a partition into a private module fragment, since\n    // [module.private.frag]/1 disallows private module fragments in a multi-\n    // TU module.\n    if (IsPartition || (HeaderUnit && HeaderUnit->Kind != Module::ModuleKind::ModuleHeaderUnit))\n      Diag(ImportLoc, diag::err_import_in_wrong_fragment) << IsPartition << (ImportState == Sema::ModuleImportState::GlobalFragment ? 0 : 1);"}}
	},
	["err_import_not_allowed_here"]={
		[b]={{nil,s,"err_import_not_allowed_here"}},
		[i]={{nil,s,"imports must immediately follow the module declaration"}},
		[j]={{nil,s,"imports must immediately follow the module declaration"}},
		[h]=k,
		[c]="imports must immediately follow the module declaration",
		[f]=a,
		[e]={{nil,s,ac}},
		[g]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
		[d]={{cb,2578,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///           \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///           \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///           \'export\'[opt] \'import\' module-name\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' module-partition\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' header-name\n///                   attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  case Sema::ModuleImportState::ImportFinished:\n  case Sema::ModuleImportState::PrivateFragmentImportFinished:\n    if (getLangOpts().CPlusPlusModules)\n      Diag(ImportLoc, diag::err_import_not_allowed_here);"}},
		[l]={
			["clang/test/SemaCXX/modules.cppm"]={"clang/test/SemaCXX/modules.cppm:34:1: error: imports must immediately follow the module declaration"}
		}
	},
	["err_imported_module_modmap_changed"]={
		[b]="err_imported_module_modmap_changed",
		[i]={{nil,F,"module \'%0\' %select{in|imported by}4 AST file \'%1\' found in a different module map file (%2) than when the importing AST file was built (%3)"},{r,nil,"module \'%0\' imported by AST file \'%1\' found in a different module map file (%2) than when the importing AST file was built (%3)"}},
		[j]={{nil,F,{"module \'A\' ",{"in","imported by"}," AST file \'B\' found in a different module map file (C) than when the importing AST file was built (D)"}},{r,nil,"module \'A\' imported by AST file \'B\' found in a different module map file (C) than when the importing AST file was built (D)"}},
		[h]=tb,
		[c]="module \'(.*?)\' (?:in|imported by) AST file \'(.*?)\' found in a different module map file \\((.*?)\\) than when the importing AST file was built \\((.*?)\\)",
		[f]=a,
		[e]="AST Deserialization Issue",
		[g]={"beee15e721f6",1397498401,"Allow multiple modules with the same name to coexist in the module cache","Allow multiple modules with the same name to coexist in the module cache\n\nTo differentiate between two modules with the same name, we will\nconsider the path the module map file that they are defined by* part of\nthe ‘key’ for looking up the precompiled module (pcm file).\nSpecifically, this patch renames the precompiled module (pcm) files from\n  cache-path/<module hash>/Foo.pcm\nto\n  cache-path/<module hash>/Foo-<hash of module map path>.pcm\n\nIn addition, I’ve taught the ASTReader to re-resolve the names of\nimported modules during module loading so that if the header search\ncontext changes between when a module was originally built and when it\nis loaded we can rebuild it if necessary.  For example, if module A\nimports module B\n\nfirst time:\nclang -I /path/to/A -I /path/to/B ...\n\nsecond time:\nclang -I /path/to/A -I /different/path/to/B ...\n\nwill now rebuild A as expected.\n\n* in the case of inferred modules, we use the module map file that\nallowed the inference, not the __inferred_module.map file, since the\ninferred file path is the same for every inferred module.\n\nllvm-svn: 206201"},
		[d]={{"clang/lib/Serialization/ASTReader.cpp",4040,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    if (!StoredModMap || *StoredModMap != ModMap) {\n      // ...\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n        Diag(diag::err_imported_module_modmap_changed) << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName) << ModMap->getName() << F.ModuleMapPath << NotImported;"}}
	},
	["err_imported_module_not_found"]={
		[b]="err_imported_module_not_found",
		[i]={{nil,F,"module \'%0\' in AST file \'%1\' %select{(imported by AST file \'%2\') |}4is not defined in any loaded module map file; maybe you need to load \'%3\'?"},{r,nil,"module \'%0\' in AST file \'%1\' (imported by AST file \'%2\') is not defined in any loaded module map file; maybe you need to load \'%3\'?"}},
		[j]={{nil,F,{"module \'A\' in AST file \'B\' ",{"(imported by AST file \'C\') ",a},"is not defined in any loaded module map file; maybe you need to load \'D\'?"}},{r,nil,"module \'A\' in AST file \'B\' (imported by AST file \'C\') is not defined in any loaded module map file; maybe you need to load \'D\'?"}},
		[h]=tb,
		[c]="module \'(.*?)\' in AST file \'(.*?)\' (?:\\(imported by AST file \'(.*?)\'\\) |)is not defined in any loaded module map file; maybe you need to load \'(.*?)\'\\?",
		[f]=a,
		[e]="AST Deserialization Issue",
		[g]={"beee15e721f6",1397498401,"Allow multiple modules with the same name to coexist in the module cache","Allow multiple modules with the same name to coexist in the module cache\n\nTo differentiate between two modules with the same name, we will\nconsider the path the module map file that they are defined by* part of\nthe ‘key’ for looking up the precompiled module (pcm file).\nSpecifically, this patch renames the precompiled module (pcm) files from\n  cache-path/<module hash>/Foo.pcm\nto\n  cache-path/<module hash>/Foo-<hash of module map path>.pcm\n\nIn addition, I’ve taught the ASTReader to re-resolve the names of\nimported modules during module loading so that if the header search\ncontext changes between when a module was originally built and when it\nis loaded we can rebuild it if necessary.  For example, if module A\nimports module B\n\nfirst time:\nclang -I /path/to/A -I /path/to/B ...\n\nsecond time:\nclang -I /path/to/A -I /different/path/to/B ...\n\nwill now rebuild A as expected.\n\n* in the case of inferred modules, we use the module map file that\nallowed the inference, not the __inferred_module.map file, since the\ninferred file path is the same for every inferred module.\n\nllvm-svn: 206201"},
		[d]={{"clang/lib/Serialization/ASTReader.cpp",4015,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Don\'t emit module relocation error if we have -fno-validate-pch\n    if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && !ModMap) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {\n        if (auto ASTFE = M ? M->getASTFile() : std::nullopt) {\n        // ...\n        } else {\n          // ...\n          Diag(diag::err_imported_module_not_found) << F.ModuleName << F.FileName << (ImportedBy ? ImportedBy->FileName : \"\") << F.ModuleMapPath << !ImportedBy;"}}
	},
	["err_imported_module_relocated"]={
		[b]="err_imported_module_relocated",
		[i]="module \'%0\' was built in directory \'%1\' but now resides in directory \'%2\'",
		[j]="module \'A\' was built in directory \'B\' but now resides in directory \'C\'",
		[h]=tb,
		[c]="module \'(.*?)\' was built in directory \'(.*?)\' but now resides in directory \'(.*?)\'",
		[f]=a,
		[e]="AST Deserialization Issue",
		[g]={"223d3f2e4d49",1417836068,"[modules] If we import a module, and we\'ve seen a module map that describes the","[modules] If we import a module, and we\'ve seen a module map that describes the\nmodule, use the path from the module map file in preference to the path from\nthe .pcm file when resolving relative paths in the .pcm file. This allows\ndiagnostics (and .d output) to give relative paths if the module was found via\na relative path.\n\nllvm-svn: 223577"},
		[d]={{"clang/lib/Serialization/ASTReader.cpp",3012,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case MODULE_DIRECTORY: {\n      // ...\n      if (M && M->Directory) {\n        // If we\'re implicitly loading a module, the base directory can\'t\n        // change between the build and use.\n        // Don\'t emit module relocation error if we have -fno-validate-pch\n        if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {\n          // ...\n          if (!BuildDir || *BuildDir != M->Directory) {\n            if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n              Diag(diag::err_imported_module_relocated) << F.ModuleName << Blob << M->Directory->getName();"}},
		[l]={
			["clang/test/Modules/shadowed-submodule.m"]={"clang/test/Modules/shadowed-submodule.m:4:2: fatal error: module \'A\' was built in directory \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/Modules/Inputs/shadowed-submodule/Foo/../A1\' but now resides in directory \'clang/test/Modules/Inputs/shadowed-submodule/A2\'"}
		}
	},
	["err_in_class_initializer_bad_type"]={
		[b]="err_in_class_initializer_bad_type",
		[i]="static data member of type %0 must be initialized out of line",
		[j]="static data member of type A must be initialized out of line",
		[h]=k,
		[c]="static data member of type (.*?) must be initialized out of line",
		[f]=a,
		[e]=m,
		[g]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members.","Support in-class initialization of static const floating-point data members.\n\nllvm-svn: 113663"},
		[d]={{p,13539,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // ...\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    // ...\n    } else if (VDecl->isConstexpr()) {\n    // ...\n    } else if (!DclT.isConstQualified()) {\n    // ...\n    } else if (DclT->isIntegralOrEnumerationType()) {\n    // ...\n    } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n    // ...\n    } else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType(Context)) {\n    // ...\n    } else {\n      Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type) << DclT << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:13:24: error: static data member of type \'const NestedC\' must be initialized out of line"}
		}
	},
	["err_in_class_initializer_literal_type"]={
		[b]="err_in_class_initializer_literal_type",
		[i]="in-class initializer for static data member of type %0 requires \'constexpr\' specifier",
		[j]="in-class initializer for static data member of type A requires \'constexpr\' specifier",
		[h]=k,
		[c]="in\\-class initializer for static data member of type (.*?) requires \'constexpr\' specifier",
		[f]=a,
		[e]=m,
		[g]={"256336d9ab6d",1317338314,"Mark the ExtWarn for in-class initialization of static const float members as a GNU extension. Don\'t...","Mark the ExtWarn for in-class initialization of static const float members as a GNU extension. Don\'t extend the scope of this extension to all literal types in C++0x mode.\n\nllvm-svn: 140820"},
		[d]={{p,13533,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // ...\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    // ...\n    } else if (VDecl->isConstexpr()) {\n    // ...\n    } else if (!DclT.isConstQualified()) {\n    // ...\n    } else if (DclT->isIntegralOrEnumerationType()) {\n    // ...\n    } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n    // ...\n    } else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType(Context)) {\n      Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type) << DclT << Init->getSourceRange() << FixItHint::CreateInsertion(VDecl->getBeginLoc(), \"constexpr \");"}},
		[l]={
			["clang/test/CXX/class/class.static/class.static.data/p3.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p3.cpp:18:22: error: in-class initializer for static data member of type \'char *const\' requires \'constexpr\' specifier"}
		}
	},
	["err_in_class_initializer_non_const"]={
		[b]="err_in_class_initializer_non_const",
		[i]="non-const static data member must be initialized out of line",
		[j]="non-const static data member must be initialized out of line",
		[h]=k,
		[c]="non\\-const static data member must be initialized out of line",
		[f]=a,
		[e]=m,
		[g]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members.","Support in-class initialization of static const floating-point data members.\n\nllvm-svn: 113663"},
		[d]={{p,13477,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // ...\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    // ...\n    } else if (VDecl->isConstexpr()) {\n    // ...\n    } else if (!DclT.isConstQualified()) {\n      Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const) << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:12:14: error: non-const static data member must be initialized out of line"}
		}
	},
	["err_in_class_initializer_non_constant"]={
		[b]="err_in_class_initializer_non_constant",
		[i]="in-class initializer for static data member is not a constant expression",
		[j]="in-class initializer for static data member is not a constant expression",
		[h]=k,
		[c]="in\\-class initializer for static data member is not a constant expression",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,13504,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // ...\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    // ...\n    } else if (VDecl->isConstexpr()) {\n    // ...\n    } else if (!DclT.isConstQualified()) {\n    // ...\n    } else if (DclT->isIntegralOrEnumerationType()) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())\n      // ...\n      else if (Init->isValueDependent())\n      // ...\n      else if (Init->isIntegerConstantExpr(Context, &Loc))\n      // ...\n      else if (Init->getType()->isScopedEnumeralType() && Init->isCXX11ConstantExpr(Context))\n      // ...\n      else if (Init->isEvaluatable(Context)) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_in_class_initializer_non_constant) << Init->getSourceRange();"},{p,13525,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // ...\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    // ...\n    } else if (VDecl->isConstexpr()) {\n    // ...\n    } else if (!DclT.isConstQualified()) {\n    // ...\n    } else if (DclT->isIntegralOrEnumerationType()) {\n    // ...\n    } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n      // In C++98, this is a GNU extension. In C++11, it is not, but we support\n      // it anyway and provide a fixit to add the \'constexpr\'.\n      if (getLangOpts().CPlusPlus11) {\n      // ...\n      } else {\n        // ...\n        if (!Init->isValueDependent() && !Init->isEvaluatable(Context)) {\n          Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant) << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:14:26: error: in-class initializer for static data member is not a constant expression"}
		}
	},
	["err_in_class_initializer_volatile"]={
		[b]="err_in_class_initializer_volatile",
		[i]="static const volatile data member must be initialized out of line",
		[j]="static const volatile data member must be initialized out of line",
		[h]=k,
		[c]="static const volatile data member must be initialized out of line",
		[f]=a,
		[e]=m,
		[g]={"ee6311df6972",1317331694,"In C++0x, static const volatile data members cannot be initialized in-class.","In C++0x, static const volatile data members cannot be initialized in-class.\n\nllvm-svn: 140809"},
		[d]={{p,13488,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  // ...\n  if (VDecl->isLocalVarDecl()) {\n  // ...\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // ...\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    // ...\n    } else if (VDecl->isConstexpr()) {\n    // ...\n    } else if (!DclT.isConstQualified()) {\n    // ...\n    } else if (DclT->isIntegralOrEnumerationType()) {\n      // ...\n      if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())\n        // ...\n        Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile);"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:16:29: error: static const volatile data member must be initialized out of line"}
		}
	},
	["err_include_too_large"]={
		[b]={{nil,o,"err_include_too_large"}},
		[i]={{nil,o,"sorry, this include generates a translation unit too large for Clang to process."}},
		[j]={{nil,o,"sorry, this include generates a translation unit too large for Clang to process."}},
		[h]=tb,
		[c]="sorry, this include generates a translation unit too large for Clang to process\\.",
		[f]=a,
		[e]={{nil,o,v}},
		[g]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86","Support -fstack-clash-protection for x86\n\nImplement protection against the stack clash attack [0] through inline stack\nprobing.\n\nProbe stack allocation every PAGE_SIZE during frame lowering or dynamic\nallocation to make sure the page guard, if any, is touched when touching the\nstack, in a similar manner to GCC[1].\n\nThis extends the existing `probe-stack\' mechanism with a special value `inline-asm\'.\nTechnically the former uses function call before stack allocation while this\npatch provides inlined stack probes and chunk allocation.\n\nOnly implemented for x86.\n\n[0] https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt\n[1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00556.html\n\nDifferential Revision: https://reviews.llvm.org/D68720"},
		[d]={{"clang/lib/Basic/SourceManager.cpp",618,"/// createFileID - Create a new FileID for the specified ContentCache and\n/// include position.  This works regardless of whether the ContentCache\n/// corresponds to a file or some other input source.\nFileID SourceManager::createFileIDImpl(ContentCache &File, StringRef Filename, SourceLocation IncludePos, SrcMgr::CharacteristicKind FileCharacter, int LoadedID, SourceLocation::UIntTy LoadedOffset) {\n  // ...\n  if (!(NextLocalOffset + FileSize + 1 > NextLocalOffset && NextLocalOffset + FileSize + 1 <= CurrentLoadedOffset)) {\n    Diag.Report(IncludePos, diag::err_include_too_large);"}}
	},
	["err_incompatible_exception_specs"]={
		[b]="err_incompatible_exception_specs",
		[i]="target exception specification is not superset of source",
		[j]="target exception specification is not superset of source",
		[h]=k,
		[c]="target exception specification is not superset of source",
		[f]=a,
		[e]=m,
		[g]={"5d43164bc2e4",1255176250,"Implement the core checking for compatible exception specifications in assignment and initialization...","Implement the core checking for compatible exception specifications in assignment and initialization.\n\nThe exception specification of the assignee must be the same or a subset of the target. In addition, exception specifications on arguments and return types must be equivalent, but this is not implemented yet.\nThis currently produces two diagnostics for every invalid assignment/initialization, due to the diagnostic produced outside PerformImplicitConversion, e.g. in CheckSingleInitializer. I don\'t know how to suppress this; in any case I think it is the wrong place for a diagnostic, since there are other diagnostics produced inside the function. So I\'m leaving it as it is for the moment.\n\nllvm-svn: 83710"},
		[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",940,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  unsigned DiagID = diag::err_incompatible_exception_specs;"}},
		[l]={
			["clang/test/CXX/except/except.spec/template.cpp"]={"clang/test/CXX/except/except.spec/template.cpp:9:24: error: target exception specification is not superset of source","clang/test/CXX/except/except.spec/template.cpp:12:25: error: target exception specification is not superset of source"}
		}
	},
	["err_incompatible_fp_eval_method_options"]={
		[b]={{nil,s,"err_incompatible_fp_eval_method_options"}},
		[i]={{nil,s,"option \'ffp-eval-method\' cannot be used with option %select{\'fapprox-func\'|\'mreassociate\'|\'freciprocal\'}0"}},
		[j]={{nil,s,{"option \'ffp-eval-method\' cannot be used with option ",{"\'fapprox-func\'","\'mreassociate\'","\'freciprocal\'"}}}},
		[h]=k,
		[c]="option \'ffp\\-eval\\-method\' cannot be used with option (?:\'fapprox\\-func\'|\'mreassociate\'|\'freciprocal\')",
		[f]=a,
		[e]={{nil,s,v}},
		[g]={"bac6cd5bf856",1648850628,"[misexpect] Re-implement MisExpect Diagnostics","[misexpect] Re-implement MisExpect Diagnostics\n\nReimplements MisExpect diagnostics from D66324 to reconstruct its\noriginal checking methodology only using MD_prof branch_weights\nmetadata.\n\nNew checks rely on 2 invariants:\n\n1) For frontend instrumentation, MD_prof branch_weights will always be\n   populated before llvm.expect intrinsics are lowered.\n\n2) for IR and sample profiling, llvm.expect intrinsics will always be\n   lowered before branch_weights are populated from the IR profiles.\n\nThese invariants allow the checking to assume how the existing branch\nweights are populated depending on the profiling method used, and emit\nthe correct diagnostics. If these invariants are ever invalidated, the\nMisExpect related checks would need to be updated, potentially by\nre-introducing MD_misexpect metadata, and ensuring it always will be\ntransformed the same way as branch_weights in other optimization passes.\n\nFrontend based profiling is now enabled without using LLVM Args, by\nintroducing a new CodeGen option, and checking if the -Wmisexpect flag\nhas been passed on the command line.\n\nReviewed By: tejohnson\n\nDifferential Revision: https://reviews.llvm.org/D115907"},
		[d]={{jc,538,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // When these options are used, the compiler is allowed to apply\n  // optimizations that may affect the final result. For example\n  // (x+y)+z is transformed to x+(y+z) but may not give the same\n  // final result; it\'s not value safe.\n  // Another example can be to simplify x/x to 1.0 but x could be 0.0, INF\n  // or NaN. Final result may then differ. An error is issued when the eval\n  // method is set with one of these options.\n  if (Args.hasArg(OPT_ffp_eval_method_EQ)) {\n    if (LangOpts.ApproxFunc)\n      Diags.Report(diag::err_incompatible_fp_eval_method_options) << 0;"},{jc,540,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // When these options are used, the compiler is allowed to apply\n  // optimizations that may affect the final result. For example\n  // (x+y)+z is transformed to x+(y+z) but may not give the same\n  // final result; it\'s not value safe.\n  // Another example can be to simplify x/x to 1.0 but x could be 0.0, INF\n  // or NaN. Final result may then differ. An error is issued when the eval\n  // method is set with one of these options.\n  if (Args.hasArg(OPT_ffp_eval_method_EQ)) {\n    // ...\n    if (LangOpts.AllowFPReassoc)\n      Diags.Report(diag::err_incompatible_fp_eval_method_options) << 1;"},{jc,542,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // When these options are used, the compiler is allowed to apply\n  // optimizations that may affect the final result. For example\n  // (x+y)+z is transformed to x+(y+z) but may not give the same\n  // final result; it\'s not value safe.\n  // Another example can be to simplify x/x to 1.0 but x could be 0.0, INF\n  // or NaN. Final result may then differ. An error is issued when the eval\n  // method is set with one of these options.\n  if (Args.hasArg(OPT_ffp_eval_method_EQ)) {\n    // ...\n    if (LangOpts.AllowRecip)\n      Diags.Report(diag::err_incompatible_fp_eval_method_options) << 2;"}}
	},
	["err_incompatible_qualified_id"]={
		[b]={{nil,o,"err_incompatible_qualified_id"}},
		[i]={{nil,o,"%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2"}},
		[j]={{nil,o,{{{{"assigning to A from incompatible type B","assigning to type from incompatible type"}},{{"passing A to parameter of incompatible type B","passing type to parameter of incompatible type"}},{{"returning A from a function with incompatible result type B","returning type from a function with incompatible result type"}},{{"converting A to incompatible type B","converting type to incompatible type"}},{{"initializing A with an expression of incompatible type B","initializing type with an expression of incompatible type"}},{{"sending A to parameter of incompatible type B","sending type to parameter of incompatible type"}},{{"casting A to incompatible type B","casting type to incompatible type"}}}}}},
		[h]=k,
		[c]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{q,17682,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleObjCQualifiedId: {\n    // ...\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_incompatible_qualified_id;"},{q,17767,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())"}},
		[l]={
			["clang/test/SemaObjC/argument-checking.m"]={"clang/test/SemaObjC/argument-checking.m:24:19: error: sending \'int\' to parameter of incompatible type \'struct S\'","clang/test/SemaObjC/argument-checking.m:25:26: error: sending \'int\' to parameter of incompatible type \'struct S\'"}
		}
	},
	["err_incompatible_vectors"]={
		[b]={{nil,o,"err_incompatible_vectors"}},
		[i]={{nil,o,"incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2"}},
		[j]={{nil,o,{"incompatible vector types ",{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}}}},
		[h]=k,
		[c]="incompatible vector types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{q,17691,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleVectors:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_incompatible_vectors;"}}
	},
	["err_incomplete_array_member_init"]={
		[b]="err_incomplete_array_member_init",
		[i]={{nil,mb,"array bound cannot be deduced from a default member initializer"},{sb,nil,"array bound cannot be deduced from an in-class initializer"}},
		[j]={{nil,mb,"array bound cannot be deduced from a default member initializer"},{sb,nil,"array bound cannot be deduced from an in-class initializer"}},
		[h]=k,
		[c]="array bound cannot be deduced from a default member initializer",
		[f]=a,
		[e]=C,
		[g]={"938f40b5aa98",1307812782,"Implement support for C++11 in-class initialization of non-static data members.","Implement support for C++11 in-class initialization of non-static data members.\n\nllvm-svn: 132878"},
		[d]={{U,3111,"/// 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    // Handle the initializer.\n    if (HasInClassInit != ICIS_NoInit) {\n      // ...\n      if (DeclaratorInfo.isArrayOfUnknownBound()) {\n        // ...\n        Diag(Tok, diag::err_incomplete_array_member_init);"}},
		[l]={
			["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:24:12: error: array bound cannot be deduced from a default member initializer","clang/test/SemaCXX/member-init.cpp:26:12: error: array bound cannot be deduced from a default member initializer","clang/test/SemaCXX/member-init.cpp:33:12: error: array bound cannot be deduced from a default member initializer","clang/test/SemaCXX/member-init.cpp:36:19: error: array bound cannot be deduced from a default member initializer"}
		}
	},
	["err_incomplete_base_class"]={
		[b]="err_incomplete_base_class",
		[i]="base class has incomplete type",
		[j]="base class has incomplete type",
		[h]=k,
		[c]="base class has incomplete type",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{t,2738,"/// 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 (RequireCompleteType(BaseLoc, BaseType, diag::err_incomplete_base_class, SpecifierRange)) {"}},
		[l]={
			["clang/test/SemaTemplate/class-template-id-2.cpp"]={"clang/test/SemaTemplate/class-template-id-2.cpp:14:19: error: base class has incomplete type"}
		}
	},
	["err_incomplete_enum"]={
		[b]={{nil,w,"err_incomplete_enum"}},
		[i]={{nil,w,"enumeration %0 is incomplete"}},
		[j]={{nil,w,"enumeration A is incomplete"}},
		[h]=k,
		[c]="enumeration (.*?) is incomplete",
		[f]=a,
		[e]={{nil,w,m}},
		[g]={"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"},
		[d]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",299,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\n///\nbool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) {\n  // ...\n  if (SS) {\n  // ...\n  } else {\n    Diag(L, diag::err_incomplete_enum) << QualType(EnumD->getTypeForDecl(), 0);"}},
		[l]={
			["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:76:20: error: enumeration \'Three::Stuart::C\' is incomplete"}
		}
	},
	["err_incomplete_in_exception_spec"]={
		[b]="err_incomplete_in_exception_spec",
		[i]="%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification",
		[j]={{nil,nil,{{a,"pointer to ","reference to "},"incomplete type B is not allowed in exception specification"}}},
		[h]=k,
		[c]="(?:|pointer to |reference to )incomplete type (.*?) is not allowed in exception specification",
		[f]=a,
		[e]=m,
		[g]={"d643456d450a",1243620153,"Reject incomplete types in exception specs.","Reject incomplete types in exception specs.\n\nllvm-svn: 72580"},
		[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",165,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                   when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // ...\n  unsigned DiagID = diag::err_incomplete_in_exception_spec;"}},
		[l]={
			["clang/test/CXX/except/except.spec/p2-dynamic-types.cpp"]={"clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:9:18: error: incomplete type \'void\' is not allowed in exception specification","clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:10:18: error: incomplete type \'Incomplete\' is not allowed in exception specification","clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:12:18: error: pointer to incomplete type \'Incomplete\' is not allowed in exception specification","clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:13:18: error: reference to incomplete type \'Incomplete\' is not allowed in exception specification"}
		}
	},
	["err_incomplete_member_access"]={
		[b]="err_incomplete_member_access",
		[i]="member access into incomplete type %0",
		[j]="member access into incomplete type A",
		[h]=k,
		[c]="member access into incomplete type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"3fad61786e7c",1258435053,"Require the object type of a member access expression (\".\" or \"->\") to","Require the object type of a member access expression (\".\" or \"->\") to\nbe complete.\n\nllvm-svn: 89042"},
		[d]={{I,7675,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  if (!BaseType->isDependentType() && !isThisOutsideMemberFunctionBody(BaseType) && RequireCompleteType(OpLoc, BaseType, diag::err_incomplete_member_access)) {"}},
		[l]={
			["clang/test/SemaTemplate/class-template-spec.cpp"]={"clang/test/SemaTemplate/class-template-spec.cpp:24:11: error: member access into incomplete type \'A<double, double>\'"}
		}
	},
	["err_incomplete_nested_name_spec"]={
		[b]="err_incomplete_nested_name_spec",
		[i]="incomplete type %0 named in nested name specifier",
		[j]="incomplete type A named in nested name specifier",
		[h]=k,
		[c]="incomplete type (.*?) named in nested name specifier",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",244,"/// Require that the context specified by SS be complete.\n///\n/// If SS refers to a type, this routine checks whether the type is\n/// complete enough (or can be made complete enough) for name lookup\n/// into the DeclContext. A type that is not yet completed can be\n/// considered \"complete enough\" if it is a class/struct/union/enum\n/// that is currently being defined. Or, if we have a type that names\n/// a class template specialization that is not a complete type, we\n/// will attempt to instantiate that class template.\nbool Sema::RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC) {\n  // ...\n  if (RequireCompleteType(loc, type, diag::err_incomplete_nested_name_spec, SS.getRange())) {"},{"clang/lib/Sema/SemaCXXScopeSpec.cpp",295,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\n///\nbool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) {\n  // ...\n  if (SS) {\n    Diag(L, diag::err_incomplete_nested_name_spec) << QualType(EnumD->getTypeForDecl(), 0) << SS->getRange();"},{I,131,"ParsedType Sema::getConstructorName(IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, bool EnteringContext) {\n  // ...\n  if (!InjectedClassName) {\n    if (!CurClass->isInvalidDecl()) {\n      // ...\n      Diag(SS.getLastQualifierNameLoc(), diag::err_incomplete_nested_name_spec) << CurClass << SS.getRange();"}},
		[l]={
			["clang/test/CXX/temp/temp.spec/temp.explicit/p3.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p3.cpp:15:15: error: incomplete type \'X0\' named in nested name specifier"}
		}
	},
	["err_incomplete_object_call"]={
		[b]="err_incomplete_object_call",
		[i]="incomplete type in call to object of type %0",
		[j]="incomplete type in call to object of type A",
		[h]=k,
		[c]="incomplete type in call to object of type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"74ba25ca5a34",1256105919,"Improve diagnostics and template instantiation behavior when calling","Improve diagnostics and template instantiation behavior when calling\nan overloaded function call operator.\n\nllvm-svn: 84745"},
		[d]={{"clang/lib/Sema/SemaOverload.cpp",14976,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  if (RequireCompleteType(LParenLoc, Object.get()->getType(), diag::err_incomplete_object_call, Object.get()))"}},
		[l]={
			["clang/test/SemaCXX/incomplete-call.cpp"]={"clang/test/SemaCXX/incomplete-call.cpp:50:4: error: incomplete type in call to object of type \'C\'"}
		}
	},
	["err_incomplete_receiver_type"]={
		[b]="err_incomplete_receiver_type",
		[i]="incomplete receiver type %0",
		[j]="incomplete receiver type A",
		[h]=k,
		[c]="incomplete receiver type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"4b60a1594d2c",1383863694,"Re-instate contextual conversion to Objective-C pointers in message sends.","Re-instate contextual conversion to Objective-C pointers in message sends.\n\nWhen performing an Objective-C message send to a value of class type,\nperform a contextual conversion to an Objective-C pointer type. We\'ve\nhad this for a long time, but it recently regressed. Fixes\n<rdar://problem/15234703>.\n\nllvm-svn: 194224"},
		[d]={{bb,2930,"/// 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 we have a receiver expression, perform appropriate promotions\n  // and determine receiver type.\n  if (Receiver) {\n    // ...\n    // If the receiver is an ObjC pointer, a block pointer, or an\n    // __attribute__((NSObject)) pointer, we don\'t need to do any\n    // special conversion in order to look up a receiver.\n    if (ReceiverType->isObjCRetainableType()) {\n    // ...\n    } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n    // ...\n    } else if (getLangOpts().CPlusPlus) {\n      // ...\n      if (RequireCompleteType(Loc, Receiver->getType(), diag::err_incomplete_receiver_type))"},{"clang/lib/Sema/SemaStmt.cpp",4312,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        if (RequireCompleteType(atLoc, type, diag::err_incomplete_receiver_type))"}},
		[l]={
			["clang/test/SemaObjCXX/contextual-convert-to-id.mm"]={"clang/test/SemaObjCXX/contextual-convert-to-id.mm:37:4: error: incomplete receiver type \'Incomplete\'"}
		}
	},
	["err_incomplete_synthesized_property"]={
		[b]="err_incomplete_synthesized_property",
		[i]="cannot synthesize property %0 with incomplete type %1",
		[j]="cannot synthesize property A with incomplete type B",
		[h]=k,
		[c]="cannot synthesize property (.*?) with incomplete type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"169ec35bb3b2",1335911166,"Add a missing RequireCompleteType call when synthesizing properties.  <rdar://problem/11333367>.","Add a missing RequireCompleteType call when synthesizing properties.  <rdar://problem/11333367>.\n\nWhile I\'m here, fix source locations for other diagnostics related to property synthesis.\n\nllvm-svn: 155953"},
		[d]={{"clang/lib/Sema/SemaObjCProperty.cpp",1217,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    if (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {"}},
		[l]={
			["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:84:13: error: cannot synthesize property \'y\' with incomplete type \'IncompleteStruct\'","clang/test/SemaObjCXX/property-synthesis-error.mm:83:1: error: cannot synthesize property \'x\' with incomplete type \'IncompleteStruct\'"}
		}
	},
	["err_incomplete_type"]={
		[b]="err_incomplete_type",
		[i]="incomplete type %0 where a complete type is required",
		[j]="incomplete type A where a complete type is required",
		[h]=k,
		[c]="incomplete type (.*?) where a complete type is required",
		[f]=a,
		[e]=m,
		[g]={"a04f2ca19aaf",1267458985,"When looking for the instantiated declaration that corresponds to a","When looking for the instantiated declaration that corresponds to a\ngiven declaration in a template, make sure that the context we\'re\nsearching through is complete. Fixes PR6376.\n\nllvm-svn: 97444"},
		[d]={{"clang/lib/Sema/SemaCast.cpp",3259,"void CastOperation::CheckBuiltinBitCast() {\n  // ...\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{K,1937,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (S.RequireCompleteType(TheCall->getBeginLoc(), ParamTy->getPointeeType(), diag::err_incomplete_type))"},{K,7214,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n    if (IsC11 && ValType->isPointerType() && RequireCompleteType(Ptr->getBeginLoc(), ValType->getPointeeType(), diag::err_incomplete_type)) {"},{K,15143,"static void CheckConditionalOperand(Sema &S, Expr *E, QualType T, SourceLocation CC, bool &ICContext) {\n  // ...\n  // Diagnose incomplete type for second or third operand in C.\n  if (!S.getLangOpts().CPlusPlus && E->getType()->isRecordType())\n    S.RequireCompleteExprType(E, diag::err_incomplete_type);"},{gb,1322,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n  // ...\n  if (S.RequireCompleteType(Loc, PromiseType, diag::err_incomplete_type))"},{t,1411,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n  if (S.RequireCompleteType(Src->getLocation(), DecompType, diag::err_incomplete_type))"},{t,11627,"QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, SourceLocation Loc, ComparisonCategoryUsage Usage) {\n  // ...\n  if (Info && FullyCheckedComparisonCategories[static_cast<unsigned>(Kind)]) {\n    // ...\n    if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type))"},{t,11650,"QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, SourceLocation Loc, ComparisonCategoryUsage Usage) {\n  // ...\n  if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type))"},{q,14670,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // ...\n  if (!S.getLangOpts().CPlusPlus) {\n    // ...\n    if (!RHS.get()->getType()->isVoidType())\n      S.RequireCompleteType(Loc, RHS.get()->getType(), diag::err_incomplete_type);"},{I,8249,"/// Perform the conversions required for an expression used in a\n/// context that ignores the result.\nExprResult Sema::IgnoredValueConversions(Expr *E) {\n  // ...\n  if (!E->getType()->isVoidType())\n    RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_incomplete_type);"},{H,8486,"ExprResult Sema::TemporaryMaterializationConversion(Expr *E) {\n  // ...\n  if (RequireCompleteType(E->getExprLoc(), T, diag::err_incomplete_type))"},{"clang/lib/Sema/SemaOpenMP.cpp",20965,"static bool checkTypeMappable(SourceLocation SL, SourceRange SR, Sema &SemaRef, DSAStackTy *Stack, QualType QTy, bool FullCheck = true) {\n  if (SemaRef.RequireCompleteType(SL, QTy, diag::err_incomplete_type))"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6273,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///   enum Kind {\n///     KnownValue = sizeof(T)\n///   };\n///\n///   bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  // ...\n  if (ParentDC != D->getDeclContext()) {\n    // ...\n    if (CXXRecordDecl *Spec = dyn_cast<CXXRecordDecl>(ParentDC)) {\n      if (!Spec->isDependentContext()) {\n        // ...\n        if (!Tag->isBeingDefined() && RequireCompleteType(Loc, T, diag::err_incomplete_type))"}},
		[l]={
			["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:254:17: error: incomplete type \'struct Test21\' where a complete type is required","clang/test/Sema/exprs.c:255:4: error: incomplete type \'struct Test21\' where a complete type is required"}
		}
	},
	["err_incomplete_type_objc_at_encode"]={
		[b]="err_incomplete_type_objc_at_encode",
		[i]="\'@encode\' of incomplete type %0",
		[j]="\'@encode\' of incomplete type A",
		[h]=k,
		[c]="\'@encode\' of incomplete type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"7da04c636728",1305405159,"Emit an error when trying to @encode an incomplete type.","Emit an error when trying to @encode an incomplete type.\n\nThere are APIs, e.g. [NSValue valueWithBytes:objCType:], which use the encoding to find out\nthe size of an object pointed to by a pointer. Make things safer by making it illegal to @encode\nincomplete types.\n\nllvm-svn: 131364"},
		[d]={{bb,1140,"ExprResult Sema::BuildObjCEncodeExpression(SourceLocation AtLoc, TypeSourceInfo *EncodedTypeInfo, SourceLocation RParenLoc) {\n  // ...\n  if (EncodedType->isDependentType())\n  // ...\n  else {\n    if (!EncodedType->getAsArrayTypeUnsafe() && //// Incomplete array is handled.\n      // ...\n      if (RequireCompleteType(AtLoc, EncodedType, diag::err_incomplete_type_objc_at_encode, EncodedTypeInfo->getTypeLoc()))"}},
		[l]={
			["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:40:9: error: \'@encode\' of incomplete type \'Incomplete_ObjC_class\'","clang/test/SemaObjC/exprs.m:41:9: error: \'@encode\' of incomplete type \'struct Incomplete_struct\'"}
		}
	},
	["err_incomplete_type_used_in_type_trait_expr"]={
		[b]="err_incomplete_type_used_in_type_trait_expr",
		[i]="incomplete type %0 used in type trait expression",
		[j]="incomplete type A used in type trait expression",
		[h]=k,
		[c]="incomplete type (.*?) used in type trait expression",
		[f]=a,
		[e]=m,
		[g]={"1f9648da17c7",1246993562,"Some (most) type trait expressions require that the argument passed in is a complete type.","Some (most) type trait expressions require that the argument passed in is a complete type.\n\nllvm-svn: 74937"},
		[d]={{I,4870,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  case UTT_IsEmpty:\n  case UTT_IsPolymorphic:\n  case UTT_IsAbstract:\n    if (const auto *RD = ArgTy->getAsCXXRecordDecl())\n      if (!RD->isUnion())\n        return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,4879,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  case UTT_IsFinal:\n  case UTT_IsSealed:\n    if (ArgTy->getAsCXXRecordDecl())\n      return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,4888,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  // LWG3823: T shall be an array type, a complete type, or cv void.\n  case UTT_IsAggregate:\n    // ...\n    return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,4929,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  case UTT_IsDestructible:\n  case UTT_IsNothrowDestructible:\n  case UTT_IsTriviallyDestructible:\n  case UTT_HasUniqueObjectRepresentations:\n    // ...\n    return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,5449,"static bool EvaluateBooleanTypeTrait(Sema &S, TypeTrait Kind, SourceLocation KWLoc, ArrayRef<TypeSourceInfo *> Args, SourceLocation RParenLoc, bool IsDependent) {\n  // ...\n  case clang::BTT_ReferenceBindsToTemporary:\n  case clang::TT_IsConstructible:\n  case clang::TT_IsNothrowConstructible:\n  case clang::TT_IsTriviallyConstructible: {\n    // ...\n    // Precondition: T and all types in the parameter pack Args shall be\n    // complete types, (possibly cv-qualified) void, or arrays of\n    // unknown bound.\n    for (const auto *TSI : Args) {\n      // ...\n      if (S.RequireCompleteType(KWLoc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5661,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsBaseOf: {\n    // ...\n    if (!rhsRecord || !lhsRecord) {\n      // ...\n      if (Self.RequireCompleteType(KeyLoc, RhsT, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5685,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsBaseOf: {\n    // ...\n    if (Self.RequireCompleteType(KeyLoc, RhsT, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5781,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsAssignable:\n  case BTT_IsNothrowAssignable:\n  case BTT_IsTriviallyAssignable: {\n    // ...\n    if (!LhsT->isVoidType() && !LhsT->isIncompleteArrayType() && Self.RequireCompleteType(KeyLoc, LhsT, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5785,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsAssignable:\n  case BTT_IsNothrowAssignable:\n  case BTT_IsTriviallyAssignable: {\n    // ...\n    if (!RhsT->isVoidType() && !RhsT->isIncompleteArrayType() && Self.RequireCompleteType(KeyLoc, RhsT, diag::err_incomplete_type_used_in_type_trait_expr))"}},
		[l]={
			["clang/test/SemaObjCXX/is-base-of.mm"]={"clang/test/SemaObjCXX/is-base-of.mm:23:45: error: incomplete type \'NSForward\' used in type trait expression"}
		}
	},
	["err_incomplete_typeid"]={
		[b]="err_incomplete_typeid",
		[i]="\'typeid\' of incomplete type %0",
		[j]="\'typeid\' of incomplete type A",
		[h]=k,
		[c]="\'typeid\' of incomplete type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"721fb2b6e405",1261602366,"Diagnose the use of incomplete types in C++ typeid expressions","Diagnose the use of incomplete types in C++ typeid expressions\n\nllvm-svn: 92045"},
		[d]={{I,560,"/// Build a C++ typeid expression with a type operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n  // ...\n  if (T->getAs<RecordType>() && RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))"},{I,592,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n  // ...\n  if (E && !E->isTypeDependent()) {\n    // ...\n    if (const RecordType *RecordT = T->getAs<RecordType>()) {\n      // ...\n      if (RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))"}},
		[l]={
			["clang/test/SemaCXX/typeid.cpp"]={"clang/test/SemaCXX/typeid.cpp:20:9: error: \'typeid\' of incomplete type \'X\'","clang/test/SemaCXX/typeid.cpp:21:9: error: \'typeid\' of incomplete type \'X\'","clang/test/SemaCXX/typeid.cpp:22:9: error: \'typeid\' of incomplete type \'X\'"}
		}
	},
	["err_inconsistent_ivar_count"]={
		[b]="err_inconsistent_ivar_count",
		[i]="inconsistent number of instance variables specified",
		[j]="inconsistent number of instance variables specified",
		[h]=k,
		[c]="inconsistent number of instance variables specified",
		[f]=a,
		[e]=m,
		[g]={"fff0674ae092",1385956221,"Fix inconsistent diag name","Fix inconsistent diag name\n\nllvm-svn: 196061"},
		[d]={{rb,2230,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  if (numIvars > 0)\n    Diag(ivars[j]->getLocation(), diag::err_inconsistent_ivar_count);"},{rb,2232,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  if (numIvars > 0)\n  // ...\n  else if (IVI != IVE)\n    Diag(IVI->getLocation(), diag::err_inconsistent_ivar_count);"}},
		[l]={
			["clang/test/SemaObjC/conflicting-ivar-test-1.m"]={"clang/test/SemaObjC/conflicting-ivar-test-1.m:24:6: error: inconsistent number of instance variables specified","clang/test/SemaObjC/conflicting-ivar-test-1.m:49:6: error: inconsistent number of instance variables specified"}
		}
	},
	["err_incorrect_defaulted_consteval"]={
		[b]={{nil,r,"err_incorrect_defaulted_consteval"}},
		[i]={{nil,r,"defaulted declaration of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 cannot be consteval because implicit definition is not constexpr"}},
		[j]={{nil,r,{"defaulted declaration of ",{"default constructor",ic,hc,fc,ec,ob}," cannot be consteval because implicit definition is not constexpr"}}},
		[h]=k,
		[c]="defaulted declaration of (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) cannot be consteval because implicit definition is not constexpr",
		[f]=a,
		[e]={{nil,r,m}},
		[g]={"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"},
		[d]={{t,7738,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if ((getLangOpts().CPlusPlus20 || (getLangOpts().CPlusPlus14 ? !isa<CXXDestructorDecl>(MD) : isa<CXXConstructorDecl>(MD))) && MD->isConstexpr() && !Constexpr && MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {\n    Diag(MD->getBeginLoc(), MD->isConsteval() ? diag::err_incorrect_defaulted_consteval : diag::err_incorrect_defaulted_constexpr) << CSM;"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:57:3: error: defaulted declaration of default constructor cannot be consteval because implicit definition is not constexpr"}
		}
	},
	["err_incorrect_defaulted_constexpr"]={
		[b]="err_incorrect_defaulted_constexpr",
		[i]={{nil,A,"defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is not constexpr"},{J,nil,"defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator}0 is not constexpr"}},
		[j]={{nil,A,{"defaulted definition of ",{"default constructor",ic,hc,fc,ec,ob}," is not constexpr"}},{J,nil,{"defaulted definition of ",{"default constructor",ic,hc,fc,ec}," is not constexpr"}}},
		[h]=k,
		[c]="defaulted definition of (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is not constexpr",
		[f]=a,
		[e]=m,
		[g]={"cc36f698afe0",1324520551,"PR11614: Mark defaulted special constructors as constexpr if their implicit","PR11614: Mark defaulted special constructors as constexpr if their implicit\ndefinition would satisfy the constexpr requirements.\n\nllvm-svn: 147128"},
		[d]={{t,7739,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if ((getLangOpts().CPlusPlus20 || (getLangOpts().CPlusPlus14 ? !isa<CXXDestructorDecl>(MD) : isa<CXXConstructorDecl>(MD))) && MD->isConstexpr() && !Constexpr && MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {\n    Diag(MD->getBeginLoc(), MD->isConsteval() ? diag::err_incorrect_defaulted_consteval : diag::err_incorrect_defaulted_constexpr) << CSM;"}},
		[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:6:3: error: defaulted definition of default constructor is not constexpr","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:21:3: error: defaulted definition of copy constructor is not constexpr","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:22:3: error: defaulted definition of move constructor is not constexpr"}
		}
	},
	["err_incorrect_number_of_vector_initializers"]={
		[b]="err_incorrect_number_of_vector_initializers",
		[i]="number of elements must be either one or match the size of the vector",
		[j]="number of elements must be either one or match the size of the vector",
		[h]=k,
		[c]="number of elements must be either one or match the size of the vector",
		[f]=a,
		[e]=m,
		[g]={"28ccef788bb2",1301218360,"supported: AltiVec vector initialization with a single literal according to PIM section 2.5.1 - afte...","supported: AltiVec vector initialization with a single literal according to PIM section 2.5.1 - after initialization all elements have the value specified by the literal\n\nllvm-svn: 128375"},
		[d]={{q,8599,"ExprResult Sema::BuildVectorLiteral(SourceLocation LParenLoc, SourceLocation RParenLoc, Expr *E, TypeSourceInfo *TInfo) {\n  // ...\n  if (ShouldSplatAltivecScalarInCast(VTy)) {\n    // The number of initializers must be one or must match the size of the\n    // vector. If a single value is specified in the initializer then it will\n    // be replicated to all the components of the vector\n    if (numExprs == 1) {\n    // ...\n    } else if (numExprs < numElems) {\n      Diag(E->getExprLoc(), diag::err_incorrect_number_of_vector_initializers);"}},
		[l]={
			["clang/test/Sema/altivec-init.c"]={"clang/test/Sema/altivec-init.c:15:20: error: number of elements must be either one or match the size of the vector"}
		}
	},
	["err_increment_decrement_enum"]={
		[b]="err_increment_decrement_enum",
		[i]="cannot %select{decrement|increment}0 expression of enum type %1",
		[j]={{nil,nil,{"cannot ",{"decrement","increment"}," expression of enum type B"}}},
		[h]=k,
		[c]="cannot (?:decrement|increment) expression of enum type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"493df1a14f5d",1375926623,"Emit an error for enum increments and decrements in C++ mode.","Emit an error for enum increments and decrements in C++ mode.\nFixes PR16394.\n\nllvm-svn: 187955"},
		[d]={{q,14723,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n  // ...\n  } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n    // ...\n    S.Diag(OpLoc, diag::err_increment_decrement_enum) << IsInc << ResType;"}},
		[l]={
			["clang/test/SemaCXX/enum-increment.cpp"]={"clang/test/SemaCXX/enum-increment.cpp:6:4: error: cannot increment expression of enum type \'A\'","clang/test/SemaCXX/enum-increment.cpp:7:4: error: cannot decrement expression of enum type \'A\'","clang/test/SemaCXX/enum-increment.cpp:8:3: error: cannot increment expression of enum type \'A\'","clang/test/SemaCXX/enum-increment.cpp:9:3: error: cannot decrement expression of enum type \'A\'"}
		}
	},
	["err_indirect_goto_in_protected_scope"]={
		[b]="err_indirect_goto_in_protected_scope",
		[i]={{nil,r,"cannot jump from this %select{indirect|asm}0 goto statement to one of its possible targets"},{V,nil,"cannot jump from this indirect goto statement to one of its possible targets"}},
		[j]={{nil,r,{"cannot jump from this ",{"indirect","asm"}," goto statement to one of its possible targets"}},{V,nil,"cannot jump from this indirect goto statement to one of its possible targets"}},
		[h]=k,
		[c]="cannot jump from this (?:indirect|asm) goto statement to one of its possible targets",
		[f]=a,
		[e]=m,
		[g]={"0bf2dd2ed408",1240103126,"First half of jump scope checking for indirect goto.","First half of jump scope checking for indirect goto.\n\nllvm-svn: 69498"},
		[d]={{nb,863,"/// Produce primary diagnostic for an indirect jump statement.\nstatic void DiagnoseIndirectOrAsmJumpStmt(Sema &S, Stmt *Jump, LabelDecl *Target, bool &Diagnosed) {\n  // ...\n  S.Diag(Jump->getBeginLoc(), diag::err_indirect_goto_in_protected_scope) << IsAsmGoto;"}},
		[l]={
			["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:31:3: error: cannot jump from this indirect goto statement to one of its possible targets","clang/test/SemaObjC/strong-in-c-struct.m:55:3: error: cannot jump from this indirect goto statement to one of its possible targets","clang/test/SemaObjC/strong-in-c-struct.m:73:3: error: cannot jump from this indirect goto statement to one of its possible targets"}
		}
	},
	["err_indirect_goto_without_addrlabel"]={
		[b]="err_indirect_goto_without_addrlabel",
		[i]="indirect goto in function with no address-of-label expressions",
		[j]="indirect goto in function with no address-of-label expressions",
		[h]=k,
		[c]="indirect goto in function with no address\\-of\\-label expressions",
		[f]=a,
		[e]=m,
		[g]={"cf819ab38311",1273625893,"When checking scopes for indirect goto, be more permissive (but still safe)","When checking scopes for indirect goto, be more permissive (but still safe)\nabout the permitted scopes.  Specifically:\n  1) Permit labels and gotos to appear after a prologue of variable initializations.\n  2) Permit indirect gotos to jump out of scopes that don\'t require cleanup.\n  3) Diagnose possible attempts to indirect-jump out of scopes that do require\n     cleanup.\nThis requires a substantial reinvention of the algorithm for checking indirect\ngoto.  The current algorithm is Omega(M*N), with M = the number of unique\nscopes being jumped from and N = the number of unique scopes being jumped to,\nwith an additional factor that is probably (worst-case) linear in the depth\nof scopes.  Thus the entire thing is likely cubic given some truly bizarre\nill-formed code;  on well-formed code the additional factor collapses to\nan amortized constant (when amortized over the entire function) and so\nthe algorithm is quadratic.  Even this requires every label to appear in\nits own scope, which would be very unusual for indirect-goto code (and\nextremely unlikely for well-formed code);  it is far more likely that\nall labels will be in the same scope and so the algorithm becomes linear.\nFor such a marginal feature, I am fairly happy with this result.\n\n(this is using JumpDiagnostic\'s definition of scope, where successive\nvariables in a block appear in their own scope)\n\nllvm-svn: 103536"},
		[d]={{nb,742,"/// VerifyIndirectJumps - Verify whether any possible indirect goto jump might\n/// cross a protection boundary.  Unlike direct jumps, indirect goto jumps\n/// count cleanups as protection boundaries: since there\'s no way to know where\n/// the jump is going, we can\'t implicitly run the right cleanups the way we\n/// can with direct jumps.  Thus, an indirect/asm jump is \"trivial\" if it\n/// bypasses no initializations and no teardowns.  More formally, an\n/// indirect/asm jump from A to B is trivial if the path out from A to DCA(A,B)\n/// is trivial and the path in from DCA(A,B) to B is trivial, where DCA(A,B) is\n/// the deepest common ancestor of A and B.  Jump-triviality is transitive but\n/// asymmetric.\n///\n/// A path in is trivial if none of the entered scopes have an InDiag.\n/// A path out is trivial is none of the exited scopes have an OutDiag.\n///\n/// Under these definitions, this function checks that the indirect\n/// jump between A and B is trivial for every indirect goto statement A\n/// and every label B whose address was taken in the function.\nvoid JumpScopeChecker::VerifyIndirectJumps() {\n  // ...\n  // If there aren\'t any address-of-label expressions in this function,\n  // complain about the first indirect goto.\n  if (IndirectJumpTargets.empty()) {\n    S.Diag(IndirectJumps[0]->getBeginLoc(), diag::err_indirect_goto_without_addrlabel);"}}
	},
	["err_init_capture_deduction_failure"]={
		[b]="err_init_capture_deduction_failure",
		[i]="cannot deduce type for lambda capture %0 from initializer of type %2",
		[j]="cannot deduce type for lambda capture A from initializer of type C",
		[h]=k,
		[c]="cannot deduce type for lambda capture (.*?) from initializer of type (.*?)",
		[f]=a,
		[e]=T,
		[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
		[d]={{p,12790,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed) {\n    if (!IsInitCapture)\n    // ...\n    else if (isa<InitListExpr>(Init))\n    // ...\n    else\n      Diag(Range.getBegin(), diag::err_init_capture_deduction_failure) << VN << TSI->getType() << (DeduceInit->getType().isNull() ? TSI->getType() : DeduceInit->getType()) << DeduceInit->getSourceRange();"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",4976,"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]={
			[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:51:20: error: cannot deduce type for lambda capture \'a\' from initializer of type \'<overloaded function type>\'"}
		}
	},
	["err_init_capture_deduction_failure_from_init_list"]={
		[b]="err_init_capture_deduction_failure_from_init_list",
		[i]="cannot deduce type for lambda capture %0 from initializer list",
		[j]="cannot deduce type for lambda capture A from initializer list",
		[h]=k,
		[c]="cannot deduce type for lambda capture (.*?) from initializer list",
		[f]=a,
		[e]=T,
		[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
		[d]={{p,12784,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed) {\n    if (!IsInitCapture)\n    // ...\n    else if (isa<InitListExpr>(Init))\n      Diag(Range.getBegin(), diag::err_init_capture_deduction_failure_from_init_list) << VN << (DeduceInit->getType().isNull() ? TSI->getType() : DeduceInit->getType()) << DeduceInit->getSourceRange();"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",4971,"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]={
			[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:52:20: error: cannot deduce type for lambda capture \'a\' from initializer list"}
		}
	},
	["err_init_capture_multiple_expressions"]={
		[b]="err_init_capture_multiple_expressions",
		[i]="initializer for lambda capture %0 contains multiple expressions",
		[j]="initializer for lambda capture A contains multiple expressions",
		[h]=k,
		[c]="initializer for lambda capture (.*?) contains multiple expressions",
		[f]=a,
		[e]=T,
		[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
		[d]={{p,12739,"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]={
			[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:48:25: error: initializer for lambda capture \'a\' contains multiple expressions"}
		}
	},
	["err_init_capture_no_expression"]={
		[b]="err_init_capture_no_expression",
		[i]="initializer missing for lambda capture %0",
		[j]="initializer missing for lambda capture A",
		[h]=k,
		[c]="initializer missing for lambda capture (.*?)",
		[f]=a,
		[e]=T,
		[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
		[d]={{p,12731,"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]={
			[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:55:53: error: initializer missing for lambda capture \'a\'"}
		}
	},
	["err_init_capture_paren_braces"]={
		[b]="err_init_capture_paren_braces",
		[i]="cannot deduce type for lambda capture %1 from %select{parenthesized|nested}0 initializer list",
		[j]={{nil,nil,{"cannot deduce type for lambda capture B from ",{"parenthesized","nested"}," initializer list"}}},
		[h]=k,
		[c]="cannot deduce type for lambda capture (.*?) from (?:parenthesized|nested) initializer list",
		[f]=a,
		[e]=T,
		[g]={"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"},
		[d]={{p,12748,"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]={
			[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:53:21: error: cannot deduce type for lambda capture \'a\' from nested initializer list"}
		}
	},
	["err_init_conversion_failed"]={
		[b]="err_init_conversion_failed",
		[i]="cannot initialize %select{a variable|a parameter|return object|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function}0 %diff{of type $ with an %select{rvalue|lvalue}2 of type $|with an %select{rvalue|lvalue}2 of incompatible type}1,3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5 vs %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}6)|: different exception specifications}4",
		[j]={{nil,n,{bc,{Yb,Wb,"template parameter",Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb,"a structured binding",pb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},": different qualifiers (F vs G)",ub}}},{s,mb,{bc,{Yb,Wb,"template parameter",Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},": different qualifiers (F vs G)",ub}}},{sb,V,{bc,{Yb,Wb,Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},": different qualifiers (F vs G)",ub}}},{"7.1",A,{bc,{Yb,Wb,Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},{": different qualifiers (",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb}," vs ",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb},")"},ub}}},{J,E,{bc,{Yb,Wb,Vb,Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},{": different qualifiers (",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb}," vs ",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb},")"},ub}}},{nil,nil,{bc,{Yb,Wb,Vb,Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},{": different qualifiers (",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb}," vs ",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb},")"},ub}}}},
		[h]=k,
		[c]="cannot initialize (?:a variable|a parameter|template parameter|return object|statement expression result|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function|a structured binding|a member subobject) (?:of type (.*?) with an (?:rvalue|lvalue) of type (.*?)|with an (?:rvalue|lvalue) of incompatible type)(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
		[f]=a,
		[e]=m,
		[g]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the","Switch the initialization required by return statements over to the\nnew InitializationSequence. This fixes some bugs (e.g., PR5808),\nchanged some diagnostics, and caused more churn than expected. What\'s\nnew:\n\n  - InitializationSequence now has a \"C conversion sequence\" category\n    and step kind, which falls back to\n  - Changed the diagnostics for returns to always have the result type\n    of the function first and the type of the expression second.\n    CheckSingleAssignmentConstraints to peform checking in C. \n  - Improved ASTs for initialization of return values. The ASTs now\n    capture all of the temporaries we need to create, but\n    intentionally do not bind the tempoary that is actually returned,\n    so that it won\'t get destroyed twice.\n  - Make sure to perform an (elidable!) copy of the class object that\n    is returned from a class.\n  - Fix copy elision in CodeGen to properly see through the\n    subexpressions that occur with elidable copies.\n  - Give \"new\" its own entity kind; as with return values and thrown\n    objects, we don\'t bind the expression so we don\'t call a\n    destructor for it.\n\nNote that, with this patch, I\'ve broken returning move-only types in\nC++0x. We\'ll fix it later, when we tackle NRVO.\n\nllvm-svn: 91669"},
		[d]={{H,9785,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ConversionFailed: {\n    // ...\n    PartialDiagnostic PDiag = S.PDiag(diag::err_init_conversion_failed) << (int)Entity.getKind() << DestType << OnlyArg->isLValue() << FromType << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-typedef.cpp"]={"clang/test/SemaTemplate/instantiate-typedef.cpp:11:10: error: cannot initialize return object of type \'add_pointer<float>::type\' (aka \'float *\') with an lvalue of type \'int *\'"}
		}
	},
	["err_init_element_not_constant"]={
		[b]="err_init_element_not_constant",
		[i]="initializer element is not a compile-time constant",
		[j]="initializer element is not a compile-time constant",
		[h]=k,
		[c]="initializer element is not a compile\\-time constant",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,12327,"bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {\n  // ...\n  Diag(Culprit->getExprLoc(), diag::err_init_element_not_constant) << Culprit->getSourceRange();"}},
		[l]={
			["clang/test/Sema/offsetof-64.c"]={"clang/test/Sema/offsetof-64.c:22:13: error: initializer element is not a compile-time constant"}
		}
	},
	["err_init_for_function_type"]={
		[b]={{nil,E,"err_init_for_function_type"}},
		[i]={{nil,E,"cannot create object of function type %0"}},
		[j]={{nil,E,"cannot create object of function type A"}},
		[h]=k,
		[c]="cannot create object of function type (.*?)",
		[f]=a,
		[e]={{nil,E,m}},
		[g]={"49a6b6e91edf",1490318065,"Fix handling of initialization from parenthesized initializer list.","Fix handling of initialization from parenthesized initializer list.\n\nThis change fixes a crash on initialization of a reference from ({}) during\ntemplate instantiation and incidentally improves diagnostics.\n\nThis reverts a prior attempt to handle this in r286721. Instead, we teach the\ninitialization code that initialization cannot be performed if a source type\nis required and the initializer is an initializer list (which is not an\nexpression and does not have a type), and likewise for function-style cast\nexpressions.\n\nllvm-svn: 298676"},
		[d]={{I,1575,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  // Only construct objects with object types.\n  // The standard doesn\'t explicitly forbid function types here, but that\'s an\n  // obvious oversight, as there\'s no way to dynamically construct a function\n  // in general.\n  if (Ty->isFunctionType())\n    return ExprError(Diag(TyBeginLoc, diag::err_init_for_function_type) << Ty << FullRange);"}},
		[l]={
			["clang/test/SemaCXX/type-convert-construct.cpp"]={"clang/test/SemaCXX/type-convert-construct.cpp:11:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:13:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:15:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:16:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:17:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:18:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')"}
		}
	},
	["err_init_incomplete_type"]={
		[b]="err_init_incomplete_type",
		[i]="initialization of incomplete type %0",
		[j]="initialization of incomplete type A",
		[h]=k,
		[c]="initialization of incomplete type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"3f4f03a23553",1274393522,"Add a new failure kind, FK_Incomplete, to InitializationSequence, to","Add a new failure kind, FK_Incomplete, to InitializationSequence, to\ncapture failures when we try to initialize an incomplete\ntype. Previously, we would (ab)use FK_ConversionFailed, then\noccasionally dereference a null pointer when trying to diagnose the\nfailure. Fixes <rdar://problem/7959007>.\n\nllvm-svn: 104286"},
		[d]={{H,9976,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_Incomplete:\n    S.RequireCompleteType(Kind.getLocation(), FailedIncompleteType, diag::err_init_incomplete_type);"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-initializer-constructor.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-constructor.cpp:285:12: error: initialization of incomplete type \'const ArrayRef\'"}
		}
	},
	["err_init_list_bad_dest_type"]={
		[b]="err_init_list_bad_dest_type",
		[i]="%select{|non-aggregate }0type %1 cannot be initialized with an initializer list",
		[j]={{nil,nil,{{a,"non-aggregate "},"type B cannot be initialized with an initializer list"}}},
		[h]=k,
		[c]="(?:|non\\-aggregate )type (.*?) cannot be initialized with an initializer list",
		[f]=a,
		[e]=m,
		[g]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"},
		[d]={{H,9833,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_InitListBadDestinationType:\n    S.Diag(Kind.getLocation(), diag::err_init_list_bad_dest_type) << (DestType->isRecordType()) << DestType << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/Parser/cxx2a-designated-init.cpp"]={"clang/test/Parser/cxx2a-designated-init.cpp:13:14: error: non-aggregate type \'A\' cannot be initialized with an initializer list"}
		}
	},
	["err_init_list_bin_op"]={
		[b]="err_init_list_bin_op",
		[i]="initializer list cannot be used on the %select{left|right}0 hand side of operator \'%1\'",
		[j]={{nil,nil,{"initializer list cannot be used on the ",{"left","right"}," hand side of operator \'B\'"}}},
		[h]=k,
		[c]="initializer list cannot be used on the (?:left|right) hand side of operator \'(.*?)\'",
		[f]=a,
		[e]=C,
		[g]={"5e0cac784a57",1330570757,"Reject \'a = {0} = {0}\' rather than parsing it as \'(a = {0}) = {0}\'. Also","Reject \'a = {0} = {0}\' rather than parsing it as \'(a = {0}) = {0}\'. Also\nimprove the diagnostics for some attempts to use initializer lists in\nexpressions.\n\nllvm-svn: 151794"},
		[d]={{Zb,472,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (NextTokPrec == prec::Conditional) {\n      if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n        // ...\n        if (!TernaryMiddle.isInvalid()) {\n          Diag(BraceLoc, diag::err_init_list_bin_op) << /*RHS*/ 1 << PP.getSpelling(OpToken) << Actions.getExprRange(TernaryMiddle.get());"},{Zb,575,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    // Get the precedence of the operator to the right of the RHS.  If it binds\n    // more tightly with RHS than we do, evaluate it completely first.\n    if (ThisPrec < NextTokPrec || (ThisPrec == NextTokPrec && isRightAssoc)) {\n      if (!RHS.isInvalid() && RHSIsInitList) {\n        Diag(Tok, diag::err_init_list_bin_op) << /*LHS*/ 0 << PP.getSpelling(Tok) << Actions.getExprRange(RHS.get());"},{Zb,606,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n      // ...\n      } else if (ColonLoc.isValid()) {\n        Diag(ColonLoc, diag::err_init_list_bin_op) << /*RHS*/ 1 << \":\" << Actions.getExprRange(RHS.get());"},{Zb,611,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n      // ...\n      } else if (ColonLoc.isValid()) {\n      // ...\n      } else {\n        Diag(OpToken, diag::err_init_list_bin_op) << /*RHS*/ 1 << PP.getSpelling(OpToken) << Actions.getExprRange(RHS.get());"}},
		[l]={
			["clang/test/Parser/cxx11-brace-initializers.cpp"]={"clang/test/Parser/cxx11-brace-initializers.cpp:28:24: error: initializer list cannot be used on the right hand side of operator \'?\'","clang/test/Parser/cxx11-brace-initializers.cpp:29:26: error: initializer list cannot be used on the right hand side of operator \':\'"}
		}
	},
	["err_init_method_bad_return_type"]={
		[b]="err_init_method_bad_return_type",
		[i]="init methods must return an object pointer type, not %0",
		[j]="init methods must return an object pointer type, not A",
		[h]=k,
		[c]="init methods must return an object pointer type, not (.*?)",
		[f]=a,
		[e]=m,
		[g]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting.\n\nLanguage-design credit goes to a lot of people, but I particularly want\nto single out Blaine Garst and Patrick Beard for their contributions.\n\nCompiler implementation credit goes to Argyrios, Doug, Fariborz, and myself,\nin no particular order.\n\nllvm-svn: 133103"},
		[d]={{u,2981,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (F == ObjCMethodFamilyAttr::OMF_init && !M->getReturnType()->isObjCObjectPointerType()) {\n    S.Diag(M->getLocation(), diag::err_init_method_bad_return_type) << M->getReturnType();"}}
	},
	["err_init_non_aggr_init_list"]={
		[b]="err_init_non_aggr_init_list",
		[i]="initialization of non-aggregate type %0 with an initializer list",
		[j]="initialization of non-aggregate type A with an initializer list",
		[h]=k,
		[c]="initialization of non\\-aggregate type (.*?) with an initializer list",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{H,1727,"void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (isa<InitListExpr>(expr) && !SemaRef.getLangOpts().CPlusPlus11) {\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_init_non_aggr_init_list) << DeclType << IList->getSourceRange();"}}
	},
	["err_init_objc_class"]={
		[b]="err_init_objc_class",
		[i]="cannot initialize Objective-C class type %0",
		[j]="cannot initialize Objective-C class type A",
		[h]=k,
		[c]="cannot initialize Objective\\-C class type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"50ec46d4af82",1272911077,"Complain when we try to initialize an object of Objective-C class type","Complain when we try to initialize an object of Objective-C class type\n(which is ill-formed) with an initializer list. Also, change the\nfallback from an assertion to a generic error message, which is far\nfriendlier. Fixes <rdar://problem/7730948>.\n\nllvm-svn: 102930"},
		[d]={{H,1374,"void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) {\n  // ...\n  } else if (DeclType->isScalarType()) {\n  // ...\n  } else if (DeclType->isVectorType()) {\n  // ...\n  } else if (const RecordDecl *RD = getRecordDecl(DeclType)) {\n  // ...\n  } else if (DeclType->isArrayType()) {\n  // ...\n  } else if (DeclType->isVoidType() || DeclType->isFunctionType()) {\n  // ...\n  } else if (DeclType->isReferenceType()) {\n  // ...\n  } else if (DeclType->isObjCObjectType()) {\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_init_objc_class) << DeclType;"}},
		[l]={
			["clang/test/SemaObjC/compound-init.m"]={"clang/test/SemaObjC/compound-init.m:6:6: error: cannot initialize Objective-C class type \'A\'"}
		}
	},
	["err_init_priority_object_attr"]={
		[b]="err_init_priority_object_attr",
		[i]="can only use \'init_priority\' attribute on file-scope definitions of objects of class type",
		[j]="can only use \'init_priority\' attribute on file-scope definitions of objects of class type",
		[h]=k,
		[c]="can only use \'init_priority\' attribute on file\\-scope definitions of objects of class type",
		[f]=a,
		[e]=m,
		[g]={"0bf5ee74c473",1276902893,"More Sema Check and a test case for init_priority attr.","More Sema Check and a test case for init_priority attr.\n(radar 8076356).\n\nllvm-svn: 106350"},
		[d]={{u,3856,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.getCurFunctionOrMethodDecl()) {\n    S.Diag(AL.getLoc(), diag::err_init_priority_object_attr);"},{u,3864,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!T->getAs<RecordType>()) {\n    S.Diag(AL.getLoc(), diag::err_init_priority_object_attr);"}},
		[l]={
			["clang/test/SemaCXX/init-priority-attr.cpp"]={"init-priority-attr.cpp:50:23: error: can only use \'init_priority\' attribute on file-scope definitions of objects of class type","init-priority-attr.cpp:54:26: error: can only use \'init_priority\' attribute on file-scope definitions of objects of class type"}
		}
	},
	["err_init_reference_member_uninitialized"]={
		[b]="err_init_reference_member_uninitialized",
		[i]="reference member of type %0 uninitialized",
		[j]="reference member of type A uninitialized",
		[h]=k,
		[c]="reference member of type (.*?) uninitialized",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{H,735,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n  // ...\n  if (Init >= NumInits || !ILE->getInit(Init)) {\n    // ...\n    if (Field->getType()->isReferenceType()) {\n      if (!VerifyOnly) {\n        // ...\n        SemaRef.Diag(Loc, diag::err_init_reference_member_uninitialized) << Field->getType() << (ILE->isSyntacticForm() ? ILE : ILE->getSyntacticForm())->getSourceRange();"},{H,1716,"void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (Index >= IList->getNumInits()) {\n    // FIXME: It would be wonderful if we could point at the actual member. In\n    // general, it would be useful to pass location information down the stack,\n    // so that we know the location (or decl) of the \"current object\" being\n    // initialized.\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_init_reference_member_uninitialized) << DeclType << IList->getSourceRange();"},{H,5612,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  // ...\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  // ...\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    // ...\n    for (FieldDecl *FD : RD->fields()) {\n      // ...\n      if (EntityIndexToProcess < Args.size()) {\n      // ...\n      } else {\n        // We\'ve processed all of the args, but there are still members that\n        // have to be initialized.\n        if (FD->hasInClassInitializer()) {\n        // ...\n        } else {\n          // C++ [dcl.init]p17.6.2.2\n          //   The remaining elements...otherwise are value initialzed\n          if (FD->getType()->isReferenceType()) {\n            // ...\n            if (!VerifyOnly) {\n              // ...\n              S.Diag(SR.getEnd(), diag::err_init_reference_member_uninitialized) << FD->getType() << SR;"}},
		[l]={
			["clang/test/SemaCXX/designated-initializers.cpp"]={"clang/test/SemaCXX/designated-initializers.cpp:90:3: error: reference member of type \'int &\' uninitialized","clang/test/SemaCXX/designated-initializers.cpp:93:3: error: reference member of type \'int &\' uninitialized"}
		}
	},
	["err_initializer_overrides_destructed"]={
		[b]={{nil,F,"err_initializer_overrides_destructed"}},
		[i]={{nil,F,"initializer would partially override prior initialization of object of type %1 with non-trivial destruction"}},
		[j]={{nil,F,"initializer would partially override prior initialization of object of type B with non-trivial destruction"}},
		[h]=k,
		[c]="initializer would partially override prior initialization of object of type (.*?) with non\\-trivial destruction",
		[f]=a,
		[e]={{nil,F,m}},
		[g]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated\ninitializers.\n\nThis has some interesting interactions with our existing extensions to\nsupport C99 designated initializers as an extension in C++. Those are\nresolved as follows:\n\n * We continue to permit the full breadth of C99 designated initializers\n   in C++, with the exception that we disallow a partial overwrite of an\n   initializer with a non-trivially-destructible type. (Full overwrite\n   is OK, because we won\'t run the first initializer at all.)\n\n * The C99 extensions are disallowed in SFINAE contexts and during\n   overload resolution, where they could change the meaning of valid\n   programs.\n\n * C++20 disallows reordering of initializers. We only check for that for\n   the simple cases that the C++20 rules permit (designators of the form\n   \'.field_name =\' and continue to allow reordering in other cases).\n   It would be nice to improve this behavior in future.\n\n * All C99 designated initializer extensions produce a warning by\n   default in C++20 mode. People are going to learn the C++ rules based\n   on what Clang diagnoses, so it\'s important we diagnose these properly\n   by default.\n\n * In C++ <= 17, we apply the C++20 rules rather than the C99 rules, and\n   so still diagnose C99 extensions as described above. We continue to\n   accept designated C++20-compatible initializers in C++ <= 17 silently\n   by default (but naturally still reject under -pedantic-errors).\n\nThis is not a complete implementation of P0329R4. In particular, that\npaper introduces new non-C99-compatible syntax { .field { init } }, and\nwe do not support that yet.\n\nThis is based on a previous patch by Don Hinton, though I\'ve made\nsubstantial changes when addressing the above interactions.\n\nDifferential Revision: https://reviews.llvm.org/D59754\n\nllvm-svn: 370544"},
		[d]={{H,439,"/// Semantic checking for initializer lists.\n///\n/// The InitListChecker class contains a set of routines that each\n/// handle the initialization of a certain kind of entity, e.g.,\n/// arrays, vectors, struct/union types, scalars, etc. The\n/// InitListChecker itself performs a recursive walk of the subobject\n/// structure of the type to be initialized, while stepping through\n/// the initializer list one element at a time. The IList and Index\n/// parameters to each of the Check* routines contain the active\n/// (syntactic) initializer list and the index into that initializer\n/// list that represents the current initializer. Each routine is\n/// responsible for moving that Index forward as it consumes elements.\n///\n/// Each Check* routine also has a StructuredList/StructuredIndex\n/// arguments, which contains the current \"structured\" (semantic)\n/// initializer list and the index into that initializer list where we\n/// are copying initializers as we map them over to the semantic\n/// list. Once we have completed our recursive walk of the subobject\n/// structure, we will have constructed a full semantic initializer\n/// list.\n///\n/// C99 designators cause changes in the initializer list traversal,\n/// because they make the initialization \"jump\" into a specific\n/// subobject and then continue the initialization from that\n/// point. CheckDesignatedInitializer() recursively steps into the\n/// designated subobject and manages backing out the recursion to\n/// initialize the subobjects after the one designated.\n///\n/// If an initializer list contains any designators, we build a placeholder\n/// structured list even in \'verify only\' mode, so that we can track which\n/// elements need \'empty\' initializtion.\nclass InitListChecker {\n  // ...\n  /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n  void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n    // ...\n    if (InOverloadResolution && SemaRef.getLangOpts().CPlusPlus) {\n    // ...\n    } else if (OldInit->getType().isDestructedType() && !FullyOverwritten) {\n      // ...\n      DiagID = diag::err_initializer_overrides_destructed;"}},
		[l]={
			["clang/test/SemaCXX/cxx2b-designated-initializers.cpp"]={"clang/test/SemaCXX/cxx2b-designated-initializers.cpp:43:11: error: initializer would partially override prior initialization of object of type \'NonTrivial\' with non-trivial destruction"}
		}
	},
	["err_initializer_string_for_char_array_too_long"]={
		[b]="err_initializer_string_for_char_array_too_long",
		[i]={{nil,n,"initializer-string for char array is too long, array size is %0 but initializer has size %1 (including the null terminating character)"},{s,nil,"initializer-string for char array is too long"}},
		[j]={{nil,n,"initializer-string for char array is too long, array size is A but initializer has size B (including the null terminating character)"},{s,nil,"initializer-string for char array is too long"}},
		[h]=k,
		[c]="initializer\\-string for char array is too long, array size is (.*?) but initializer has size (.*?) \\(including the null terminating character\\)",
		[f]=a,
		[e]=m,
		[g]={"554eba9c0873",1302481425,"PR9669: implement correct checking for [dcl.init.string]p2.","PR9669: implement correct checking for [dcl.init.string]p2.\n\nllvm-svn: 129260"},
		[d]={{H,251,"static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT, Sema &S) {\n  // ...\n  // We have an array of character type with known size.  However,\n  // the size may be smaller or larger than the string we are initializing.\n  // FIXME: Avoid truncation for 64-bit length strings.\n  if (S.getLangOpts().CPlusPlus) {\n    // ...\n    // [dcl.init.string]p2\n    if (StrLength > CAT->getSize().getZExtValue())\n      S.Diag(Str->getBeginLoc(), diag::err_initializer_string_for_char_array_too_long) << CAT->getSize().getZExtValue() << StrLength << Str->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/pascal-strings.cpp"]={"clang/test/SemaCXX/pascal-strings.cpp:6:22: error: initializer-string for char array is too long, array size is 3 but initializer has size 4 (including the null terminating character)","clang/test/SemaCXX/pascal-strings.cpp:8:22: error: initializer-string for char array is too long, array size is 3 but initializer has size 4 (including the null terminating character)"}
		}
	},
	["err_inline_decl_follows_def"]={
		[b]="err_inline_decl_follows_def",
		[i]="inline declaration of %0 follows non-inline definition",
		[j]="inline declaration of A follows non-inline definition",
		[h]=k,
		[c]="inline declaration of (.*?) follows non\\-inline definition",
		[f]=a,
		[e]=m,
		[g]={"ee4f4025c3e7",1396161894,"Sema: Implement DR317","Sema: Implement DR317\n\nSummary:\nDeclaring a function as inline after it has been defined is in violation\nof [dcl.fct.spec]p4.  The program would get a strong definition instead\nof getting a function with linkonce_odr linkage.\n\nReviewers: rsmith\n\nCC: cfe-commits\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D3220\n\nllvm-svn: 205129"},
		[d]={{p,4693,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (New->isInline() && !Old->getMostRecentDecl()->isInline()) {\n    if (VarDecl *Def = Old->getDefinition()) {\n      // ...\n      Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New;"},{t,687,"/// 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  // ...\n  } else if (!Old->getMostRecentDecl()->isInlined() && New->isInlined() && Old->isDefined(Def) &&\n    // ...\n    Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:6:13: error: inline declaration of \'f0\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:15:22: error: inline declaration of \'func_02\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:20:22: error: inline declaration of \'func_03\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:24:13: error: inline declaration of \'func_04\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:28:22: error: inline declaration of \'func_06\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:33:22: error: inline declaration of \'func_07\' follows non-inline definition"}
		}
	},
	["err_inline_declaration_block_scope"]={
		[b]="err_inline_declaration_block_scope",
		[i]="inline declaration of %0 not allowed in block scope",
		[j]="inline declaration of A not allowed in block scope",
		[h]=k,
		[c]="inline declaration of (.*?) not allowed in block scope",
		[f]=a,
		[e]=m,
		[g]={"2588691a6960",1281095050,"Diagnose the use of \"inline\" on block-scope function declarations in","Diagnose the use of \"inline\" on block-scope function declarations in\nC++, from Andrea Nall!\n\nllvm-svn: 110439"},
		[d]={{p,7727,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified()) {\n    if (!getLangOpts().CPlusPlus) {\n    // ...\n    } else if (CurContext->isFunctionOrMethod()) {\n      // ...\n      Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_declaration_block_scope) << Name << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"},{p,9925,"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]p3:\n    //  The inline specifier shall not appear on a block scope function\n    //  declaration.\n    if (isInline && !NewFD->isInvalidDecl()) {\n      if (CurContext->isFunctionOrMethod()) {\n        // ...\n        Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_declaration_block_scope) << Name << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p3.cpp:4:4: error: inline declaration of \'f1\' not allowed in block scope"}
		}
	},
	["err_inline_main"]={
		[b]="err_inline_main",
		[i]="\'main\' is not allowed to be declared inline",
		[j]="\'main\' is not allowed to be declared inline",
		[h]=k,
		[c]="\'main\' is not allowed to be declared inline",
		[f]=a,
		[e]=m,
		[g]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics.\n\nllvm-svn: 139282"},
		[d]={{p,12080,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (FD->isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_main) << FixItHint::CreateRemoval(DS.getInlineSpecLoc());"}},
		[l]={
			["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:19:1: error: \'main\' is not allowed to be declared inline"}
		}
	},
	["err_inline_namespace_alias"]={
		[b]="err_inline_namespace_alias",
		[i]="namespace alias cannot be inline",
		[j]="namespace alias cannot be inline",
		[h]=k,
		[c]="namespace alias cannot be inline",
		[f]=a,
		[e]=C,
		[g]={"6766794c0b91",1282950766,"Parser support for inline namespaces","Parser support for inline namespaces\n\nllvm-svn: 112320"},
		[d]={{U,146,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///       namespace-definition: [C++: namespace.def]\n///         named-namespace-definition\n///         unnamed-namespace-definition\n///         nested-namespace-definition\n///\n///       named-namespace-definition:\n///         \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///         namespace-body \'}\'\n///\n///       unnamed-namespace-definition:\n///         \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///       nested-namespace-definition:\n///         \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///         identifier \'{\' namespace-body \'}\'\n///\n///       enclosing-namespace-specifier:\n///         identifier\n///         enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///       namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///         \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (Tok.is(tok::equal)) {\n    // ...\n    if (InlineLoc.isValid())\n      Diag(InlineLoc, diag::err_inline_namespace_alias) << FixItHint::CreateRemoval(InlineLoc);"}}
	},
	["err_inline_namespace_mismatch"]={
		[b]="err_inline_namespace_mismatch",
		[i]="non-inline namespace cannot be reopened as inline",
		[j]="non-inline namespace cannot be reopened as inline",
		[h]=k,
		[c]="non\\-inline namespace cannot be reopened as inline",
		[f]=a,
		[e]=m,
		[g]={"b5c2baa2d7a2",1283214996,"Enable inline namespaces in the AST.","Enable inline namespaces in the AST.\n\nllvm-svn: 112564"},
		[d]={{t,11366,"/// Diagnose a mismatch in \'inline\' qualifiers when a namespace is\n/// reopened.\nstatic void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS) {\n  // ...\n  if (PrevNS->isInline())\n  // ...\n  else\n    S.Diag(Loc, diag::err_inline_namespace_mismatch);"}},
		[l]={
			["clang/test/SemaCXX/libstdcxx_atomic_ns_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_atomic_ns_hack.cpp:24:18: error: non-inline namespace cannot be reopened as inline"}
		}
	},
	["err_inline_namespace_std"]={
		[b]="err_inline_namespace_std",
		[i]="cannot declare the namespace \'std\' to be inline",
		[j]="cannot declare the namespace \'std\' to be inline",
		[h]=k,
		[c]="cannot declare the namespace \'std\' to be inline",
		[f]=a,
		[e]=m,
		[g]={"bed75faf7d76",1690219823,"[Clang] Reject programs declaring namespace std to be inline","[Clang] Reject programs declaring namespace std to be inline\n\nFixes #64041\n\nDifferential Revision: https://reviews.llvm.org/D156063"},
		[d]={{t,11402,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  // ...\n  if (II) {\n    // C++ [namespace.std]p7:\n    //   A translation unit shall not declare namespace std to be an inline\n    //   namespace (9.8.2).\n    //\n    // Precondition: the std namespace is in the file scope and is declared to\n    // be inline\n    auto DiagnoseInlineStdNS = [&]() {\n      // ...\n      Diag(InlineLoc, diag::err_inline_namespace_std) << SourceRange(InlineLoc, InlineLoc.getLocWithOffset(6));"}},
		[l]={
			["clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp:21:1: error: cannot declare the namespace \'std\' to be inline","clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp:22:1: error: cannot declare the namespace \'std\' to be inline"}
		}
	},
	["err_inline_nested_namespace_definition"]={
		[b]="err_inline_nested_namespace_definition",
		[i]="nested namespace definition cannot be \'inline\'",
		[j]="nested namespace definition cannot be \'inline\'",
		[h]=k,
		[c]="nested namespace definition cannot be \'inline\'",
		[f]=a,
		[e]=C,
		[g]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions.\n\nThis allows \'namespace A::B { ... }\' as a shorthand for \'namespace A {\nnamespace B { ... } }\'. We already supported this correctly for error recovery;\npromote that support to a full implementation.\n\nThis is not the right implementation: we do not maintain source fidelity\nbecause we desugar the nested namespace definition in the parser. This is\ntricky to avoid, since the definition genuinely does inject one named\nentity per level in the namespace name.\n\nllvm-svn: 221574"},
		[d]={{U,172,"/// ParseNamespace - We know that the current token is a namespace keyword. This\n/// may either be a top level namespace or a block-level namespace alias. If\n/// there was an inline keyword, it has already been parsed.\n///\n///       namespace-definition: [C++: namespace.def]\n///         named-namespace-definition\n///         unnamed-namespace-definition\n///         nested-namespace-definition\n///\n///       named-namespace-definition:\n///         \'inline\'[opt] \'namespace\' attributes[opt] identifier \'{\'\n///         namespace-body \'}\'\n///\n///       unnamed-namespace-definition:\n///         \'inline\'[opt] \'namespace\' attributes[opt] \'{\' namespace-body \'}\'\n///\n///       nested-namespace-definition:\n///         \'namespace\' enclosing-namespace-specifier \'::\' \'inline\'[opt]\n///         identifier \'{\' namespace-body \'}\'\n///\n///       enclosing-namespace-specifier:\n///         identifier\n///         enclosing-namespace-specifier \'::\' \'inline\'[opt] identifier\n///\n///       namespace-alias-definition:  [C++ 7.3.2: namespace.alias]\n///         \'namespace\' identifier \'=\' qualified-namespace-specifier \';\'\n///\nParser::DeclGroupPtrTy Parser::ParseNamespace(DeclaratorContext Context, SourceLocation &DeclEnd, SourceLocation InlineLoc) {\n  // ...\n  if (ExtraNSs.empty()) {\n  // ...\n  } else if (InlineLoc.isValid()) {\n    Diag(InlineLoc, diag::err_inline_nested_namespace_definition);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp:22:1: error: nested namespace definition cannot be \'inline\'"}
		}
	},
	["err_inline_non_function"]={
		[b]="err_inline_non_function",
		[i]="\'inline\' can only appear on functions%select{| and non-local variables}0",
		[j]={{nil,nil,{"\'inline\' can only appear on functions",{a," and non-local variables"}}}},
		[h]=k,
		[c]="\'inline\' can only appear on functions(?:| and non\\-local variables)",
		[f]=a,
		[e]=m,
		[g]={"574c74537027",1239133077,"Diagnose uses of function specifiers on declarations which don\'t declare","Diagnose uses of function specifiers on declarations which don\'t declare\nfunctions.  Fixes PR3941.\n\nllvm-svn: 68541"},
		[d]={{p,5114,"/// 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.isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{p,6672,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{p,7722,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified()) {\n    if (!getLangOpts().CPlusPlus) {\n      Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << 0;"},{p,14755,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DS.isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{p,18014,"/// HandleField - Analyze a field of a C struct or a C++ data member.\n///\nFieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{t,18838,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{rb,5200,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  if (DS.isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.inline/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.inline/p1.cpp:6:1: error: \'inline\' can only appear on functions and non-local variables","clang/test/CXX/dcl.dcl/dcl.spec/dcl.inline/p1.cpp:7:1: error: \'inline\' can only appear on functions and non-local variables"}
		}
	},
	["err_int_to_block_pointer"]={
		[b]="err_int_to_block_pointer",
		[i]="invalid block pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2",
		[j]={{nil,nil,{"invalid block pointer conversion ",{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}}}},
		[h]=k,
		[c]="invalid block pointer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{q,17652,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IntToBlockPointer:\n    DiagKind = diag::err_int_to_block_pointer;"}},
		[l]={
			["clang/test/SemaCXX/block-call.cpp"]={"clang/test/SemaCXX/block-call.cpp:34:11: error: invalid block pointer conversion assigning to \'int *(^)()\' from \'int\'"}
		}
	},
	["err_integer_literal_too_large"]={
		[b]="err_integer_literal_too_large",
		[i]="integer literal is too large to be represented in any %select{signed |}0integer type",
		[j]={{nil,nil,{"integer literal is too large to be represented in any ",{"signed ",a},"integer type"}}},
		[h]=k,
		[c]="integer literal is too large to be represented in any (?:signed |)integer type",
		[f]=a,
		[e]=v,
		[g]={"31f42318d833",1406213483,"Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Sm...","Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Smith. Amends r213657.\n\nllvm-svn: 213865"},
		[d]={{"clang/lib/Lex/PPExpressions.cpp",347,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // Parse the integer literal into Result.\n    if (Literal.GetIntegerValue(Result.Val)) {\n      // Overflow parsing integer literal.\n      if (ValueLive)\n        PP.Diag(PeekTok, diag::err_integer_literal_too_large) << /* Unsigned */ 1;"},{q,3923,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.hasUDSuffix()) {\n    // ...\n    case LOLR_Cooked: {\n      // ...\n      if (Literal.isFloatingLiteral()) {\n      // ...\n      } else {\n        // ...\n        if (Literal.GetIntegerValue(ResultVal))\n          Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << /* Unsigned */ 1;"},{q,4086,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.GetIntegerValue(ResultVal)) {\n      // ...\n      Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << /* Unsigned */ 1;"},{q,4127,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.GetIntegerValue(ResultVal)) {\n    // ...\n    } else {\n      // ...\n      // Bit-precise integer literals are automagically-sized based on the\n      // width required by the literal.\n      if (Literal.isBitInt) {\n        // ...\n        if (Width > MaxBitIntWidth) {\n          Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << Literal.isUnsigned;"}},
		[l]={
			["clang/test/Lexer/bitint-constants.c"]={"clang/test/Lexer/bitint-constants.c:23:5: error: integer literal is too large to be represented in any integer type","clang/test/Lexer/bitint-constants.c:26:5: error: integer literal is too large to be represented in any integer type","clang/test/Lexer/bitint-constants.c:142:3: error: integer literal is too large to be represented in any signed integer type","clang/test/Lexer/bitint-constants.c:143:3: error: integer literal is too large to be represented in any integer type"}
		}
	},
	["err_integer_sequence_integral_element_type"]={
		[b]="err_integer_sequence_integral_element_type",
		[i]="integer sequences must have integral element type",
		[j]="integer sequences must have integral element type",
		[h]=k,
		[c]="integer sequences must have integral element type",
		[f]=a,
		[e]=m,
		[g]={"d9b1a4fb710d",1446608430,"[Sema] Implement __make_integer_seq","[Sema] Implement __make_integer_seq\n\nThis new builtin template allows for incredibly fast instantiations of\ntemplates like std::integer_sequence.\n\nPerformance numbers follow:\nMy work station has 64 GB of ram + 20 Xeon Cores at 2.8 GHz.\n\n__make_integer_seq<std::integer_sequence, int, 90000> takes 0.25\nseconds.\n\nstd::make_integer_sequence<int, 90000> takes unbound time, it is still\nrunning.  Clang is consuming gigabytes of memory.\n\nDifferential Revision: http://reviews.llvm.org/D13786\n\nllvm-svn: 252036"},
		[d]={{kb,3660,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  case BTK__make_integer_seq: {\n    // ...\n    // C++14 [inteseq.intseq]p1:\n    //   T shall be an integer type.\n    if (!OrigType->isDependentType() && !OrigType->isIntegralType(Context)) {\n      SemaRef.Diag(TemplateArgs[1].getLocation(), diag::err_integer_sequence_integral_element_type);"}},
		[l]={
			["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:38:1: error: integer sequences must have integral element type"}
		}
	},
	["err_integer_sequence_negative_length"]={
		[b]="err_integer_sequence_negative_length",
		[i]="integer sequences must have non-negative sequence length",
		[j]="integer sequences must have non-negative sequence length",
		[h]=k,
		[c]="integer sequences must have non\\-negative sequence length",
		[f]=a,
		[e]=m,
		[g]={"d9b1a4fb710d",1446608430,"[Sema] Implement __make_integer_seq","[Sema] Implement __make_integer_seq\n\nThis new builtin template allows for incredibly fast instantiations of\ntemplates like std::integer_sequence.\n\nPerformance numbers follow:\nMy work station has 64 GB of ram + 20 Xeon Cores at 2.8 GHz.\n\n__make_integer_seq<std::integer_sequence, int, 90000> takes 0.25\nseconds.\n\nstd::make_integer_sequence<int, 90000> takes unbound time, it is still\nrunning.  Clang is consuming gigabytes of memory.\n\nDifferential Revision: http://reviews.llvm.org/D13786\n\nllvm-svn: 252036"},
		[d]={{kb,3689,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  case BTK__make_integer_seq: {\n    // ...\n    if (llvm::APSInt NumArgs = NumArgsArg.getAsIntegral(); NumArgs >= 0) {\n    // ...\n    } else {\n      // ...\n      SemaRef.Diag(TemplateArgs[2].getLocation(), diag::err_integer_sequence_negative_length);"}},
		[l]={
			["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:38:45: error: integer sequences must have non-negative sequence length"}
		}
	},
	["err_introducing_special_friend"]={
		[b]="err_introducing_special_friend",
		[i]="must use a qualified name when declaring a %select{constructor|destructor|conversion operator}0 as a friend",
		[j]={{nil,E,{{"must use a qualified name when declaring","cannot declare"}," a ",{"constructor",ob,"conversion operator","deduction guide"}," as a friend"}},{nil,nil,{"must use a qualified name when declaring a ",{"constructor",ob,"conversion operator"}," as a friend"}}},
		[h]=k,
		[c]="(?:must use a qualified name when declaring|cannot declare) a (?:constructor|destructor|conversion operator|deduction guide) as a friend",
		[f]=a,
		[e]=m,
		[g]={"07e91c04ba33",1249524943,"First pass at friend semantics.","First pass at friend semantics.\n\nllvm-svn: 78274"},
		[d]={{t,17709,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if (!DC->isRecord()) {\n    // ...\n    // This implies that it has to be an operator or function.\n    if (DiagArg >= 0) {\n      Diag(Loc, diag::err_introducing_special_friend) << DiagArg;"}},
		[l]={
			["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:55:8: error: cannot declare a deduction guide as a friend"}
		}
	},
	["err_invalid_asm_cast_lvalue"]={
		[b]="err_invalid_asm_cast_lvalue",
		[i]={{nil,mb,"invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions"},{sb,nil,"invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions"}},
		[j]={{nil,mb,"invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions"},{sb,nil,"invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions"}},
		[h]=k,
		[c]="invalid use of a cast in a inline asm context requiring an lvalue\\: remove the cast or build with \\-fheinous\\-gnu\\-extensions",
		[f]=a,
		[e]="Inline Assembly Issue",
		[g]={x,1237025389,y,z},
		[d]={{"clang/lib/Sema/SemaStmtAsm.cpp",76,"/// Emit a warning about usage of \"noop\"-like casts for lvalues (GNU extension)\n/// and fix the argument with removing LValueToRValue cast from the expression.\nstatic void emitAndFixInvalidAsmCastLValue(const Expr *LVal, Expr *BadArgument, Sema &S) {\n  if (!S.getLangOpts().HeinousExtensions) {\n    S.Diag(LVal->getBeginLoc(), diag::err_invalid_asm_cast_lvalue) << BadArgument->getSourceRange();"}},
		[l]={
			["clang/test/Sema/heinous-extensions-off.c"]={"clang/test/Sema/heinous-extensions-off.c:6:33: error: invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions","clang/test/Sema/heinous-extensions-off.c:8:36: error: invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions"}
		}
	},
	["err_invalid_asm_value_for_constraint"]={
		[b]="err_invalid_asm_value_for_constraint",
		[i]="value \'%0\' out of range for constraint \'%1\'",
		[j]="value \'A\' out of range for constraint \'B\'",
		[h]=k,
		[c]="value \'(.*?)\' out of range for constraint \'(.*?)\'",
		[f]=a,
		[e]="Inline Assembly Issue",
		[g]={"a2823578e6c5",1420518394,"Sema: analyze I,J,K,M,N,O constraints","Sema: analyze I,J,K,M,N,O constraints\n\nAdd additional constraint checking for target specific behaviour for inline\nassembly constraints.  We would previously silently let all arguments through\nfor these constraints.  In cases where the constraints were violated, we could\nend up failing to select instructions and triggering assertions or worse,\nsilently ignoring instructions.\n\nllvm-svn: 225244"},
		[d]={{"clang/lib/Sema/SemaStmtAsm.cpp",423,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  // ...\n  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    // Only allow void types for memory constraints.\n    if (Info.allowsMemory() && !Info.allowsRegister()) {\n    // ...\n    } else {\n      // ...\n      if (Info.requiresImmediateConstant() && !Info.allowsRegister()) {\n        if (!InputExpr->isValueDependent()) {\n          // ...\n          if (InputExpr->EvaluateAsRValue(EVResult, Context, true)) {\n            // ...\n            if (EVResult.Val.toIntegralConstant(IntResult, InputExpr->getType(), Context))\n              if (!Info.isValidAsmImmediate(IntResult))\n                return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_invalid_asm_value_for_constraint) << toString(IntResult, 10) << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
		[l]={
			["clang/test/Sema/inline-asm-validate-amdgpu.cl"]={"clang/test/Sema/inline-asm-validate-amdgpu.cl:25:52: error: value \'-17\' out of range for constraint \'I\'","clang/test/Sema/inline-asm-validate-amdgpu.cl:26:52: error: value \'65\' out of range for constraint \'I\'","clang/test/Sema/inline-asm-validate-amdgpu.cl:32:52: error: value \'-32769\' out of range for constraint \'J\'","clang/test/Sema/inline-asm-validate-amdgpu.cl:33:52: error: value \'32768\' out of range for constraint \'J\'"}
		}
	},
	["err_invalid_astype_of_different_size"]={
		[b]="err_invalid_astype_of_different_size",
		[i]="invalid reinterpretation: sizes of %0 and %1 must match",
		[j]="invalid reinterpretation: sizes of A and B must match",
		[h]=k,
		[c]="invalid reinterpretation\\: sizes of (.*?) and (.*?) must match",
		[f]=a,
		[e]=m,
		[g]={"55808c1026bd",1307148467,"Add support for builtin astype:","Add support for builtin astype:\n__builtin_astype(): Used to reinterpreted as another data type of the same size using for both scalar and vector data types.\nAdded test case.\n\nllvm-svn: 132612"},
		[d]={{q,7341,"/// Create a new AsTypeExpr node (bitcast) from the arguments.\nExprResult Sema::BuildAsTypeExpr(Expr *E, QualType DestTy, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!SrcTy->isDependentType() && Context.getTypeSize(DestTy) != Context.getTypeSize(SrcTy))\n    return ExprError(Diag(BuiltinLoc, diag::err_invalid_astype_of_different_size) << DestTy << SrcTy << E->getSourceRange());"}},
		[l]={
			["clang/test/Parser/opencl-astype.cl"]={"clang/test/Parser/opencl-astype.cl:14:16: error: invalid reinterpretation: sizes of \'double4\' (vector of 4 \'double\' values) and \'__private float4\' (vector of 4 \'float\' values) must match"}
		}
	},
	["err_invalid_base_in_interface"]={
		[b]="err_invalid_base_in_interface",
		[i]={{nil,A,"interface type cannot inherit from %select{struct|non-public interface|class}0 %1"},{J,nil,"interface type cannot inherit from %select{\'struct|non-public \'interface|\'class}0 %1\'"}},
		[j]={{nil,A,{"interface type cannot inherit from ",{"struct","non-public interface","class"}," B"}},{J,nil,{"interface type cannot inherit from ",{"\'struct","non-public \'interface","\'class"}," B\'"}}},
		[h]=k,
		[c]="interface type cannot inherit from (?:struct|non\\-public interface|class) (.*?)",
		[f]=a,
		[e]=m,
		[g]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement.","Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 164590"},
		[d]={{t,2930,"/// Performs the actual work of attaching the given base class\n/// specifiers to a C++ class.\nbool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, MutableArrayRef<CXXBaseSpecifier *> Bases) {\n  // ...\n  for (unsigned idx = 0; idx < Bases.size(); ++idx) {\n    // ...\n    if (KnownBase) {\n    // ...\n    } else {\n      // ...\n      if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {\n        // ...\n        if (Class->isInterface() && (!RD->isInterfaceLike() || KnownBase->getAccessSpecifier() != AS_public)) {\n          // ...\n          Diag(KnownBase->getBeginLoc(), diag::err_invalid_base_in_interface) << getRecordDiagFromTagKind(RD->getTagKind()) << RD << RD->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/ms-iunknown-inline-def.cpp"]={"clang/test/SemaCXX/ms-iunknown-inline-def.cpp:8:24: error: interface type cannot inherit from struct \'IUnknown\'"}
		}
	},
	["err_invalid_branch_protection_spec"]={
		[b]={{nil,F,"err_invalid_branch_protection_spec"}},
		[i]={{nil,F,"invalid or misplaced branch protection specification \'%0\'"}},
		[j]={{nil,F,"invalid or misplaced branch protection specification \'A\'"}},
		[h]=k,
		[c]="invalid or misplaced branch protection specification \'(.*?)\'",
		[f]=a,
		[e]={{nil,F,m}},
		[g]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
		[d]={{u,3459,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (!Context.getTargetInfo().validateBranchProtection(ParsedAttrs.BranchProtection, ParsedAttrs.CPU, BPI, DiagMsg)) {\n    // ...\n    return Diag(LiteralLoc, diag::err_invalid_branch_protection_spec) << DiagMsg;"}},
		[l]={
			["clang/test/Sema/arm-branch-protection-attr-err.c"]={"clang/test/Sema/arm-branch-protection-attr-err.c:3:23: error: invalid or misplaced branch protection specification \'foo\'","clang/test/Sema/arm-branch-protection-attr-err.c:7:23: error: invalid or misplaced branch protection specification \'<empty>\'","clang/test/Sema/arm-branch-protection-attr-err.c:11:23: error: invalid or misplaced branch protection specification \'<empty>\'","clang/test/Sema/arm-branch-protection-attr-err.c:15:23: error: invalid or misplaced branch protection specification \'bkey\'","clang/test/Sema/arm-branch-protection-attr-err.c:23:23: error: invalid or misplaced branch protection specification \'leaf\'","clang/test/Sema/arm-branch-protection-attr-err.c:27:23: error: invalid or misplaced branch protection specification \'leaf\'","clang/test/Sema/arm-branch-protection-attr-err.c:31:23: error: invalid or misplaced branch protection specification \'leaf\'"}
		}
	},
	["err_invalid_char_raw_delim"]={
		[b]="err_invalid_char_raw_delim",
		[i]="invalid character \'%0\' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string",
		[j]="invalid character \'A\' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string",
		[h]=k,
		[c]="invalid character \'(.*?)\' character in raw string delimiter; use PREFIX\\( \\)PREFIX to delimit raw string",
		[f]=a,
		[e]=O,
		[g]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals.\n\nllvm-svn: 137298"},
		[d]={{"clang/lib/Lex/Lexer.cpp",2160,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      // ...\n      if (PrefixLen == 16) {\n      // ...\n      } else {\n        Diag(PrefixEnd, diag::err_invalid_char_raw_delim) << StringRef(PrefixEnd, 1);"}}
	},
	["err_invalid_character_to_charify"]={
		[b]="err_invalid_character_to_charify",
		[i]="invalid argument to convert to character",
		[j]="invalid argument to convert to character",
		[h]=k,
		[c]="invalid argument to convert to character",
		[f]=a,
		[e]=O,
		[g]={S,1236199783,R,Q},
		[d]={{"clang/lib/Lex/MacroArgs.cpp",300,"/// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of\n/// tokens into the literal string token that should be produced by the C #\n/// preprocessor operator.  If Charify is true, then it should be turned into\n/// a character literal for the Microsoft charize (#@) extension.\n///\nToken MacroArgs::StringifyArgument(const Token *ArgToks, Preprocessor &PP, bool Charify, SourceLocation ExpansionLocStart, SourceLocation ExpansionLocEnd) {\n  // ...\n  // If this is the charify operation and the result is not a legal character\n  // constant, diagnose it.\n  if (Charify) {\n    // ...\n    if (isBad) {\n      PP.Diag(ArgTokStart[0], diag::err_invalid_character_to_charify);"}}
	},
	["err_invalid_character_udl"]={
		[b]="err_invalid_character_udl",
		[i]="character literal with user-defined suffix cannot be used here",
		[j]="character literal with user-defined suffix cannot be used here",
		[h]=k,
		[c]="character literal with user\\-defined suffix cannot be used here",
		[f]=a,
		[e]=O,
		[g]={"bcc22fc4e1b2",1331280036,"Support for raw and template forms of numeric user-defined literals,","Support for raw and template forms of numeric user-defined literals,\nand lots of tidying up.\n\nllvm-svn: 152392"},
		[d]={{q,3772,"ExprResult Sema::ActOnCharacterConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  // Make sure we\'re allowed user-defined literals here.\n  if (!UDLScope)\n    return ExprError(Diag(UDSuffixLoc, diag::err_invalid_character_udl));"}}
	},
	["err_invalid_collection_element"]={
		[b]="err_invalid_collection_element",
		[i]="collection element of type %0 is not an Objective-C object",
		[j]="collection element of type A is not an Objective-C object",
		[h]=k,
		[c]="collection element of type (.*?) is not an Objective\\-C object",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{bb,468,"/// 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 (!Recovered) {\n      S.Diag(Element->getBeginLoc(), diag::err_invalid_collection_element) << Element->getType();"}},
		[l]={
			["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:108:43: error: collection element of type \'int\' is not an Objective-C object"}
		}
	},
	["err_invalid_complex_spec"]={
		[b]="err_invalid_complex_spec",
		[i]="\'_Complex %0\' is invalid",
		[j]="\'_Complex A\' is invalid",
		[h]=k,
		[c]="\'_Complex (.*?)\' is invalid",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{D,1321,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // TODO: if the implementation does not implement _Complex or _Imaginary,\n  // disallow their use.  Need information about the backend.\n  if (TypeSpecComplex != TSC_unspecified) {\n    if (TypeSpecType == TST_unspecified) {\n    // ...\n    } else if (TypeSpecType == TST_int || TypeSpecType == TST_char || TypeSpecType == TST_bitint) {\n    // ...\n    } else if (TypeSpecType != TST_float && TypeSpecType != TST_double && TypeSpecType != TST_float128 && TypeSpecType != TST_float16 && TypeSpecType != TST_ibm128) {\n      // ...\n      S.Diag(TSCLoc, diag::err_invalid_complex_spec) << getSpecifierName((TST)TypeSpecType, Policy);"},{K,8377,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  // ...\n  // We don\'t allow _Complex _Float16 nor _Complex __fp16 as type specifiers;\n  // don\'t allow this builtin to form those types either.\n  // FIXME: Should we allow these types?\n  if (Real->getType()->isFloat16Type())\n    return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) << \"_Float16\";"},{K,8380,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  // ...\n  if (Real->getType()->isHalfType())\n    return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) << \"half\";"}},
		[l]={
			["clang/test/Sema/fp16-sema.c"]={"clang/test/Sema/fp16-sema.c:34:3: error: \'_Complex half\' is invalid","clang/test/Sema/fp16-sema.c:36:7: error: \'_Complex half\' is invalid"}
		}
	},
	["err_invalid_consteval_call"]={
		[b]={{nil,o,"err_invalid_consteval_call"}},
		[i]="call to %select{immediate|consteval}1 function %q0 is not a constant expression",
		[j]={{nil,nil,{"call to ",{"immediate","consteval"}," function A is not a constant expression"}},{n,o,"call to consteval function A is not a constant expression"}},
		[h]=k,
		[c]="call to (?:immediate|consteval) function (.*?) is not a constant expression",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
		[d]={{q,18266,"static void EvaluateAndDiagnoseImmediateInvocation(Sema &SemaRef, Sema::ImmediateInvocationCandidate Candidate) {\n  // ...\n  if (!Result || !Notes.empty()) {\n    // ...\n    SemaRef.Diag(CE->getBeginLoc(), diag::err_invalid_consteval_call) << FD << FD->isConsteval();"}},
		[l]={
			["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:95:12: error: call to consteval function \'f\' is not a constant expression"}
		}
	},
	["err_invalid_consteval_decl_kind"]={
		[b]={{nil,o,"err_invalid_consteval_decl_kind"}},
		[i]={{nil,o,"%0 cannot be declared consteval"}},
		[j]={{nil,o,"A cannot be declared consteval"}},
		[h]=k,
		[c]="(.*?) cannot be declared consteval",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
		[d]={{p,9978,"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++20 [dcl.constexpr]p2: An allocation function, or a\n      // deallocation function shall not be declared with the consteval\n      // specifier.\n      if (ConstexprKind == ConstexprSpecKind::Consteval && (NewFD->getOverloadedOperator() == OO_New || NewFD->getOverloadedOperator() == OO_Array_New || NewFD->getOverloadedOperator() == OO_Delete || NewFD->getOverloadedOperator() == OO_Array_Delete)) {\n        Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_consteval_decl_kind) << NewFD;"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:110:3: error: \'operator new\' cannot be declared consteval","clang/test/SemaCXX/cxx2a-consteval.cpp:112:3: error: \'operator new[]\' cannot be declared consteval","clang/test/SemaCXX/cxx2a-consteval.cpp:114:3: error: \'operator delete\' cannot be declared consteval","clang/test/SemaCXX/cxx2a-consteval.cpp:116:3: error: \'operator delete[]\' cannot be declared consteval"}
		}
	},
	["err_invalid_consteval_take_address"]={
		[b]={{nil,o,"err_invalid_consteval_take_address"}},
		[i]="cannot take address of %select{immediate|consteval}2 %select{function|call operator of}1 %0 outside of an immediate invocation",
		[j]={{nil,nil,{"cannot take address of ",{"immediate","consteval"},jb,{"function","call operator of"}," A outside of an immediate invocation"}},{n,o,"cannot take address of consteval function A outside of an immediate invocation"}},
		[h]=k,
		[c]="cannot take address of (?:immediate|consteval) (?:function|call operator of) (.*?) outside of an immediate invocation",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
		[d]={{q,18446,"static void HandleImmediateInvocations(Sema &SemaRef, Sema::ExpressionEvaluationContextRecord &Rec) {\n  // ...\n  for (auto *DR : Rec.ReferenceToConsteval) {\n    // ...\n    if (!Rec.InImmediateEscalatingFunctionContext || (SemaRef.inTemplateInstantiation() && !ImmediateEscalating)) {\n      SemaRef.Diag(DR->getBeginLoc(), diag::err_invalid_consteval_take_address) << ND << isa<CXXRecordDecl>(ND) << FD->isConsteval();"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:79:19: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:81:37: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:84:10: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:87:12: error: cannot take address of consteval function \'f1\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:89:12: error: cannot take address of consteval call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:16:25)\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:97:13: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:101:11: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:168:13: error: cannot take address of consteval function \'operator\"\"_test\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:253:11: error: cannot take address of immediate call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:253:11)\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:593:28: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:586:25: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:579:19: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:600:33: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:730:24: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:734:15: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:1035:23: error: cannot take address of consteval call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:1035:23)\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:1043:28: error: cannot take address of consteval call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:1043:28)\' outside of an immediate invocation"}
		}
	},
	["err_invalid_constexpr"]={
		[b]="err_invalid_constexpr",
		[i]={{nil,F,"%select{function parameter|typedef}0 cannot be %select{<ERROR>|constexpr|consteval|constinit}1"},{r,r,"%select{function parameter|typedef|non-static data member}0 cannot be %select{constexpr|consteval}1"},{V,nil,"%select{function parameter|typedef|non-static data member}0 cannot be constexpr"}},
		[j]={{nil,F,{{"function parameter","typedef"}," cannot be ",{"constexpr","consteval","constinit"}}},{r,r,{{"function parameter","typedef","non-static data member"}," cannot be ",{"constexpr","consteval"}}},{V,nil,{{"function parameter","typedef","non-static data member"}," cannot be constexpr"}}},
		[h]=k,
		[c]="(?:function parameter|typedef) cannot be (?:constexpr|consteval|constinit)",
		[f]=a,
		[e]=m,
		[g]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
		[d]={{p,6675,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // ...\n  if (D.getDeclSpec().hasConstexprSpecifier())\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr) << 1 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{p,14758,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DS.hasConstexprSpecifier())\n    Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr) << 0 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"}},
		[l]={
			["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:29:16: error: function parameter cannot be constexpr"}
		}
	},
	["err_invalid_constexpr_member"]={
		[b]="err_invalid_constexpr_member",
		[i]="non-static data member cannot be constexpr%select{; did you intend to make it %select{const|static}0?|}1",
		[j]={{nil,nil,{"non-static data member cannot be constexpr",{{"; did you intend to make it ",{lb,"static"},"?"},a}}}},
		[h]=k,
		[c]="non\\-static data member cannot be constexpr(?:; did you intend to make it (?:const|static)\\?|)",
		[f]=a,
		[e]=m,
		[g]={"35506f82025c",1359508938,"Provide a fixit for constexpr non-static data members.","Provide a fixit for constexpr non-static data members.\n\nIf the member has an initializer, assume it was probably intended to be static\nand suggest/recover with that.\n\nIf the member doesn\'t have an initializer, assume it was probably intended to\nbe const instead of constexpr and suggest that.\n\n(if the attempt to apply these changes fails, don\'t make any suggestion &\nproduce the same diagnostic experience as before. The only case where this can\ncome up that I know of is with a mutable constexpr with an initializer, since\nmutable is incompatible with static (but it\'s already incompatible with\nconst anyway))\n\nllvm-svn: 173873"},
		[d]={{t,3506,"/// 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 (DS.hasConstexprSpecifier() && isInstField) {\n    SemaDiagnosticBuilder B = Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);"}},
		[l]={
			["clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:158:26: error: non-static data member cannot be constexpr; did you intend to make it const?","clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:160:26: error: non-static data member cannot be constexpr; did you intend to make it static?","clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:163:26: error: non-static data member cannot be constexpr; did you intend to make it const?","clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:165:26: error: non-static data member cannot be constexpr; did you intend to make it static?"}
		}
	},
	["err_invalid_constexpr_var_decl"]={
		[b]="err_invalid_constexpr_var_decl",
		[i]="constexpr variable declaration must be a definition",
		[j]="constexpr variable declaration must be a definition",
		[h]=k,
		[c]="constexpr variable declaration must be a definition",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{p,13692,"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      // ...\n      } else {\n        Diag(Var->getLocation(), diag::err_invalid_constexpr_var_decl);"}},
		[l]={
			["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:17:37: error: constexpr variable declaration must be a definition"}
		}
	},
	["err_invalid_conversion_between_ext_vectors"]={
		[b]="err_invalid_conversion_between_ext_vectors",
		[i]="invalid conversion between ext-vector type %0 and %1",
		[j]="invalid conversion between ext-vector type A and B",
		[h]=k,
		[c]="invalid conversion between ext\\-vector type (.*?) and (.*?)",
		[f]=a,
		[e]=m,
		[g]={"c69b740df42c",1245977428,"OpenCL 1.0 support: explicit casts to ext-vector types","OpenCL 1.0 support: explicit casts to ext-vector types\n\nllvm-svn: 74247"},
		[d]={{q,8375,"ExprResult Sema::CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr, CastKind &Kind) {\n  // ...\n  // If SrcTy is a VectorType, the total size must match to explicitly cast to\n  // an ExtVectorType.\n  // In OpenCL, casts between vectors of different types are not allowed.\n  // (See OpenCL 6.2).\n  if (SrcTy->isVectorType()) {\n    if (!areLaxCompatibleVectorTypes(SrcTy, DestTy) || (getLangOpts().OpenCL && !Context.hasSameUnqualifiedType(DestTy, SrcTy))) {\n      Diag(R.getBegin(), diag::err_invalid_conversion_between_ext_vectors) << DestTy << SrcTy << R;"}},
		[l]={
			["clang/test/SemaOpenCL/vector-conv.cl"]={"clang/test/SemaOpenCL/vector-conv.cl:11:12: error: invalid conversion between ext-vector type \'int4\' (vector of 4 \'int\' values) and \'uint4\' (vector of 4 \'unsigned int\' values)","clang/test/SemaOpenCL/vector-conv.cl:13:14: error: invalid conversion between ext-vector type \'uint3\' (vector of 3 \'unsigned int\' values) and \'uint4\' (vector of 4 \'unsigned int\' values)"}
		}
	},
	["err_invalid_conversion_between_matrix_and_type"]={
		[b]={{nil,w,"err_invalid_conversion_between_matrix_and_type"}},
		[i]={{nil,w,"conversion between matrix type %0 and incompatible type %1 is not allowed"}},
		[j]={{nil,w,"conversion between matrix type A and incompatible type B is not allowed"}},
		[h]=k,
		[c]="conversion between matrix type (.*?) and incompatible type (.*?) is not allowed",
		[f]=a,
		[e]={{nil,w,m}},
		[g]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
		[d]={{q,8287,"bool Sema::CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, CastKind &Kind) {\n  if (SrcTy->isMatrixType() && DestTy->isMatrixType()) {\n  // ...\n  } else if (SrcTy->isMatrixType()) {\n    return Diag(R.getBegin(), diag::err_invalid_conversion_between_matrix_and_type) << SrcTy << DestTy << R;"},{q,8303,"bool Sema::CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, CastKind &Kind) {\n  if (SrcTy->isMatrixType() && DestTy->isMatrixType()) {\n  // ...\n  } else if (SrcTy->isMatrixType()) {\n  // ...\n  } else if (DestTy->isMatrixType()) {\n    return Diag(R.getBegin(), diag::err_invalid_conversion_between_matrix_and_type) << DestTy << SrcTy << R;"}},
		[l]={
			["clang/test/Sema/matrix-cast.c"]={"clang/test/Sema/matrix-cast.c:29:7: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'int\' is not allowed","clang/test/Sema/matrix-cast.c:31:8: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'int\' is not allowed","clang/test/Sema/matrix-cast.c:33:7: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'vec\' (vector of 1 \'int\' value) is not allowed","clang/test/Sema/matrix-cast.c:35:8: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'vec\' (vector of 1 \'int\' value) is not allowed","clang/test/Sema/matrix-cast.c:37:7: error: conversion between matrix type \'sx4x4\' (aka \'short __attribute__((matrix_type(4, 4)))\') and incompatible type \'test_struct *\' (aka \'struct test_struct *\') is not allowed","clang/test/Sema/matrix-cast.c:39:8: error: conversion between matrix type \'sx4x4\' (aka \'short __attribute__((matrix_type(4, 4)))\') and incompatible type \'test_struct *\' (aka \'struct test_struct *\') is not allowed","clang/test/Sema/matrix-cast.c:71:7: error: conversion between matrix type \'signed_int_12x12\' (aka \'int __attribute__((matrix_type(12, 12)))\') and incompatible type \'float\' is not allowed","clang/test/Sema/matrix-cast.c:73:8: error: conversion between matrix type \'signed_int_12x12\' (aka \'int __attribute__((matrix_type(12, 12)))\') and incompatible type \'float\' is not allowed"}
		}
	},
	["err_invalid_conversion_between_matrixes"]={
		[b]={{nil,w,"err_invalid_conversion_between_matrixes"}},
		[i]={{nil,w,"conversion between matrix types%diff{ $ and $|}0,1 of different size is not allowed"}},
		[j]={{nil,w,{"conversion between matrix types",{" A and B",a}," of different size is not allowed"}}},
		[h]=k,
		[c]="conversion between matrix types(?: (.*?) and (.*?)|) of different size is not allowed",
		[f]=a,
		[e]={{nil,w,m}},
		[g]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
		[d]={{q,8283,"bool Sema::CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, CastKind &Kind) {\n  if (SrcTy->isMatrixType() && DestTy->isMatrixType()) {\n    if (!areMatrixTypesOfTheSameDimension(SrcTy, DestTy)) {\n      return Diag(R.getBegin(), diag::err_invalid_conversion_between_matrixes) << DestTy << SrcTy << R;"}},
		[l]={
			["clang/test/Sema/matrix-cast.c"]={"clang/test/Sema/matrix-cast.c:24:8: error: conversion between matrix types \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and \'sx4x4\' (aka \'short __attribute__((matrix_type(4, 4)))\') of different size is not allowed","clang/test/Sema/matrix-cast.c:61:8: error: conversion between matrix types \'double_10x10\' (aka \'double __attribute__((matrix_type(10, 10)))\') and \'float2_8x8\' (aka \'float __attribute__((matrix_type(8, 8)))\') of different size is not allowed","clang/test/Sema/matrix-cast.c:68:8: error: conversion between matrix types \'unsigned_int_10x10\' (aka \'unsigned int __attribute__((matrix_type(10, 10)))\') and \'signed_int_12x12\' (aka \'int __attribute__((matrix_type(12, 12)))\') of different size is not allowed"}
		}
	},
	["err_invalid_conversion_between_vector_and_integer"]={
		[b]="err_invalid_conversion_between_vector_and_integer",
		[i]="invalid conversion between vector type %0 and integer type %1 of different size",
		[j]="invalid conversion between vector type A and integer type B of different size",
		[h]=k,
		[c]="invalid conversion between vector type (.*?) and integer type (.*?) of different size",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{"clang/lib/Sema/SemaCast.cpp",2702,"bool Sema::CheckAltivecInitFromScalar(SourceRange R, QualType VecTy, QualType SrcTy) {\n  // ...\n  if (this->getLangOpts().AltiVec && SrcCompatGCC) {\n    this->Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_integer) << VecTy << SrcTy << R;"},{q,8308,"bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, CastKind &Kind) {\n  // ...\n  if (Ty->isVectorType() || Ty->isIntegralType(Context)) {\n    if (!areLaxCompatibleVectorTypes(Ty, VectorTy))\n      return Diag(R.getBegin(), Ty->isVectorType() ? diag::err_invalid_conversion_between_vectors : diag::err_invalid_conversion_between_vector_and_integer) << VectorTy << Ty << R;"}},
		[l]={
			["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:37:9: error: invalid conversion between vector type \'int4\' (vector of 4 \'int\' values) and integer type \'int\' of different size"}
		}
	},
	["err_invalid_conversion_between_vector_and_scalar"]={
		[b]="err_invalid_conversion_between_vector_and_scalar",
		[i]="invalid conversion between vector type %0 and scalar type %1",
		[j]="invalid conversion between vector type A and scalar type B",
		[h]=k,
		[c]="invalid conversion between vector type (.*?) and scalar type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{q,8362,"bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, CastKind &Kind) {\n  // ...\n  if (Ty->isVectorType() || Ty->isIntegralType(Context)) {\n  // ...\n  } else\n    return Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_scalar) << VectorTy << Ty << R;"},{q,8418,"ExprResult Sema::CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr, CastKind &Kind) {\n  // ...\n  // All non-pointer scalars can be cast to ExtVector type.  The appropriate\n  // conversion will take place first from scalar to elt type, and then\n  // splat from elt type to vector.\n  if (SrcTy->isPointerType())\n    return Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_scalar) << DestTy << SrcTy << R;"}},
		[l]={
			["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:40:13: error: invalid conversion between vector type \'int4\' (vector of 4 \'int\' values) and scalar type \'int *\'"}
		}
	},
	["err_invalid_conversion_between_vectors"]={
		[b]="err_invalid_conversion_between_vectors",
		[i]="invalid conversion between vector type%diff{ $ and $|}0,1 of different size",
		[j]={{nil,nil,{"invalid conversion between vector type",{" A and B",a}," of different size"}}},
		[h]=k,
		[c]="invalid conversion between vector type(?: (.*?) and (.*?)|) of different size",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{q,8304,"bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, CastKind &Kind) {\n  // ...\n  if (Ty->isVectorType() || Ty->isIntegralType(Context)) {\n    if (!areLaxCompatibleVectorTypes(Ty, VectorTy))\n      return Diag(R.getBegin(), Ty->isVectorType() ? diag::err_invalid_conversion_between_vectors : diag::err_invalid_conversion_between_vector_and_integer) << VectorTy << Ty << R;"}},
		[l]={
			["clang/test/Sema/fp16vec-sema.c"]={"clang/test/Sema/fp16vec-sema.c:38:9: error: invalid conversion between vector type \'half4\' (vector of 4 \'__fp16\' values) and \'float4\' (vector of 4 \'float\' values) of different size","clang/test/Sema/fp16vec-sema.c:39:9: error: invalid conversion between vector type \'float4\' (vector of 4 \'float\' values) and \'half4\' (vector of 4 \'__fp16\' values) of different size"}
		}
	},
	["err_invalid_cpu_is"]={
		[b]={{nil,J,"err_invalid_cpu_is"}},
		[i]={{nil,J,"invalid cpu name for builtin"}},
		[j]={{nil,J,"invalid cpu name for builtin"}},
		[h]=k,
		[c]="invalid cpu name for builtin",
		[f]=a,
		[e]={{nil,J,m}},
		[g]={"699ae0c173bd",1502396910,"[X86] Implement __builtin_cpu_is","[X86] Implement __builtin_cpu_is\n\nThis patch adds support for __builtin_cpu_is. I\'ve tried to match the strings supported to the latest version of gcc.\n\nDifferential Revision: https://reviews.llvm.org/D35449\n\nllvm-svn: 310657"},
		[d]={{K,5493,"/// SemaBuiltinCpuIs - Handle __builtin_cpu_is(char *).\n/// This checks that the target supports __builtin_cpu_is and\n/// that the string argument is constant and valid.\nstatic bool SemaBuiltinCpuIs(Sema &S, const TargetInfo &TI, CallExpr *TheCall) {\n  // ...\n  if (!TI.validateCpuIs(Feature))\n    return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is) << Arg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/check-aux-builtins.c"]={"clang/test/Sema/check-aux-builtins.c:5:3: error: invalid cpu name for builtin"}
		}
	},
	["err_invalid_cpu_specific_dispatch_value"]={
		[b]={{nil,A,"err_invalid_cpu_specific_dispatch_value"}},
		[i]={{nil,A,"invalid option \'%0\' for %select{cpu_specific|cpu_dispatch}1"}},
		[j]={{nil,A,{"invalid option \'A\' for ",{"cpu_specific","cpu_dispatch"}}}},
		[h]=k,
		[c]="invalid option \'(.*?)\' for (?:cpu_specific|cpu_dispatch)",
		[f]=a,
		[e]={{nil,A,m}},
		[g]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
		[d]={{u,2109,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n    // ...\n    if (!S.Context.getTargetInfo().validateCPUSpecificCPUDispatch(CPUName)) {\n      S.Diag(CPUArg->Loc, diag::err_invalid_cpu_specific_dispatch_value) << CPUName << (AL.getKind() == ParsedAttr::AT_CPUDispatch);"}},
		[l]={
			["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:106:33: error: invalid option \'INVALID\' for cpu_specific"}
		}
	},
	["err_invalid_cpu_supports"]={
		[b]="err_invalid_cpu_supports",
		[i]="invalid cpu feature string for builtin",
		[j]="invalid cpu feature string for builtin",
		[h]=k,
		[c]="invalid cpu feature string for builtin",
		[f]=a,
		[e]=m,
		[g]={"d983270976d2",1435611605,"Add support for the x86 builtin __builtin_cpu_supports.","Add support for the x86 builtin __builtin_cpu_supports.\n\nThis matches the implementation of the gcc support for the same\nfeature, including checking the values set up by libgcc at runtime.\nThe structure looks like this:\n\n  unsigned int __cpu_vendor;\n  unsigned int __cpu_type;\n  unsigned int __cpu_subtype;\n  unsigned int __cpu_features[1];\n\nwith a set of enums to match various fields that are field out after\nparsing the output of the cpuid instruction.\nThis also adds a set of errors checking for valid input (and cpu).\n\ncompiler-rt support for this and the other builtins in this family\n(__builtin_cpu_init and __builtin_cpu_is) are forthcoming.\n\nllvm-svn: 240994"},
		[d]={{K,5473,"/// SemaBuiltinCpuSupports - Handle __builtin_cpu_supports(char *).\n/// This checks that the target supports __builtin_cpu_supports and\n/// that the string argument is constant and valid.\nstatic bool SemaBuiltinCpuSupports(Sema &S, const TargetInfo &TI, CallExpr *TheCall) {\n  // ...\n  if (!TI.validateCpuSupports(Feature))\n    return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports) << Arg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtin-cpu-supports.c"]={"clang/test/Sema/builtin-cpu-supports.c:10:7: error: invalid cpu feature string for builtin"}
		}
	},
	["err_invalid_cxx_abi"]={
		[b]={{nil,w,"err_invalid_cxx_abi"}},
		[i]={{nil,B,"invalid C++ ABI name \'%0\'"},{w,w,"Invalid C++ ABI name \'%0\'"}},
		[j]={{nil,B,"invalid C++ ABI name \'A\'"},{w,w,"Invalid C++ ABI name \'A\'"}},
		[h]=k,
		[c]="invalid C\\+\\+ ABI name \'(.*?)\'",
		[f]=a,
		[e]={{nil,w,v}},
		[g]={"683b308c07bf",1597194187,"[clang] Add -fc++-abi= flag for specifying which C++ ABI to use","[clang] Add -fc++-abi= flag for specifying which C++ ABI to use\n\nThis implements the flag proposed in RFC http://lists.llvm.org/pipermail/cfe-dev/2020-August/066437.html.\n\nThe goal is to add a way to override the default target C++ ABI through\na compiler flag. This makes it easier to test and transition between different\nC++ ABIs through compile flags rather than build flags.\n\nIn this patch:\n- Store `-fc++-abi=` in a LangOpt. This isn\'t stored in a\n  CodeGenOpt because there are instances outside of codegen where Clang\n  needs to know what the ABI is (particularly through\n  ASTContext::createCXXABI), and we should be able to override the\n  target default if the flag is provided at that point.\n- Expose the existing ABIs in TargetCXXABI as values that can be passed\n  through this flag.\n  - Create a .def file for these ABIs to make it easier to check flag\n    values.\n  - Add an error for diagnosing bad ABI flag values.\n\nDifferential Revision: https://reviews.llvm.org/D85802"},
		[d]={{jc,4022,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (!CXXABI.empty()) {\n    if (!TargetCXXABI::isABI(CXXABI)) {\n      Diags.Report(diag::err_invalid_cxx_abi) << CXXABI;"}}
	},
	["err_invalid_decl_spec_combination"]={
		[b]="err_invalid_decl_spec_combination",
		[i]="cannot combine with previous \'%0\' declaration specifier",
		[j]="cannot combine with previous \'A\' declaration specifier",
		[h]=k,
		[c]="cannot combine with previous \'(.*?)\' declaration specifier",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{D,480,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n  // ...\n  if (TNew != TPrev)\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,759,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation TagKwLoc, SourceLocation TagNameLoc, const char *&PrevSpec, unsigned &DiagID, ParsedType Rep, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,781,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, Expr *Rep, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,813,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation TagKwLoc, SourceLocation TagNameLoc, const char *&PrevSpec, unsigned &DiagID, Decl *Rep, bool Owned, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,843,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,892,"bool DeclSpec::SetTypePipe(bool isPipe, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,953,"bool DeclSpec::SetBitIntType(SourceLocation KWLoc, Expr *BitsExpr, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,1341,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // C11 6.7.1/3, C++11 [dcl.stc]p1, GNU TLS: __thread, thread_local and\n  // _Thread_local can only appear with the \'static\' and \'extern\' storage class\n  // specifiers. We also allow __private_extern__ as an extension.\n  if (ThreadStorageClassSpec != TSCS_unspecified) {\n    // ...\n    default:\n      if (S.getSourceManager().isBeforeInTranslationUnit(getThreadStorageClassSpecLoc(), getStorageClassSpecLoc()))\n        S.Diag(getStorageClassSpecLoc(), diag::err_invalid_decl_spec_combination) << DeclSpec::getSpecifierName(getThreadStorageClassSpec()) << SourceRange(getThreadStorageClassSpecLoc());"},{D,1346,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // C11 6.7.1/3, C++11 [dcl.stc]p1, GNU TLS: __thread, thread_local and\n  // _Thread_local can only appear with the \'static\' and \'extern\' storage class\n  // specifiers. We also allow __private_extern__ as an extension.\n  if (ThreadStorageClassSpec != TSCS_unspecified) {\n    // ...\n    default:\n      if (S.getSourceManager().isBeforeInTranslationUnit(getThreadStorageClassSpecLoc(), getStorageClassSpecLoc()))\n      // ...\n      else\n        S.Diag(getThreadStorageClassSpecLoc(), diag::err_invalid_decl_spec_combination) << DeclSpec::getSpecifierName(getStorageClassSpec()) << SourceRange(getStorageClassSpecLoc());"}},
		[l]={
			["clang/test/Parser/check-syntax-1.m"]={"clang/test/Parser/check-syntax-1.m:3:5: error: cannot combine with previous \'int\' declaration specifier"}
		}
	},
	["err_invalid_decl_specifier_in_nontype_parm"]={
		[b]={{nil,J,"err_invalid_decl_specifier_in_nontype_parm"}},
		[i]={{nil,J,"invalid declaration specifier in template non-type parameter"}},
		[j]={{nil,J,"invalid declaration specifier in template non-type parameter"}},
		[h]=k,
		[c]="invalid declaration specifier in template non\\-type parameter",
		[f]=a,
		[e]={{nil,J,m}},
		[g]={"a223d1c856db",1513914655,"Diagnose the various invalid decl-specifiers on nontype template parameters.","Diagnose the various invalid decl-specifiers on nontype template parameters.\n\nThe standard correctly forbids various decl-specifiers that dont make sense on non-type template parameters - such as the extern in:\n    template<extern int> struct X;\n\nThis patch implements those restrictions (in a fashion similar to the corresponding checks on function parameters within ActOnParamDeclarator).\n\nCredit goes to miyuki (Mikhail Maltsev) for drawing attention to this issue,  authoring the initial versions of this patch, and supporting the effort to re-engineer it slightly.  Thank you!\n\nFor details of how this patch evolved please see: https://reviews.llvm.org/D40705\n\nllvm-svn: 321339"},
		[d]={{kb,1514,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // ...\n  // Check that we have valid decl-specifiers specified.\n  auto CheckValidDeclSpecifiers = [this, &D] {\n    // ...\n    auto EmitDiag = [this](SourceLocation Loc) { Diag(Loc, diag::err_invalid_decl_specifier_in_nontype_parm) << FixItHint::CreateRemoval(Loc); };"}},
		[l]={
			["clang/test/CXX/temp/temp.param/p2.cpp"]={"clang/test/CXX/temp/temp.param/p2.cpp:20:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:21:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:22:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:22:17: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:23:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:24:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:25:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:26:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:27:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:28:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:29:10: error: invalid declaration specifier in template non-type parameter"}
		}
	},
	["err_invalid_declaration_in_hlsl_buffer"]={
		[b]={{nil,n,"err_invalid_declaration_in_hlsl_buffer"}},
		[i]={{nil,n,"invalid declaration inside %select{tbuffer|cbuffer}0"}},
		[j]={{nil,n,{"invalid declaration inside ",{"tbuffer","cbuffer"}}}},
		[h]=k,
		[c]="invalid declaration inside (?:tbuffer|cbuffer)",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl.\n\nThis is first part for support cbuffer/tbuffer.\n\nThe format for cbuffer/tbuffer is\nBufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... };\n\nMore details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants\n\nNew keyword \'cbuffer\' and \'tbuffer\' are added.\nNew AST node HLSLBufferDecl is added.\nBuild AST for simple cbuffer/tbuffer without attribute support.\n\nThe special thing is variables declared inside cbuffer is exposed into global scope.\nSo isTransparentContext should return true for HLSLBuffer.\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D129883"},
		[d]={{"clang/lib/Parse/ParseHLSL.cpp",38,"static bool validateDeclsInsideHLSLBuffer(Parser::DeclGroupPtrTy DG, SourceLocation BufferLoc, bool IsCBuffer, Parser &P) {\n  // ...\n  // Only allow function, variable, record decls inside HLSLBuffer.\n  for (DeclGroupRef::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {\n    // ...\n    // FIXME: support nested HLSLBuffer and namespace inside HLSLBuffer.\n    if (isa<HLSLBufferDecl, NamespaceDecl>(D)) {\n      P.Diag(D->getLocation(), diag::err_invalid_declaration_in_hlsl_buffer) << IsCBuffer;"},{"clang/lib/Parse/ParseHLSL.cpp",45,"static bool validateDeclsInsideHLSLBuffer(Parser::DeclGroupPtrTy DG, SourceLocation BufferLoc, bool IsCBuffer, Parser &P) {\n  // ...\n  // Only allow function, variable, record decls inside HLSLBuffer.\n  for (DeclGroupRef::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {\n    // ...\n    P.Diag(D->getLocation(), diag::err_invalid_declaration_in_hlsl_buffer) << IsCBuffer;"}},
		[l]={
			["clang/test/ParserHLSL/cb_error.hlsl"]={"clang/test/ParserHLSL/cb_error.hlsl:35:13: error: invalid declaration inside cbuffer","clang/test/ParserHLSL/cb_error.hlsl:41:11: error: invalid declaration inside cbuffer"}
		}
	},
	["err_invalid_declarator_global_scope"]={
		[b]="err_invalid_declarator_global_scope",
		[i]="definition or redeclaration of %0 cannot name the global scope",
		[j]="definition or redeclaration of A cannot name the global scope",
		[h]=k,
		[c]="definition or redeclaration of (.*?) cannot name the global scope",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,6194,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n      Diag(Loc, diag::err_invalid_declarator_global_scope) << Name << SS.getRange();"}},
		[l]={
			["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:160:10: error: definition or redeclaration of \'global_func\' cannot name the global scope"}
		}
	},
	["err_invalid_declarator_in_block"]={
		[b]="err_invalid_declarator_in_block",
		[i]="definition or redeclaration of %0 not allowed inside a block",
		[j]="definition or redeclaration of A not allowed inside a block",
		[h]=k,
		[c]="definition or redeclaration of (.*?) not allowed inside a block",
		[f]=a,
		[e]=m,
		[g]={"e2358c1debe9",1376344441,"Fix crash w/BlockDecl and invalid qualified decl.","Fix crash w/BlockDecl and invalid qualified decl.\n\nI\'m not really satisfied with the ad-hoc nature of\nSema::diagnoseQualifiedDeclaration, but I\'m not sure how to fix it.\n\nFixes <rdar://problem/14639501>.\n\nllvm-svn: 188208"},
		[d]={{p,6200,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n    // ...\n    else if (isa<FunctionDecl>(Cur))\n    // ...\n    else if (isa<BlockDecl>(Cur))\n      Diag(Loc, diag::err_invalid_declarator_in_block) << Name << SS.getRange();"}},
		[l]={
			["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:52:28: error: definition or redeclaration of \'Af\' not allowed inside a block"}
		}
	},
	["err_invalid_declarator_in_function"]={
		[b]="err_invalid_declarator_in_function",
		[i]="definition or redeclaration of %0 not allowed inside a function",
		[j]="definition or redeclaration of A not allowed inside a function",
		[h]=k,
		[c]="definition or redeclaration of (.*?) not allowed inside a function",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,6197,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n    // ...\n    else if (isa<FunctionDecl>(Cur))\n      Diag(Loc, diag::err_invalid_declarator_in_function) << Name << SS.getRange();"}},
		[l]={
			["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:51:11: error: definition or redeclaration of \'Af\' not allowed inside a function"}
		}
	},
	["err_invalid_declarator_scope"]={
		[b]="err_invalid_declarator_scope",
		[i]="cannot define or redeclare %0 here because namespace %1 does not enclose namespace %2",
		[j]="cannot define or redeclare A here because namespace B does not enclose namespace C",
		[h]=k,
		[c]="cannot define or redeclare (.*?) here because namespace (.*?) does not enclose namespace (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{p,6211,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n    // ...\n    else if (isa<FunctionDecl>(Cur))\n    // ...\n    else if (isa<BlockDecl>(Cur))\n    // ...\n    else if (isa<ExportDecl>(Cur)) {\n    // ...\n    } else\n      Diag(Loc, diag::err_invalid_declarator_scope) << Name << cast<NamedDecl>(Cur) << cast<NamedDecl>(DC) << SS.getRange();"}},
		[l]={
			["clang/test/SemaCXX/pr36536.cpp"]={"clang/test/SemaCXX/pr36536.cpp:17:11: error: cannot define or redeclare \'f\' here because namespace \'bar\' does not enclose namespace \'Foo\'"}
		}
	},
	["err_invalid_digit"]={
		[b]="err_invalid_digit",
		[i]="invalid digit \'%0\' in %select{decimal|octal|binary}1 constant",
		[j]={{nil,nil,{"invalid digit \'A\' in ",{"decimal","octal","binary"}," constant"}}},
		[h]=k,
		[c]="invalid digit \'(.*?)\' in (?:decimal|octal|binary) constant",
		[f]=a,
		[e]=O,
		[g]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC","Use %select to merge similar diagnostics. NFC\n\nllvm-svn: 253119"},
		[d]={{ab,1182,"/// ParseDecimalOrOctalCommon - This method is called for decimal or octal\n/// numbers. It issues an error for illegal digits, and handles floating point\n/// parsing. If it detects a floating point number, the radix is set to 10.\nvoid NumericLiteralParser::ParseDecimalOrOctalCommon(SourceLocation TokLoc) {\n  // ...\n  // If we have a hex digit other than \'e\' (which denotes a FP exponent) then\n  // the code is using an incorrect base.\n  if (isHexDigit(*s) && *s != \'e\' && *s != \'E\' && !isValidUDSuffix(LangOpts, StringRef(s, ThisTokEnd - s))) {\n    Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_invalid_digit) << StringRef(s, 1) << (radix == 8 ? 1 : 0);"},{ab,1361,"/// ParseNumberStartingWithZero - This method is called when the first character\n/// of the number is found to be a zero.  This means it is either an octal\n/// number (like \'04\') or a hex number (\'0x123a\') a binary number (\'0b1010\') or\n/// a floating point number (01239.123e4).  Eat the prefix, determining the\n/// radix etc.\nvoid NumericLiteralParser::ParseNumberStartingWithZero(SourceLocation TokLoc) {\n  // ...\n  // Handle simple binary numbers 0b01010\n  if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n    // ...\n    if (s == ThisTokEnd) {\n    // ...\n    } else if (isHexDigit(*s) && !isValidUDSuffix(LangOpts, StringRef(s, ThisTokEnd - s))) {\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_invalid_digit) << StringRef(s, 1) << 2;"}},
		[l]={
			["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:12:12: error: invalid digit \'b\' in octal constant","clang/test/Lexer/c2x_digit_separators.c:13:11: error: invalid digit \'b\' in octal constant"}
		}
	},
	["err_invalid_feature_combination"]={
		[b]={{nil,B,"err_invalid_feature_combination"}},
		[i]={{nil,B,"invalid feature combination: %0"}},
		[j]={{nil,B,"invalid feature combination: A"}},
		[h]=k,
		[c]="invalid feature combination\\: (.*?)",
		[f]=a,
		[e]={{nil,B,v}},
		[g]={"ff13189c5d0d",1624436334,"[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.","[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.\n\nHow many place you need to modify when implementing a new extension for RISC-V?\n\nAt least 7 places as I know:\n\n- Add new SubtargetFeature at RISCV.td\n- -march parser in RISCV.cpp\n- RISCVTargetInfo::initFeatureMap@RISCV.cpp for handling feature vector.\n- RISCVTargetInfo::getTargetDefines@RISCV.cpp for pre-define marco.\n- Arch string parser for ELF attribute in RISCVAsmParser.cpp\n- ELF attribute emittion in RISCVAsmParser.cpp, and make sure it\'s in\n  canonical order...\n- ELF attribute emittion in RISCVTargetStreamer.cpp, and again, must in\n  canonical order...\n\nAnd now, this patch provide an unified infrastructure for handling (almost)\neverything of RISC-V arch string.\n\nAfter this patch, you only need to update 2 places for implement an extension\nfor RISC-V:\n- Add new SubtargetFeature at RISCV.td, hmmm, it\'s hard to avoid.\n- Add new entry to RISCVSupportedExtension@RISCVISAInfo.cpp or\n  SupportedExperimentalExtensions@RISCVISAInfo.cpp .\n\nMost codes are come from existing -march parser, but with few new feature/bug\nfixes:\n- Accept version for -march, e.g. -march=rv32i2p0.\n- Reject version info with `p` but without minor version number like `rv32i2p`.\n\nDifferential Revision: https://reviews.llvm.org/D105168"},
		[d]={{"clang/lib/Basic/Targets/AMDGPU.cpp",191,"bool AMDGPUTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeatureVec) const {\n  // ...\n  if (!insertWaveSizeFeature(CPU, getTriple(), Features, ErrorMsg)) {\n    Diags.Report(diag::err_invalid_feature_combination) << ErrorMsg;"},{"clang/lib/Basic/Targets/RISCV.cpp",248,"bool RISCVTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!ParseResult) {\n    // ...\n    Diags.Report(diag::err_invalid_feature_combination) << OutputErrMsg.str();"},{"clang/lib/Basic/Targets/RISCV.cpp",314,"/// Perform initialization based on the user configured set of features.\nbool RISCVTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // ...\n  if (!ParseResult) {\n    // ...\n    Diags.Report(diag::err_invalid_feature_combination) << OutputErrMsg.str();"}}
	},
	["err_invalid_form_pointer_member_function"]={
		[b]="err_invalid_form_pointer_member_function",
		[i]="cannot create a non-constant pointer to member function",
		[j]="cannot create a non-constant pointer to member function",
		[h]=k,
		[c]="cannot create a non\\-constant pointer to member function",
		[f]=a,
		[e]=m,
		[g]={"8d08b9b408ca",1282900108,"Propagate whether an id-expression is the immediate argument of","Propagate whether an id-expression is the immediate argument of\nan \'&\' expression from the second caller of ActOnIdExpression.\n\nTeach template argument deduction that an overloaded id-expression\ndoesn\'t give a valid type for deduction purposes to a non-static\nmember function unless the expression has the correct syntactic\nform.\n\nTeach ActOnIdExpression that it shouldn\'t try to create implicit\nmember expressions for \'&function\', because this isn\'t a        \npermitted form of use for member functions.\n\nTeach CheckAddressOfOperand to diagnose these more carefully.\nSome of these cases aren\'t reachable right now because earlier\ndiagnostics interrupt them.\n\nllvm-svn: 112258"},
		[d]={{q,14881,"/// 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  if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    if (PTy->getKind() == BuiltinType::Overload) {\n      // ...\n      if (isa<UnresolvedMemberExpr>(Ovl))\n        if (!ResolveSingleFunctionTemplateSpecialization(Ovl)) {\n          Diag(OpLoc, diag::err_invalid_form_pointer_member_function) << OrigOp.get()->getSourceRange();"},{q,14906,"/// 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  if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    // ...\n    if (PTy->getKind() == BuiltinType::BoundMember) {\n      Diag(OpLoc, diag::err_invalid_form_pointer_member_function) << OrigOp.get()->getSourceRange();"},{q,14959,"/// 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    // If the underlying expression isn\'t a decl ref, give up.\n    if (!isa<DeclRefExpr>(op)) {\n      Diag(OpLoc, diag::err_invalid_form_pointer_member_function) << OrigOp.get()->getSourceRange();"},{"clang/lib/Sema/SemaOverload.cpp",12640,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainIsStaticMemberFunctionFromBoundPointer() const { S.Diag(OvlExpr->getBeginLoc(), diag::err_invalid_form_pointer_member_function) << OvlExpr->getSourceRange(); }"}},
		[l]={
			["clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp"]={"clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp:43:26: error: cannot create a non-constant pointer to member function"}
		}
	},
	["err_invalid_incomplete_type_use"]={
		[b]="err_invalid_incomplete_type_use",
		[i]="invalid use of incomplete type %0",
		[j]="invalid use of incomplete type A",
		[h]=k,
		[c]="invalid use of incomplete type (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{I,1583,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (!Ty->isVoidType() && RequireCompleteType(TyBeginLoc, ElemTy, diag::err_invalid_incomplete_type_use, FullRange))"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-self.cpp"]={"clang/test/SemaTemplate/instantiate-self.cpp:43:13: error: invalid use of incomplete type \'typename A<typename M<int>::type>::B\'"}
		}
	},
	["err_invalid_macos_32bit_deployment_target"]={
		[b]={{nil,w,"err_invalid_macos_32bit_deployment_target"}},
		[i]={{nil,w,"32-bit targets are not supported when building for Mac Catalyst"}},
		[j]={{nil,w,"32-bit targets are not supported when building for Mac Catalyst"}},
		[h]=k,
		[c]="32\\-bit targets are not supported when building for Mac Catalyst",
		[f]=a,
		[e]={{nil,w,v}},
		[g]={"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"},
		[d]={{"clang/lib/Driver/ToolChains/Darwin.cpp",2289,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n    // ...\n    // For 32-bit targets, the deployment target for iOS has to be earlier than\n    // iOS 11.\n    if (getTriple().isArch32Bit() && Major >= 11) {\n      // If the deployment target is explicitly specified, print a diagnostic.\n      if (OSTarget->isExplicitlySpecified()) {\n        if (OSTarget->getEnvironment() == MacCatalyst)\n          getDriver().Diag(diag::err_invalid_macos_32bit_deployment_target);"}}
	},
	["err_invalid_mask_type_size"]={
		[b]={{nil,V,"err_invalid_mask_type_size"}},
		[i]={{nil,V,"mask type size must be between 1-byte and 8-bytes"}},
		[j]={{nil,V,"mask type size must be between 1-byte and 8-bytes"}},
		[h]=k,
		[c]="mask type size must be between 1\\-byte and 8\\-bytes",
		[f]=a,
		[e]={{nil,V,m}},
		[g]={"d572cf496ded",1541487914,"os_log: Allow specifying mask type in format string.","os_log: Allow specifying mask type in format string.\n\nA mask type is a 1 to 8-byte string that follows the \"mask.\" annotation\nin the format string. This enables obfuscating data in the event the\nprovided privacy level isn\'t enabled.\n\nrdar://problem/36756282\n\nllvm-svn: 346211"},
		[d]={{K,10531,"void CheckPrintfHandler::handleInvalidMaskType(StringRef MaskType) { S.Diag(getLocationOfByte(MaskType.data()), diag::err_invalid_mask_type_size); }"}},
		[l]={
			["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:44:40: error: mask type size must be between 1-byte and 8-bytes","clang/test/SemaObjC/format-strings-oslog.m:45:40: error: mask type size must be between 1-byte and 8-bytes"}
		}
	},
	["err_invalid_member_in_interface"]={
		[b]="err_invalid_member_in_interface",
		[i]="%select{data member |non-public member function |static member function |user-declared constructor|user-declared destructor|operator |nested class }0%1 is not permitted within an interface type",
		[j]={{nil,nil,{{"data member ","non-public member function ","static member function ","user-declared constructor","user-declared destructor","operator ","nested class "},"B is not permitted within an interface type"}}},
		[h]=k,
		[c]="(?:data member |non\\-public member function |static member function |user\\-declared constructor|user\\-declared destructor|operator |nested class )(.*?) is not permitted within an interface type",
		[f]=a,
		[e]={{nil,V,v},{"7.1",nil,m}},
		[g]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement.","Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 164590"},
		[d]={{U,3466,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///       member-specification:\n///         member-declaration member-specification[opt]\n///         access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // ...\n  if (!ClassStack.empty()) {\n    for (const Scope *S = getCurScope(); S; S = S->getParent()) {\n      if (S->isClassScope()) {\n        // ...\n        // The Microsoft extension __interface does not permit nested classes.\n        if (getCurrentClass().IsInterface) {\n          Diag(RecordLoc, diag::err_invalid_member_in_interface) << /*ErrorType=*/6 << (isa<NamedDecl>(TagDecl) ? cast<NamedDecl>(TagDecl)->getQualifiedNameAsString() : \"(anonymous)\");"},{t,3465,"/// 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 (cast<CXXRecordDecl>(CurContext)->isInterface()) {\n    // ...\n    if (InvalidDecl) {\n      if (ShowDeclName)\n        Diag(Loc, diag::err_invalid_member_in_interface) << (InvalidDecl - 1) << Name;"},{t,3468,"/// 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 (cast<CXXRecordDecl>(CurContext)->isInterface()) {\n    // ...\n    if (InvalidDecl) {\n      if (ShowDeclName)\n      // ...\n      else\n        Diag(Loc, diag::err_invalid_member_in_interface) << (InvalidDecl - 1) << \"\";"}},
		[l]={
			["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:5:3: error: user-declared constructor is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:7:3: error: user-declared destructor is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:10:8: error: operator \'operator!\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:12:3: error: operator \'operator int\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:14:3: error: nested class I1::(unnamed struct at clang/test/SemaCXX/ms-interface.cpp:14:3) is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:27:7: error: data member \'i\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:29:14: error: static member function \'fn1\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:32:8: error: non-public member function \'fn2\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:35:8: error: non-public member function \'fn3\' is not permitted within an interface type"}
		}
	},
	["err_invalid_member_use_in_static_method"]={
		[b]="err_invalid_member_use_in_static_method",
		[i]="invalid use of member %0 in static member function",
		[j]="invalid use of member A in static member function",
		[h]=k,
		[c]="invalid use of member (.*?) in static member function",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{"clang/lib/Sema/SemaExprMember.cpp",222,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n    // ...\n    SemaRef.Diag(Loc, diag::err_invalid_member_use_in_static_method) << Range << nameInfo.getName();"}},
		[l]={
			["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:15:10: error: invalid use of member \'var\' in static member function"}
		}
	},
	["err_invalid_module_name"]={
		[b]={{nil,n,"err_invalid_module_name"}},
		[i]="%0 is an invalid name for a module",
		[j]="A is an invalid name for a module",
		[h]=k,
		[c]="(.*?) is an invalid name for a module",
		[f]=a,
		[e]={{nil,n,ac}},
		[g]={N,1625925174,M,L},
		[d]={{"clang/lib/Sema/SemaModule.cpp",165,"/// Tests whether the given identifier is reserved as a module name and\n/// diagnoses if it is. Returns true if a diagnostic is emitted and false\n/// otherwise.\nstatic bool DiagReservedModuleName(Sema &S, const IdentifierInfo *II, SourceLocation Loc) {\n  // ...\n  case Invalid:\n    return S.Diag(Loc, diag::err_invalid_module_name) << II;"}}
	},
	["err_invalid_neon_type_code"]={
		[b]="err_invalid_neon_type_code",
		[i]="incompatible constant for this __builtin_neon function",
		[j]="incompatible constant for this __builtin_neon function",
		[h]=k,
		[c]="incompatible constant for this __builtin_neon function",
		[f]=a,
		[e]=m,
		[g]={"d773fe67dd67",1276404472,"Most of NEON sema checking & fix to polynomial type detection","Most of NEON sema checking & fix to polynomial type detection\n\nllvm-svn: 105908"},
		[d]={{K,3056,"#include \"clang/Basic/arm_neon.inc\"\n  // ...\n  if (mask) {\n    // ...\n    if ((TV > 63) || (mask & (1ULL << TV)) == 0)\n      return Diag(TheCall->getBeginLoc(), diag::err_invalid_neon_type_code) << TheCall->getArg(ImmArg)->getSourceRange();"}}
	},
	["err_invalid_non_static_member_use"]={
		[b]="err_invalid_non_static_member_use",
		[i]="invalid use of non-static data member %0",
		[j]="invalid use of non-static data member A",
		[h]=k,
		[c]="invalid use of non\\-static data member (.*?)",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{q,18114,"// Handle the case where we conclude a expression which we speculatively\n// considered to be unevaluated is actually evaluated.\nclass TransformToPE : public TreeTransform<TransformToPE> {\n  // ...\n  // We need to special-case DeclRefExprs referring to FieldDecls which\n  // are not part of a member pointer formation; normal TreeTransforming\n  // doesn\'t catch this case because of the way we represent them in the AST.\n  // FIXME: This is a bit ugly; is it really the best way to handle this\n  // case?\n  //\n  // Error on DeclRefExprs referring to FieldDecls.\n  ExprResult TransformDeclRefExpr(DeclRefExpr *E) {\n    if (isa<FieldDecl>(E->getDecl()) && !SemaRef.isUnevaluatedContext())\n      return SemaRef.Diag(E->getLocation(), diag::err_invalid_non_static_member_use) << E->getDecl() << E->getSourceRange();"},{"clang/lib/Sema/SemaExprMember.cpp",231,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n  // ...\n  else if (IsField)\n    SemaRef.Diag(Loc, diag::err_invalid_non_static_member_use) << nameInfo.getName() << Range;"}},
		[l]={
			["clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:44:15: error: invalid use of non-static data member \'k\'"}
		}
	},
	["err_invalid_nsnumber_type"]={
		[b]="err_invalid_nsnumber_type",
		[i]="%0 is not a valid literal type for NSNumber",
		[j]="A is not a valid literal type for NSNumber",
		[h]=k,
		[c]="(.*?) is not a valid literal type for NSNumber",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{bb,253,"/// Retrieve the NSNumber factory method that should be used to create\n/// an Objective-C literal for the given type.\nstatic ObjCMethodDecl *getNSNumberFactoryMethod(Sema &S, SourceLocation Loc, QualType NumberType, bool isLiteral = false, SourceRange R = SourceRange()) {\n  // ...\n  if (!Kind) {\n    if (isLiteral) {\n      S.Diag(Loc, diag::err_invalid_nsnumber_type) << NumberType << R;"}},
		[l]={
			["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:57:28: error: \'long double\' is not a valid literal type for NSNumber"}
		}
	},
	["err_invalid_numeric_udl"]={
		[b]="err_invalid_numeric_udl",
		[i]="numeric literal with user-defined suffix cannot be used here",
		[j]="numeric literal with user-defined suffix cannot be used here",
		[h]=k,
		[c]="numeric literal with user\\-defined suffix cannot be used here",
		[f]=a,
		[e]=O,
		[g]={"bcc22fc4e1b2",1331280036,"Support for raw and template forms of numeric user-defined literals,","Support for raw and template forms of numeric user-defined literals,\nand lots of tidying up.\n\nllvm-svn: 152392"},
		[d]={{q,3881,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.hasUDSuffix()) {\n    // ...\n    // Make sure we\'re allowed user-defined literals here.\n    if (!UDLScope)\n      return ExprError(Diag(UDSuffixLoc, diag::err_invalid_numeric_udl));"}}
	},
	["err_invalid_operator_on_type"]={
		[b]="err_invalid_operator_on_type",
		[i]="cannot use %select{dot|arrow}0 operator on a type",
		[j]={{nil,nil,{"cannot use ",{"dot","arrow"}," operator on a type"}}},
		[h]=k,
		[c]="cannot use (?:dot|arrow) operator on a type",
		[f]=a,
		[e]=C,
		[g]={"9c67267a7bce",1359167498,"Give a more informative error message when the dot or arrow operator is used","Give a more informative error message when the dot or arrow operator is used\non a type.  Currently, it gives a generic \"expected unqualified-id\" error.\nThe new error message is \"cannot use (dot|arrow) operator on a type\".\n\nllvm-svn: 173556"},
		[d]={{P,6621,"/// ParseDirectDeclarator\n///       direct-declarator: [C99 6.7.5]\n/// [C99]   identifier\n///         \'(\' declarator \')\'\n/// [GNU]   \'(\' attributes declarator \')\'\n/// [C90]   direct-declarator \'[\' constant-expression[opt] \']\'\n/// [C99]   direct-declarator \'[\' type-qual-list[opt] assignment-expr[opt] \']\'\n/// [C99]   direct-declarator \'[\' \'static\' type-qual-list[opt] assign-expr \']\'\n/// [C99]   direct-declarator \'[\' type-qual-list \'static\' assignment-expr \']\'\n/// [C99]   direct-declarator \'[\' type-qual-list[opt] \'*\' \']\'\n/// [C++11] direct-declarator \'[\' constant-expression[opt] \']\'\n///                    attribute-specifier-seq[opt]\n///         direct-declarator \'(\' parameter-type-list \')\'\n///         direct-declarator \'(\' identifier-list[opt] \')\'\n/// [GNU]   direct-declarator \'(\' parameter-forward-declarations\n///                    parameter-type-list[opt] \')\'\n/// [C++]   direct-declarator \'(\' parameter-declaration-clause \')\'\n///                    cv-qualifier-seq[opt] exception-specification[opt]\n/// [C++11] direct-declarator \'(\' parameter-declaration-clause \')\'\n///                    attribute-specifier-seq[opt] cv-qualifier-seq[opt]\n///                    ref-qualifier[opt] exception-specification[opt]\n/// [C++]   declarator-id\n/// [C++11] declarator-id attribute-specifier-seq[opt]\n///\n///       declarator-id: [C++ 8]\n///         \'...\'[opt] id-expression\n///         \'::\'[opt] nested-name-specifier[opt] type-name\n///\n///       id-expression: [C++ 5.1]\n///         unqualified-id\n///         qualified-id\n///\n///       unqualified-id: [C++ 5.1]\n///         identifier\n///         operator-function-id\n///         conversion-function-id\n///          \'~\' class-name\n///         template-id\n///\n/// C++17 adds the following, which we also handle here:\n///\n///       simple-declaration:\n///         <decl-spec> \'[\' identifier-list \']\' brace-or-equal-initializer \';\'\n///\n/// Note, any additional constructs added here may need corresponding changes\n/// in isConstructorDeclarator.\nvoid Parser::ParseDirectDeclarator(Declarator &D) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else if (D.mayOmitIdentifier()) {\n  // ...\n  } else {\n    // ...\n    if (D.getContext() == DeclaratorContext::Member) {\n    // ...\n    } else {\n      if (Tok.getKind() == tok::TokenKind::kw_while) {\n      // ...\n      } else if (getLangOpts().CPlusPlus) {\n        if (Tok.isOneOf(tok::period, tok::arrow))\n          Diag(Tok, diag::err_invalid_operator_on_type) << Tok.is(tok::arrow);"}},
		[l]={
			["clang/test/Parser/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:255:18: error: cannot use dot operator on a type"}
		}
	},
	["err_invalid_pcs"]={
		[b]="err_invalid_pcs",
		[i]="invalid PCS type",
		[j]="invalid PCS type",
		[h]=k,
		[c]="invalid PCS type",
		[f]=a,
		[e]=m,
		[g]={"231e875b5c44",1302811609,"Implement ARM pcs attribute. Basically it\'s another way of calling convention selection (AAPCS or","Implement ARM pcs attribute. Basically it\'s another way of calling convention selection (AAPCS or\nAAPCS+VFP), similar to fastcall / stdcall / whatevercall seen on x86.\n\nIn particular, all library functions should always be AAPCS regardless of floating point ABI used.\n\nllvm-svn: 129534"},
		[d]={{u,5385,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n  // ...\n  case ParsedAttr::AT_Pcs: {\n    // ...\n    Diag(Attrs.getLoc(), diag::err_invalid_pcs);"}},
		[l]={
			["clang/test/Sema/callingconv-iamcu.c"]={"clang/test/Sema/callingconv-iamcu.c:37:20: error: invalid PCS type","clang/test/Sema/callingconv-iamcu.c:43:20: error: invalid PCS type"}
		}
	},
	["err_invalid_pixel_decl_spec_combination"]={
		[b]="err_invalid_pixel_decl_spec_combination",
		[i]="\'__pixel\' must be preceded by \'__vector\'.  \'%0\' declaration specifier not allowed here",
		[j]="\'__pixel\' must be preceded by \'__vector\'.  \'A\' declaration specifier not allowed here",
		[h]=k,
		[c]="\'__pixel\' must be preceded by \'__vector\'\\.  \'(.*?)\' declaration specifier not allowed here",
		[f]=a,
		[e]=m,
		[g]={"2233460de6ed",1265328742,"First stage of adding AltiVec support","First stage of adding AltiVec support\n\nllvm-svn: 95335"},
		[d]={{D,910,"bool DeclSpec::SetTypeAltiVecPixel(bool isAltiVecPixel, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (!TypeAltiVecVector || TypeAltiVecPixel || (TypeSpecType != TST_unspecified)) {\n    // ...\n    DiagID = diag::err_invalid_pixel_decl_spec_combination;"}}
	},
	["err_invalid_property_name"]={
		[b]="err_invalid_property_name",
		[i]="%0 is not a valid property name (accessing an object of type %1)",
		[j]="A is not a valid property name (accessing an object of type B)",
		[h]=k,
		[c]="(.*?) is not a valid property name \\(accessing an object of type (.*?)\\)",
		[f]=a,
		[e]=m,
		[g]={"d645931066c1",1303323595,"Fix a crash-on-invalid involving non-identifier names in a member","Fix a crash-on-invalid involving non-identifier names in a member\naccess expression that appears to be a property reference. Fixes\n<rdar://problem/8985943>.\n\nllvm-svn: 129865"},
		[d]={{bb,1985,"/// 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 (!MemberName.isIdentifier()) {\n    Diag(MemberLoc, diag::err_invalid_property_name) << MemberName << QualType(OPT, 0);"}},
		[l]={
			["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:49:5: error: \'operator+\' is not a valid property name (accessing an object of type \'B *\')"}
		}
	},
	["err_invalid_protocol_qualifiers"]={
		[b]="err_invalid_protocol_qualifiers",
		[i]="invalid protocol qualifiers on non-ObjC type",
		[j]="invalid protocol qualifiers on non-ObjC type",
		[h]=k,
		[c]="invalid protocol qualifiers on non\\-ObjC type",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,1056,"QualType Sema::BuildObjCTypeParamType(const ObjCTypeParamDecl *Decl, SourceLocation ProtocolLAngleLoc, ArrayRef<ObjCProtocolDecl *> Protocols, ArrayRef<SourceLocation> ProtocolLocs, SourceLocation ProtocolRAngleLoc, bool FailOnError) {\n  // ...\n  if (!Protocols.empty()) {\n    // ...\n    if (HasError) {\n      Diag(SourceLocation(), diag::err_invalid_protocol_qualifiers) << SourceRange(ProtocolLAngleLoc, ProtocolRAngleLoc);"},{G,1088,"QualType Sema::BuildObjCObjectType(QualType BaseType, SourceLocation Loc, SourceLocation TypeArgsLAngleLoc, ArrayRef<TypeSourceInfo *> TypeArgs, SourceLocation TypeArgsRAngleLoc, SourceLocation ProtocolLAngleLoc, ArrayRef<ObjCProtocolDecl *> Protocols, ArrayRef<SourceLocation> ProtocolLocs, SourceLocation ProtocolRAngleLoc, bool FailOnError, bool Rebuilding) {\n  // ...\n  if (!Protocols.empty()) {\n    // ...\n    if (HasError) {\n      Diag(Loc, diag::err_invalid_protocol_qualifiers) << SourceRange(ProtocolLAngleLoc, ProtocolRAngleLoc);"}},
		[l]={
			["clang/test/SemaObjC/protocol-archane.m"]={"clang/test/SemaObjC/protocol-archane.m:30:1: error: invalid protocol qualifiers on non-ObjC type"}
		}
	},
	["err_invalid_qualified_constructor"]={
		[b]="err_invalid_qualified_constructor",
		[i]="\'%0\' qualifier is not allowed on a constructor",
		[j]="\'A\' qualifier is not allowed on a constructor",
		[h]=k,
		[c]="\'(.*?)\' qualifier is not allowed on a constructor",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{t,10741,"/// 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  checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_constructor);"}},
		[l]={
			["clang/test/SemaCXX/constructor.cpp"]={"clang/test/SemaCXX/constructor.cpp:16:13: error: \'const\' qualifier is not allowed on a constructor"}
		}
	},
	["err_invalid_qualified_destructor"]={
		[b]="err_invalid_qualified_destructor",
		[i]="\'%0\' qualifier is not allowed on a destructor",
		[j]="\'A\' qualifier is not allowed on a destructor",
		[h]=k,
		[c]="\'(.*?)\' qualifier is not allowed on a destructor",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{t,10918,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor 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 declarator to invalid.  Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_destructor);"}}
	},
	["err_invalid_qualified_function_type"]={
		[b]="err_invalid_qualified_function_type",
		[i]="%select{static |non-}0member function %select{of type %2 |}1cannot have \'%3\' qualifier",
		[j]={{nil,E,{{"non-member function","static member function","deduction guide"},jb,{"of type C ",a},"cannot have \'D\' qualifier"}},{nil,nil,{{"static ","non-"},"member function ",{"of type C ",a},"cannot have \'D\' qualifier"}}},
		[h]=k,
		[c]="(?:non\\-member function|static member function|deduction guide) (?:of type (.*?) |)cannot have \'(.*?)\' qualifier",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{G,5852,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  if (LangOpts.CPlusPlus && T->isFunctionType()) {\n    // ...\n    // C++11 [dcl.fct]p6 (w/DR1417):\n    // An attempt to specify a function type with a cv-qualifier-seq or a\n    // ref-qualifier (including by typedef-name) is ill-formed unless it is:\n    //  - the function type for a non-static member function,\n    //  - the function type to which a pointer to member refers,\n    //  - the top-level function type of a function typedef declaration or\n    //    alias-declaration,\n    //  - the type-id in the default argument of a type-parameter, or\n    //  - the type-id of a template-argument for a type-parameter\n    //\n    // FIXME: Checking this here is insufficient. We accept-invalid on:\n    //\n    //   template<typename T> struct S { void f(T); };\n    //   S<int() const> s;\n    //\n    // ... for instance.\n    if (IsQualifiedFunction && !(Kind == Member && D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static) && !IsTypedefName && D.getContext() != DeclaratorContext::TemplateArg && D.getContext() != DeclaratorContext::TemplateTypeArg) {\n      // ...\n      S.Diag(Loc, diag::err_invalid_qualified_function_type) << Kind << D.isFunctionDeclarator() << T << getFunctionQualifiersAsString(FnTy) << FixItHint::CreateRemoval(RemovalRange);"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:5:10: error: non-member function cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:6:1: error: non-member function of type \'F\' (aka \'void () const\') cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:10:19: error: non-member function cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:11:19: error: static member function cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:13:3: error: non-member function of type \'F\' (aka \'void () const\') cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:14:3: error: static member function of type \'F\' (aka \'void () const\') cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:19:21: error: non-member function cannot have \'const\' qualifier"}
		}
	},
	["err_invalid_receiver_class_message"]={
		[b]="err_invalid_receiver_class_message",
		[i]="receiver type %0 is not an Objective-C class",
		[j]="receiver type A is not an Objective-C class",
		[h]=k,
		[c]="receiver type (.*?) is not an Objective\\-C class",
		[f]=a,
		[e]=m,
		[g]={"0c78ad96653c",1271879840,"Rework the Parser-Sema interaction for Objective-C message","Rework the Parser-Sema interaction for Objective-C message\nsends. Major changes include:\n\n  - Expanded the interface from two actions (ActOnInstanceMessage,\n    ActOnClassMessage), where ActOnClassMessage also handled sends to\n    \"super\" by checking whether the identifier was \"super\", to three\n    actions (ActOnInstanceMessage, ActOnClassMessage,\n    ActOnSuperMessage). Code completion has the same changes.\n  - The parser now resolves the type to which we are sending a class\n    message, so ActOnClassMessage now accepts a TypeTy* (rather than\n    an IdentifierInfo *). This opens the door to more interesting\n    types (for Objective-C++ support).\n  - Split ActOnInstanceMessage and ActOnClassMessage into parser\n    action functions (with their original names) and semantic\n    functions (BuildInstanceMessage and BuildClassMessage,\n    respectively). At present, this split is onyl used by\n    ActOnSuperMessage, which decides which kind of super message it\n    has and forwards to the appropriate Build*Message. In the future,\n    Build*Message will be used by template instantiation.\n  - Use getObjCMessageKind() within the disambiguation of Objective-C\n    message sends vs. array designators.\n\nTwo notes about substandard bits in this patch:\n  - There is some redundancy in the code in ParseObjCMessageExpr and\n  ParseInitializerWithPotentialDesignator; this will be addressed\n  shortly by centralizing the mapping from identifiers to type names\n  for the message receiver.\n  - There is some #if 0\'d code that won\'t likely ever be used---it\n  handles the use of \'super\' in methods whose class does not have a\n  superclass---but could be used to model GCC\'s behavior more\n  closely. This code will die in my next check-in, but I want it in\n  Subversion.\n\nllvm-svn: 102021"},
		[d]={{bb,2648,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!ClassType || !(Class = ClassType->getInterface())) {\n    Diag(Loc, diag::err_invalid_receiver_class_message) << ReceiverType;"}},
		[l]={
			["clang/test/SemaObjC/invalid-receiver.m"]={"clang/test/SemaObjC/invalid-receiver.m:8:4: error: receiver type \'NotAClass\' (aka \'struct NotAClass\') is not an Objective-C class"}
		}
	},
	["err_invalid_receiver_to_message_super"]={
		[b]="err_invalid_receiver_to_message_super",
		[i]="\'super\' is only valid in a method body",
		[j]="\'super\' is only valid in a method body",
		[h]=k,
		[c]="\'super\' is only valid in a method body",
		[f]=a,
		[e]=m,
		[g]={"a36ec4243bea",1270974494,"fix PR6811 by not parsing \'super\' as a magic expression in","fix PR6811 by not parsing \'super\' as a magic expression in\nLookupInObjCMethod.  Doing so allows all sorts of invalid code\nto slip through to codegen.  This patch does not change the \nAST representation of super, though that would now be a natural\nthing to do since it can only be in the receiver position and\nin the base of a ObjCPropertyRefExpr.\n\nThere are still several ugly areas handling super in the parser,\nbut this is definitely a step in the right direction.\n\nllvm-svn: 100959"},
		[d]={{bb,2391,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (!Method) {\n    Diag(SuperLoc, diag::err_invalid_receiver_to_message_super);"}}
	},
	["err_invalid_reference_qualifier_application"]={
		[b]="err_invalid_reference_qualifier_application",
		[i]="\'%0\' qualifier may not be applied to a reference",
		[j]="\'A\' qualifier may not be applied to a reference",
		[h]=k,
		[c]="\'(.*?)\' qualifier may not be applied to a reference",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{P,6286,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///       declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]     pointer[opt] direct-declarator\n/// [C++]   direct-declarator\n/// [C++]   ptr-operator declarator\n///\n///       pointer: [C99 6.7.5]\n///         \'*\' type-qualifier-list[opt]\n///         \'*\' type-qualifier-list[opt] pointer\n///\n///       ptr-operator:\n///         \'*\' cv-qualifier-seq[opt]\n///         \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]   \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///         \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    // C++ 8.3.2p1: cv-qualified references are ill-formed except when the\n    // cv-qualifiers are introduced through the use of a typedef or of a\n    // template type argument, in which case the cv-qualifiers are ignored.\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      if (DS.getTypeQualifiers() & DeclSpec::TQ_const)\n        Diag(DS.getConstSpecLoc(), diag::err_invalid_reference_qualifier_application) << \"const\";"},{P,6289,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///       declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]     pointer[opt] direct-declarator\n/// [C++]   direct-declarator\n/// [C++]   ptr-operator declarator\n///\n///       pointer: [C99 6.7.5]\n///         \'*\' type-qualifier-list[opt]\n///         \'*\' type-qualifier-list[opt] pointer\n///\n///       ptr-operator:\n///         \'*\' cv-qualifier-seq[opt]\n///         \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]   \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///         \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    // C++ 8.3.2p1: cv-qualified references are ill-formed except when the\n    // cv-qualifiers are introduced through the use of a typedef or of a\n    // template type argument, in which case the cv-qualifiers are ignored.\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      // ...\n      if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)\n        Diag(DS.getVolatileSpecLoc(), diag::err_invalid_reference_qualifier_application) << \"volatile\";"},{P,6293,"/// ParseDeclaratorInternal - Parse a C or C++ declarator. The direct-declarator\n/// is parsed by the function passed to it. Pass null, and the direct-declarator\n/// isn\'t parsed at all, making this function effectively parse the C++\n/// ptr-operator production.\n///\n/// If the grammar of this construct is extended, matching changes must also be\n/// made to TryParseDeclarator and MightBeDeclarator, and possibly to\n/// isConstructorDeclarator.\n///\n///       declarator: [C99 6.7.5] [C++ 8p4, dcl.decl]\n/// [C]     pointer[opt] direct-declarator\n/// [C++]   direct-declarator\n/// [C++]   ptr-operator declarator\n///\n///       pointer: [C99 6.7.5]\n///         \'*\' type-qualifier-list[opt]\n///         \'*\' type-qualifier-list[opt] pointer\n///\n///       ptr-operator:\n///         \'*\' cv-qualifier-seq[opt]\n///         \'&\'\n/// [C++0x] \'&&\'\n/// [GNU]   \'&\' restrict[opt] attributes[opt]\n/// [GNU?]  \'&&\' restrict[opt] attributes[opt]\n///         \'::\'[opt] nested-name-specifier \'*\' cv-qualifier-seq[opt]\nvoid Parser::ParseDeclaratorInternal(Declarator &D, DirectDeclParseFunction DirectDeclParser) {\n  // ...\n  if (Kind == tok::star || Kind == tok::caret) {\n  // ...\n  } else {\n    // ...\n    // C++ 8.3.2p1: cv-qualified references are ill-formed except when the\n    // cv-qualifiers are introduced through the use of a typedef or of a\n    // template type argument, in which case the cv-qualifiers are ignored.\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      // ...\n      // \'restrict\' is permitted as an extension.\n      if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic)\n        Diag(DS.getAtomicSpecLoc(), diag::err_invalid_reference_qualifier_application) << \"_Atomic\";"}},
		[l]={
			["clang/test/SemaCXX/atomic-type.cpp"]={"clang/test/SemaCXX/atomic-type.cpp:56:14: error: \'_Atomic\' qualifier may not be applied to a reference"}
		}
	},
	["err_invalid_saturation_spec"]={
		[b]={{nil,A,"err_invalid_saturation_spec"}},
		[i]={{nil,A,"\'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'%0\'"}},
		[j]={{nil,A,"\'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'A\'"}},
		[h]=k,
		[c]="\'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'(.*?)\'",
		[f]=a,
		[e]={{nil,A,m}},
		[g]={"ab80f3c8b71e",1528988031,"[Fixed Point Arithmetic] Addition of the remaining fixed point types and their saturated equivalents","[Fixed Point Arithmetic] Addition of the remaining fixed point types and their saturated equivalents\n\nThis diff includes changes for the remaining _Fract and _Sat fixed point types.\n\n```\nsigned short _Fract s_short_fract;\nsigned _Fract s_fract;\nsigned long _Fract s_long_fract;\nunsigned short _Fract u_short_fract;\nunsigned _Fract u_fract;\nunsigned long _Fract u_long_fract;\n\n// Aliased fixed point types\nshort _Accum short_accum;\n_Accum accum;\nlong _Accum long_accum;\nshort _Fract short_fract;\n_Fract fract;\nlong _Fract long_fract;\n\n// Saturated fixed point types\n_Sat signed short _Accum sat_s_short_accum;\n_Sat signed _Accum sat_s_accum;\n_Sat signed long _Accum sat_s_long_accum;\n_Sat unsigned short _Accum sat_u_short_accum;\n_Sat unsigned _Accum sat_u_accum;\n_Sat unsigned long _Accum sat_u_long_accum;\n_Sat signed short _Fract sat_s_short_fract;\n_Sat signed _Fract sat_s_fract;\n_Sat signed long _Fract sat_s_long_fract;\n_Sat unsigned short _Fract sat_u_short_fract;\n_Sat unsigned _Fract sat_u_fract;\n_Sat unsigned long _Fract sat_u_long_fract;\n\n// Aliased saturated fixed point types\n_Sat short _Accum sat_short_accum;\n_Sat _Accum sat_accum;\n_Sat long _Accum sat_long_accum;\n_Sat short _Fract sat_short_fract;\n_Sat _Fract sat_fract;\n_Sat long _Fract sat_long_fract;\n```\n\nThis diff only allows for declaration of these fixed point types. Assignment and other operations done on fixed point types according to http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1169.pdf will be added in future patches.\n\nDifferential Revision: https://reviews.llvm.org/D46911\n\nllvm-svn: 334718"},
		[d]={{G,1783,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // Only fixed point types can be saturated\n  if (DS.isTypeSpecSat() && !IsFixedPointType)\n    S.Diag(DS.getTypeSpecSatLoc(), diag::err_invalid_saturation_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy());"}},
		[l]={
			["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:74:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'float\'","clang/test/Frontend/fixed_point_errors.c:75:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'double\'","clang/test/Frontend/fixed_point_errors.c:76:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'_Bool\'","clang/test/Frontend/fixed_point_errors.c:77:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'char\'","clang/test/Frontend/fixed_point_errors.c:78:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'int\'","clang/test/Frontend/fixed_point_errors.c:132:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:133:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:134:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:135:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:136:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:137:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'"}
		}
	},
	["err_invalid_sign_spec"]={
		[b]="err_invalid_sign_spec",
		[i]="\'%0\' cannot be signed or unsigned",
		[j]="\'A\' cannot be signed or unsigned",
		[h]=k,
		[c]="\'(.*?)\' cannot be signed or unsigned",
		[f]=a,
		[e]=m,
		[g]={S,1236199783,R,Q},
		[d]={{D,1264,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // signed/unsigned are only valid with int/char/wchar_t/_Accum.\n  if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) {\n    if (TypeSpecType == TST_unspecified)\n    // ...\n    else if (TypeSpecType != TST_int && TypeSpecType != TST_int128 && TypeSpecType != TST_char && TypeSpecType != TST_wchar && !IsFixedPointType && TypeSpecType != TST_bitint) {\n      S.Diag(TSSLoc, diag::err_invalid_sign_spec) << getSpecifierName((TST)TypeSpecType, Policy);"}},
		[l]={
			["clang/test/Sema/pr9812.c"]={"clang/test/Sema/pr9812.c:6:10: error: \'bool\' cannot be signed or unsigned","clang/test/Sema/pr9812.c:16:10: error: \'type-name\' cannot be signed or unsigned","clang/test/Sema/pr9812.c:17:11: error: \'_Bool\' cannot be signed or unsigned"}
		}
	},
	["err_invalid_storage_class_in_func_decl"]={
		[b]="err_invalid_storage_class_in_func_decl",
		[i]="invalid storage class specifier in function declarator",
		[j]="invalid storage class specifier in function declarator",
		[h]=k,
		[c]="invalid storage class specifier in function declarator",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{cb,1531,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // C99 6.9.1p6: Declarations shall contain no storage-class specifiers other\n    // than register.\n    if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && DS.getStorageClassSpec() != DeclSpec::SCS_register) {\n      Diag(DS.getStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl);"},{cb,1536,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    if (DS.getThreadStorageClassSpec() != DeclSpec::TSCS_unspecified) {\n      Diag(DS.getThreadStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl);"},{p,14747,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n  // ...\n  } else if (getLangOpts().CPlusPlus && DS.getStorageClassSpec() == DeclSpec::SCS_auto) {\n  // ...\n  } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {\n    Diag(DS.getStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl);"}},
		[l]={
			["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:29:26: error: invalid storage class specifier in function declarator"}
		}
	},
	["err_invalid_string_udl"]={
		[b]="err_invalid_string_udl",
		[i]="string literal with user-defined suffix cannot be used here",
		[j]="string literal with user-defined suffix cannot be used here",
		[h]=k,
		[c]="string literal with user\\-defined suffix cannot be used here",
		[f]=a,
		[e]=O,
		[g]={"d67aea28f6cb",1331004107,"User-defined literals: reject string and character UDLs in all places where the","User-defined literals: reject string and character UDLs in all places where the\ngrammar requires a string-literal and not a user-defined-string-literal. The\ntwo constructs are still represented by the same TokenKind, in order to prevent\na combinatorial explosion of different kinds of token. A flag on Token tracks\nwhether a ud-suffix is present, in order to prevent clients from needing to look\nat the token\'s spelling.\n\nllvm-svn: 152098"},
		[d]={{"clang/lib/Lex/ModuleMap.cpp",1656,"retry:\n  // ...\n  case tok::string_literal: {\n    if (LToken.hasUDSuffix()) {\n      Diags.Report(LToken.getLocation(), diag::err_invalid_string_udl);"},{"clang/lib/Lex/PPDirectives.cpp",1440,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///   # line digit-sequence\n///   # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n    Diag(StrTok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/PPDirectives.cpp",1591,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///     # 42\n///     # 42 \"file\" (\'1\' | \'2\')?\n///     # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n  } else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n    Diag(StrTok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/PPDirectives.cpp",1681,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // ...\n  if (StrTok.hasUDSuffix()) {\n    Diag(StrTok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/Pragma.cpp",240,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Tok.hasUDSuffix()) {\n    Diag(Tok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/Pragma.cpp",594,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.hasUDSuffix()) {\n    Diag(Tok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/Preprocessor.cpp",1375,"bool Preprocessor::FinishLexStringLiteral(Token &Result, std::string &String, const char *DiagnosticTag, bool AllowMacroExpansion) {\n  // ...\n  do {\n    // ...\n    if (Result.hasUDSuffix())\n      Diag(Result, diag::err_invalid_string_udl);"},{q,1944,"ExprResult Sema::ActOnUnevaluatedStringLiteral(ArrayRef<Token> StringToks) {\n  // ...\n  if (!Literal.getUDSuffix().empty()) {\n    // ...\n    return ExprError(Diag(UDSuffixLoc, diag::err_invalid_string_udl));"},{q,2031,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // ...\n  // Make sure we\'re allowed user-defined literals here.\n  if (!UDLScope)\n    return ExprError(Diag(UDSuffixLoc, diag::err_invalid_string_udl));"}},
		[l]={
			["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:6:9: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:7:5: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:8:8: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:9:9: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:10:22: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:11:1: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:12:17: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:13:20: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:14:19: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:18:13: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:21:23: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:24:26: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:26:81: error: string literal with user-defined suffix cannot be used here"}
		}
	},
	["err_invalid_suffix_constant"]={
		[b]="err_invalid_suffix_constant",
		[i]={{nil,o,"invalid suffix \'%0\' on %select{integer|floating|fixed-point}1 constant"},{F,nil,"invalid suffix \'%0\' on %select{integer|floating}1 constant"}},
		[j]={{nil,o,{"invalid suffix \'A\' on ",{"integer","floating","fixed-point"}," constant"}},{F,nil,{"invalid suffix \'A\' on ",{"integer","floating"}," constant"}}},
		[h]=k,
		[c]="invalid suffix \'(.*?)\' on (?:integer|floating|fixed\\-point) constant",
		[f]=a,
		[e]=O,
		[g]={"71a51ff10ee1",1447313810,"Use %select to merge two diagnostics that only differ in one word and are emitted in the same place....","Use %select to merge two diagnostics that only differ in one word and are emitted in the same place. NFC\n\nllvm-svn: 252861"},
		[d]={{ab,1158,"///       integer-constant: [C99 6.4.4.1]\n///         decimal-constant integer-suffix\n///         octal-constant integer-suffix\n///         hexadecimal-constant integer-suffix\n///         binary-literal integer-suffix [GNU, C++1y]\n///       user-defined-integer-literal: [C++11 lex.ext]\n///         decimal-literal ud-suffix\n///         octal-literal ud-suffix\n///         hexadecimal-literal ud-suffix\n///         binary-literal ud-suffix [GNU, C++1y]\n///       decimal-constant:\n///         nonzero-digit\n///         decimal-constant digit\n///       octal-constant:\n///         0\n///         octal-constant octal-digit\n///       hexadecimal-constant:\n///         hexadecimal-prefix hexadecimal-digit\n///         hexadecimal-constant hexadecimal-digit\n///       hexadecimal-prefix: one of\n///         0x 0X\n///       binary-literal:\n///         0b binary-digit\n///         0B binary-digit\n///         binary-literal binary-digit\n///       integer-suffix:\n///         unsigned-suffix [long-suffix]\n///         unsigned-suffix [long-long-suffix]\n///         long-suffix [unsigned-suffix]\n///         long-long-suffix [unsigned-sufix]\n///       nonzero-digit:\n///         1 2 3 4 5 6 7 8 9\n///       octal-digit:\n///         0 1 2 3 4 5 6 7\n///       hexadecimal-digit:\n///         0 1 2 3 4 5 6 7 8 9\n///         a b c d e f\n///         A B C D E F\n///       binary-digit:\n///         0\n///         1\n///       unsigned-suffix: one of\n///         u U\n///       long-suffix: one of\n///         l L\n///       long-long-suffix: one of\n///         ll LL\n///\n///       floating-constant: [C99 6.4.4.2]\n///         TODO: add rules...\n///\nNumericLiteralParser::NumericLiteralParser(StringRef TokSpelling, SourceLocation TokLoc, const SourceManager &SM, const LangOptions &LangOpts, const TargetInfo &Target, DiagnosticsEngine &Diags) : SM(SM), LangOpts(LangOpts), Diags(Diags), ThisTokBegin(TokSpelling.begin()), ThisTokEnd(TokSpelling.end()) {\n  // ...\n  // \"i\", \"if\", and \"il\" are user-defined suffixes in C++1y.\n  if (s != ThisTokEnd || isImaginary) {\n    // ...\n    if (s != ThisTokEnd) {\n      // ...\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, SuffixBegin - ThisTokBegin, SM, LangOpts), diag::err_invalid_suffix_constant) << StringRef(SuffixBegin, ThisTokEnd - SuffixBegin) << (isFixedPointConstant ? 2 : isFPConstant);"}},
		[l]={
			["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:9:12: error: invalid suffix \'xff\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:10:11: error: invalid suffix \'x\'ff\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:14:14: error: invalid suffix \'+1\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:25:13: error: invalid suffix \'x\'0.0p0\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:123459:11: error: invalid suffix \'\\u1234\'5\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:123463:11: error: invalid suffix \'ሴ\'5\' on integer constant"}
		}
	},
	["err_invalid_super_scope"]={
		[b]="err_invalid_super_scope",
		[i]="invalid use of \'__super\', this keyword can only be used inside class or member function scope",
		[j]="invalid use of \'__super\', this keyword can only be used inside class or member function scope",
		[h]=k,
		[c]="invalid use of \'__super\', this keyword can only be used inside class or member function scope",
		[f]=a,
		[e]=m,
		[g]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236).\n\nWe build a NestedNameSpecifier that records the CXXRecordDecl in which\n__super appeared. Name lookup is performed in all base classes of the\nrecorded CXXRecordDecl. Use of __super is allowed only inside class and\nmember function scope.\n\nllvm-svn: 218484"},
		[d]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",334,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  // ...\n  if (!RD) {\n    Diag(SuperLoc, diag::err_invalid_super_scope);"}}
	},
	["err_invalid_this_use"]={
		[b]="err_invalid_this_use",
		[i]="invalid use of \'this\' outside of a non-static member function",
		[j]="invalid use of \'this\' outside of a non-static member function",
		[h]=k,
		[c]="invalid use of \'this\' outside of a non\\-static member function",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{I,1398,"ExprResult Sema::ActOnCXXThis(SourceLocation Loc) {\n  // ...\n  if (ThisTy.isNull())\n    return Diag(Loc, diag::err_invalid_this_use);"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp:5:12: error: invalid use of \'this\' outside of a non-static member function","clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp:7:18: error: invalid use of \'this\' outside of a non-static member function","clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp:10:32: error: invalid use of \'this\' outside of a non-static member function"}
		}
	},
	["err_invalid_thread"]={
		[b]="err_invalid_thread",
		[i]="\'%0\' is only allowed on variable declarations",
		[j]="\'A\' is only allowed on variable declarations",
		[h]=k,
		[c]="\'(.*?)\' is only allowed on variable declarations",
		[f]=a,
		[e]=m,
		[g]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
		[d]={{p,9685,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{p,14752,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DeclSpec::TSCS TSCS = DS.getThreadStorageClassSpec())\n    Diag(DS.getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{p,18018,"/// HandleField - Analyze a field of a C struct or a C++ data member.\n///\nFieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{t,18842,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{rb,5204,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"}},
		[l]={
			["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:6:3: error: \'thread_local\' is only allowed on variable declarations"}
		}
	},
	["err_invalid_token_after_declarator_suggest_equal"]={
		[b]="err_invalid_token_after_declarator_suggest_equal",
		[i]="invalid %0 at end of declaration; did you mean \'=\'?",
		[j]="invalid A at end of declaration; did you mean \'=\'?",
		[h]=k,
		[c]="invalid (.*?) at end of declaration; did you mean \'\\=\'\\?",
		[f]=a,
		[e]=C,
		[g]={"4972a6dd080f",1327010511,"Extend the error of invalid token after declarations to include fixits for ","Extend the error of invalid token after declarations to include fixits for \n!=, %=, ^=, &=, *=, -=, |=, /=, <<=, <=, >=, and >>= to =.\n\nllvm-svn: 148499"},
		[d]={{cb,2215,"bool Parser::isTokenEqualOrEqualTypo() {\n  // ...\n  case tok::ampequal:            // &=\n  case tok::starequal:           // *=\n  case tok::plusequal:           // +=\n  case tok::minusequal:          // -=\n  case tok::exclaimequal:        // !=\n  case tok::slashequal:          // /=\n  case tok::percentequal:        // %=\n  case tok::lessequal:           // <=\n  case tok::lesslessequal:       // <<=\n  case tok::greaterequal:        // >=\n  case tok::greatergreaterequal: // >>=\n  case tok::caretequal:          // ^=\n  case tok::pipeequal:           // |=\n  case tok::equalequal:          // ==\n    Diag(Tok, diag::err_invalid_token_after_declarator_suggest_equal) << Kind << FixItHint::CreateReplacement(SourceRange(Tok.getLocation()), \"=\");"}},
		[l]={
			["clang/test/Parser/cxx0x-condition.cpp"]={"clang/test/Parser/cxx0x-condition.cpp:34:11: error: invalid \'==\' at end of declaration; did you mean \'=\'?"}
		}
	},
	["err_invalid_token_after_toplevel_declarator"]={
		[b]="err_invalid_token_after_toplevel_declarator",
		[i]="expected \';\' after top level declarator",
		[j]="expected \';\' after top level declarator",
		[h]=k,
		[c]="expected \';\' after top level declarator",
		[f]=a,
		[e]=C,
		[g]={S,1236199783,R,Q},
		[d]={{P,2326,"/// 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 (ExpectSemi && ExpectAndConsumeSemi(Context == DeclaratorContext::File ? diag::err_invalid_token_after_toplevel_declarator : diag::err_expected_semi_declaration)) {"}},
		[l]={
			["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:8:13: error: expected \';\' after top level declarator","clang/test/Lexer/c2x_digit_separators.c:26:15: error: expected \';\' after top level declarator","clang/test/Lexer/c2x_digit_separators.c:123460:11: error: expected \';\' after top level declarator","clang/test/Lexer/c2x_digit_separators.c:123464:11: error: expected \';\' after top level declarator"}
		}
	},
	["err_invalid_type_for_program_scope_var"]={
		[b]="err_invalid_type_for_program_scope_var",
		[i]="the %0 type cannot be used to declare a program scope variable",
		[j]="the A type cannot be used to declare a program scope variable",
		[h]=k,
		[c]="the (.*?) type cannot be used to declare a program scope variable",
		[f]=a,
		[e]="Related Result Type Issue",
		[g]={"c211c6c8844a",1480414900,"[OpenCL] Prohibit using reserve_id_t in program scope.","[OpenCL] Prohibit using reserve_id_t in program scope.\n\nPatch by Egor Churaev (echuraev).\n\nReviewers: Anastasia\n\nSubscribers: cfe-commits, yaxunl, bader\n\nDifferential Revision: https://reviews.llvm.org/D27099\n\nllvm-svn: 288126"},
		[d]={{p,7332,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n  // ...\n  // OpenCL v1.2 s6.9.r:\n  // The event type cannot be used to declare a program scope variable.\n  // OpenCL v2.0 s6.9.q:\n  // The clk_event_t and reserve_id_t types cannot be declared in program\n  // scope.\n  if (NewVD->hasGlobalStorage() && !NewVD->isStaticLocal()) {\n    if (R->isReserveIDT() || R->isClkEventT() || R->isEventT()) {\n      Se.Diag(NewVD->getLocation(), diag::err_invalid_type_for_program_scope_var) << R;"}},
		[l]={
			["clang/test/SemaOpenCLCXX/template-opencl-types.clcpp"]={"clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:6:13: error: the \'__global clk_event_t\' type cannot be used to declare a program scope variable","clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:4:3: error: the \'__global clk_event_t\' type cannot be used to declare a program scope variable"}
		}
	},
	["err_invalid_ucn_name"]={
		[b]={{nil,s,"err_invalid_ucn_name"}},
		[i]={{nil,s,"\'%0\' is not a valid Unicode character name"}},
		[j]={{nil,s,"\'A\' is not a valid Unicode character name"}},
		[h]=k,
		[c]="\'(.*?)\' is not a valid Unicode character name",
		[f]=a,
		[e]={{nil,s,O}},
		[g]={N,1625925174,M,L},
		[d]={{"clang/lib/Lex/Lexer.cpp",3424,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!Match) {\n    // ...\n    if (Diagnose) {\n      Diag(StartName, diag::err_invalid_ucn_name) << StringRef(Buffer.data(), Buffer.size()) << makeCharRange(*this, StartName, CurPtr - CharSize);"},{ab,535,"static void DiagnoseInvalidUnicodeCharacterName(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) {\n  Diag(Diags, Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd, diag::err_invalid_ucn_name) << Name;"}},
		[l]={
			["clang/test/CXX/drs/dr26xx.cpp"]={"clang/test/CXX/drs/dr26xx.cpp:87:8: error: \'Λ\' is not a valid Unicode character name","clang/test/CXX/drs/dr26xx.cpp:89:25: error: \'🤡\' is not a valid Unicode character name","clang/test/CXX/drs/dr26xx.cpp:94:20: error: \'abc\' is not a valid Unicode character name"}
		}
	},
	["err_invalid_use_of_array_type"]={
		[b]="err_invalid_use_of_array_type",
		[i]="an array type is not allowed here",
		[j]="an array type is not allowed here",
		[h]=k,
		[c]="an array type is not allowed here",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{I,4013,"/// Check the use of the given variable as a C++ condition in an if,\n/// while, do-while, or switch statement.\nExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar, SourceLocation StmtLoc, ConditionKind CK) {\n  // ...\n  // C++ [stmt.select]p2:\n  //   The declarator shall not specify a function or an array.\n  if (T->isFunctionType())\n  // ...\n  else if (T->isArrayType())\n    return ExprError(Diag(ConditionVar->getLocation(), diag::err_invalid_use_of_array_type) << ConditionVar->getSourceRange());"}},
		[l]={
			["clang/test/SemaCXX/decomposed-condition.cpp"]={"clang/test/SemaCXX/decomposed-condition.cpp:33:12: error: an array type is not allowed here"}
		}
	},
	["err_invalid_use_of_function_type"]={
		[b]="err_invalid_use_of_function_type",
		[i]="a function type is not allowed here",
		[j]="a function type is not allowed here",
		[h]=k,
		[c]="a function type is not allowed here",
		[f]=a,
		[e]=m,
		[g]={x,1237025389,y,z},
		[d]={{t,18220,"/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a\n/// C++ if/switch/while/for statement.\n/// e.g: \"if (int x = f()) {...}\"\nDeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {\n  // ...\n  if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.\n    Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type) << D.getSourceRange();"},{I,4009,"/// Check the use of the given variable as a C++ condition in an if,\n/// while, do-while, or switch statement.\nExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar, SourceLocation StmtLoc, ConditionKind CK) {\n  // ...\n  // C++ [stmt.select]p2:\n  //   The declarator shall not specify a function or an array.\n  if (T->isFunctionType())\n    return ExprError(Diag(ConditionVar->getLocation(), diag::err_invalid_use_of_function_type) << ConditionVar->getSourceRange());"}},
		[l]={
			["clang/test/Parser/cxx1z-init-statement.cpp"]={"clang/test/Parser/cxx1z-init-statement.cpp:22:9: error: a function type is not allowed here","clang/test/Parser/cxx1z-init-statement.cpp:23:9: error: a function type is not allowed here"}
		}
	},
	["err_invalid_utf8"]={
		[b]="err_invalid_utf8",
		[i]="source file is not valid UTF-8",
		[j]="source file is not valid UTF-8",
		[h]=k,
		[c]="source file is not valid UTF\\-8",
		[f]=a,
		[e]=O,
		[g]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals.","Handle universal character names and Unicode characters outside of literals.\n\nThis is a missing piece for C99 conformance.\n\nThis patch handles UCNs by adding a \'\\\\\' case to LexTokenInternal and\nLexIdentifier -- if we see a backslash, we tentatively try to read in a UCN.\nIf the UCN is not syntactically well-formed, we fall back to the old\ntreatment: a backslash followed by an identifier beginning with \'u\' (or \'U\').\n\nBecause the spelling of an identifier with UCNs still has the UCN in it, we\nneed to convert that to UTF-8 in Preprocessor::LookUpIdentifierInfo.\n\nOf course, valid code that does *not* use UCNs will see only a very minimal\nperformance hit (checks after each identifier for non-ASCII characters,\nchecks when converting raw_identifiers to identifiers that they do not\ncontain UCNs, and checks when getting the spelling of an identifier that it\ndoes not contain a UCN).\n\nThis patch also adds basic support for actual UTF-8 in the source. This is\ntreated almost exactly the same as UCNs except that we consider stray\nUnicode characters to be mistakes and offer a fixit to remove them.\n\nllvm-svn: 173369"},
		[d]={{"clang/lib/Lex/Lexer.cpp",4342,"LexStart:\n  // ...\n  default: {\n    // ...\n    Diag(CurPtr, diag::err_invalid_utf8);"}},
		[l]={
			["clang/test/Lexer/utf8-invalid.c"]={"clang/test/Lexer/utf8-invalid.c:6:12: error: source file is not valid UTF-8"}
		}
	},
	["err_invalid_var_template_spec_type"]={
		[b]="err_invalid_var_template_spec_type",
		[i]="type %2 of %select{explicit instantiation|explicit specialization|partial specialization|redeclaration}0 of %1 does not match expected type %3",
		[j]={{nil,nil,{"type C of ",{"explicit instantiation","explicit specialization","partial specialization","redeclaration"}," of B does not match expected type D"}}},
		[h]=k,
		[c]="type (.*?) of (?:explicit instantiation|explicit specialization|partial specialization|redeclaration) of (.*?) does not match expected type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{kb,10557,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  if (!R->isFunctionType()) {\n    // ...\n    // Check the new variable specialization against the parsed input.\n    if (PrevTemplate && !Context.hasSameType(Prev->getType(), R)) {\n      Diag(T->getTypeLoc().getBeginLoc(), diag::err_invalid_var_template_spec_type) << 0 << PrevTemplate << R << Prev->getType();"}},
		[l]={
			["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:130:12: error: type \'float\' of explicit instantiation of \'pi0a\' does not match expected type \'int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:134:18: error: type \'const int\' of explicit instantiation of \'pi0b\' does not match expected type \'int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:138:12: error: type \'int\' of explicit instantiation of \'pi0c\' does not match expected type \'const int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:147:12: error: type \'int\' of explicit instantiation of \'pi1a\' does not match expected type \'const int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:151:12: error: type \'int\' of explicit instantiation of \'pi1b\' does not match expected type \'const const int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:268:14: error: type \'float\' of explicit instantiation of \'pi0\' does not match expected type \'int\'"}
		}
	},
	["err_invalid_vector_bool_decl_spec"]={
		[b]="err_invalid_vector_bool_decl_spec",
		[i]="cannot use \'%0\' with \'__vector bool\'",
		[j]="cannot use \'A\' with \'__vector bool\'",
		[h]=k,
		[c]="cannot use \'(.*?)\' with \'__vector bool\'",
		[f]=a,
		[e]=m,
		[g]={"37141f4fb4ac",1277272824,"improve altivec vector bool/pixel support, patch by Anton Yartsev","improve altivec vector bool/pixel support, patch by Anton Yartsev\nwith several tweaks by me.\n\nllvm-svn: 106619"},
		[d]={{D,927,"bool DeclSpec::SetTypeAltiVecBool(bool isAltiVecBool, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (!TypeAltiVecVector || TypeAltiVecBool || (TypeSpecType != TST_unspecified)) {\n    // ...\n    DiagID = diag::err_invalid_vector_bool_decl_spec;"},{D,1181,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n      // Sign specifiers are not allowed with vector bool. (PIM 2.1)\n      if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) {\n        S.Diag(TSSLoc, diag::err_invalid_vector_bool_decl_spec) << getSpecifierName(getTypeSpecSign());"},{D,1190,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n      // ...\n      // Only char/int are valid with vector bool prior to Power10.\n      // Power10 adds instructions that produce vector bool data\n      // for quadwords as well so allow vector bool __int128.\n      if (((TypeSpecType != TST_unspecified) && (TypeSpecType != TST_char) && (TypeSpecType != TST_int) && (TypeSpecType != TST_int128)) || TypeAltiVecPixel) {\n        S.Diag(TSTLoc, diag::err_invalid_vector_bool_decl_spec) << (TypeAltiVecPixel ? \"__pixel\" : getSpecifierName((TST)TypeSpecType, Policy));"},{D,1203,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n      // ...\n      // Only \'short\' and \'long long\' are valid with vector bool. (PIM 2.1)\n      if ((getTypeSpecWidth() != TypeSpecifierWidth::Unspecified) && (getTypeSpecWidth() != TypeSpecifierWidth::Short) && (getTypeSpecWidth() != TypeSpecifierWidth::LongLong))\n        S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_bool_decl_spec) << getSpecifierName(getTypeSpecWidth());"}},
		[l]={
			["clang/test/Parser/altivec-bool-128.c"]={"clang/test/Parser/altivec-bool-128.c:16:15: error: cannot use \'unsigned\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:17:15: error: cannot use \'signed\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:18:13: error: cannot use \'unsigned\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:19:13: error: cannot use \'signed\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:20:17: error: cannot use \'signed\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:21:15: error: cannot use \'signed\' with \'__vector bool\'"}
		}
	},
	["err_invalid_vector_bool_int128_decl_spec"]={
		[b]={{nil,o,"err_invalid_vector_bool_int128_decl_spec"}},
		[i]={{nil,o,"use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)"}},
		[j]={{nil,o,"use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)"}},
		[h]=k,
		[c]="use of \'__int128\' with \'__vector bool\' requires VSX support enabled \\(on POWER10 or later\\)",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
		[d]={{D,1197,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n      // ...\n      // vector bool __int128 requires Power10.\n      if ((TypeSpecType == TST_int128) && (!S.Context.getTargetInfo().hasFeature(\"power10-vector\")))\n        S.Diag(TSTLoc, diag::err_invalid_vector_bool_int128_decl_spec);"}},
		[l]={
			["clang/test/Parser/altivec-bool-128.c"]={"clang/test/Parser/altivec-bool-128.c:12:15: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:13:17: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:14:13: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:15:15: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:16:24: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:17:22: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:18:22: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:19:20: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:20:24: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:21:22: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)"}
		}
	},
	["err_invalid_vector_decl_spec_combination"]={
		[b]="err_invalid_vector_decl_spec_combination",
		[i]="cannot combine with previous \'%0\' declaration specifier. \'__vector\' must be first",
		[j]="cannot combine with previous \'A\' declaration specifier. \'__vector\' must be first",
		[h]=k,
		[c]="cannot combine with previous \'(.*?)\' declaration specifier\\. \'__vector\' must be first",
		[f]=a,
		[e]=m,
		[g]={"2233460de6ed",1265328742,"First stage of adding AltiVec support","First stage of adding AltiVec support\n\nllvm-svn: 95335"},
		[d]={{D,877,"bool DeclSpec::SetTypeAltiVecVector(bool isAltiVecVector, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_vector_decl_spec_combination;"}}
	},
	["err_invalid_vector_double_decl_spec"]={
		[b]="err_invalid_vector_double_decl_spec",
		[i]="use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)",
		[j]="use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)",
		[h]=k,
		[c]="use of \'double\' with \'__vector\' requires VSX support to be enabled \\(available on POWER7 or later\\)",
		[f]=a,
		[e]=m,
		[g]={"691e01d94e53",1414783164,"[PowerPC] Initial VSX intrinsic support, with min/max for vector double","[PowerPC] Initial VSX intrinsic support, with min/max for vector double\n\nNow that we have initial support for VSX, we can begin adding\nintrinsics for programmer access to VSX instructions.  This patch\nperforms the necessary enablement in the front end, and tests it by\nimplementing intrinsics for minimum and maximum using the vector\ndouble data type.\n\nThe main change in the front end is to no longer disallow \"vector\" and\n\"double\" in the same declaration (lib/Sema/DeclSpec.cpp), but \"vector\"\nand \"long double\" must still be disallowed.  The new intrinsics are\naccessed via vec_max and vec_min with changes in\nlib/Headers/altivec.h.  Note that for v4f32, we already access\ncorresponding VMX builtins, but with VSX enabled we should use the\nforms that allow all 64 vector registers.\n\nThe new built-ins are defined in include/clang/Basic/BuiltinsPPC.def.\n\nI\'ve added a new test in test/CodeGen/builtins-ppc-vsx.c that is\nsimilar to, but much smaller than, builtins-ppc-altivec.c.  This\nallows us to test VSX IR generation without duplicating CHECK lines\nfor the existing bazillion Altivec tests.\n\nSince vector double is now legal when VSX is available, I\'ve modified\nthe error message, and changed where we test for it and for vector\nlong double, since the target machine isn\'t visible in the old place.\nThis serendipitously removed a not-pertinent warning about \'long\'\nbeing deprecated when used with \'vector\', when \"vector long double\" is\nencountered and we just want to issue an error.  The existing tests\ntest/Parser/altivec.c and test/Parser/cxx-altivec.cpp have been\nupdated accordingly, and I\'ve added test/Parser/vsx.c to verify that\n\"vector double\" is now legitimate with VSX enabled.\n\nThere is a companion patch for LLVM.\n\nllvm-svn: 220989"},
		[d]={{D,1220,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n      // vector long double and vector long long double are never allowed.\n      // vector double is OK for Power7 and later, and ZVector.\n      if (getTypeSpecWidth() == TypeSpecifierWidth::Long || getTypeSpecWidth() == TypeSpecifierWidth::LongLong)\n      // ...\n      else if (!S.Context.getTargetInfo().hasFeature(\"vsx\") && !S.getLangOpts().ZVector)\n        S.Diag(TSTLoc, diag::err_invalid_vector_double_decl_spec);"}},
		[l]={
			["clang/test/Parser/altivec.c"]={"clang/test/Parser/altivec.c:104:10: error: use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)","clang/test/Parser/altivec.c:105:8: error: use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)"}
		}
	},
	["err_invalid_vector_float_decl_spec"]={
		[b]="err_invalid_vector_float_decl_spec",
		[i]="cannot use \'float\' with \'__vector\'",
		[j]="cannot use \'float\' with \'__vector\'",
		[h]=k,
		[c]="cannot use \'float\' with \'__vector\'",
		[f]=a,
		[e]=m,
		[g]={"3c5038a535c8",1438265316,"Add support for System z vector language extensions","Add support for System z vector language extensions\n\nThe z13 vector facility has an associated language extension,\nclosely modeled on AltiVec/VSX.  The main differences are:\n\n- vector long, vector float and vector pixel are not supported\n\n- vector long long and vector double are supported (like VSX)\n\n- comparison operators return a vector rather than a scalar integer\n\n- shift operators behave like the OpenCL shift operators\n\n- vector bool is only supported as argument to certain operators;\n  some operators allow mixing a bool with a non-bool vector \n\nThis patch adds clang support for the extension.  It is closely modelled\non the AltiVec support.  Similarly to the -faltivec option, there\'s a\nnew -fzvector option to enable the extensions (as well as an -mzvector\nalias for compatibility with GCC).  There\'s also a separate LangOpt.\n\nThe extension as implemented here is intended to be compatible with\nthe -mzvector extension recently implemented by GCC.\n\nBased on a patch by Richard Sandiford.\n\nDifferential Revision: http://reviews.llvm.org/D11001\n\nllvm-svn: 243642"},
		[d]={{D,1226,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n    // ...\n    } else if (TypeSpecType == TST_float) {\n      // vector float is unsupported for ZVector unless we have the\n      // vector-enhancements facility 1 (ISA revision 12).\n      if (S.getLangOpts().ZVector && !S.Context.getTargetInfo().hasFeature(\"arch12\"))\n        S.Diag(TSTLoc, diag::err_invalid_vector_float_decl_spec);"}},
		[l]={
			["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:24:8: error: cannot use \'float\' with \'__vector\'","clang/test/Sema/zvector.c:55:10: error: cannot use \'float\' with \'__vector\'"}
		}
	},
	["err_invalid_vector_int128_decl_spec"]={
		[b]={{nil,B,"err_invalid_vector_int128_decl_spec"}},
		[i]={{nil,B,"use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)"}},
		[j]={{nil,B,"use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)"}},
		[h]=k,
		[c]="use of \'__int128\' with \'__vector\' requires extended Altivec support \\(available on POWER8 or later\\)",
		[f]=a,
		[e]={{nil,B,m}},
		[g]={"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"},
		[d]={{D,1176,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    // No vector __int128 prior to Power8.\n    if ((TypeSpecType == TST_int128) && !S.Context.getTargetInfo().hasFeature(\"power8-vector\"))\n      S.Diag(TSTLoc, diag::err_invalid_vector_int128_decl_spec);"}},
		[l]={
			["clang/test/Parser/cxx-altivec-bool-128.cpp"]={"clang/test/Parser/cxx-altivec-bool-128.cpp:14:15: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:15:17: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:16:13: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:17:15: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:18:24: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:19:22: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:20:22: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:21:20: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:22:24: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:23:22: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)"}
		}
	},
	["err_invalid_vector_long_decl_spec"]={
		[b]="err_invalid_vector_long_decl_spec",
		[i]="cannot use \'long\' with \'__vector\'",
		[j]="cannot use \'long\' with \'__vector\'",
		[h]=k,
		[c]="cannot use \'long\' with \'__vector\'",
		[f]=a,
		[e]=m,
		[g]={"3c5038a535c8",1438265316,"Add support for System z vector language extensions","Add support for System z vector language extensions\n\nThe z13 vector facility has an associated language extension,\nclosely modeled on AltiVec/VSX.  The main differences are:\n\n- vector long, vector float and vector pixel are not supported\n\n- vector long long and vector double are supported (like VSX)\n\n- comparison operators return a vector rather than a scalar integer\n\n- shift operators behave like the OpenCL shift operators\n\n- vector bool is only supported as argument to certain operators;\n  some operators allow mixing a bool with a non-bool vector \n\nThis patch adds clang support for the extension.  It is closely modelled\non the AltiVec support.  Similarly to the -faltivec option, there\'s a\nnew -fzvector option to enable the extensions (as well as an -mzvector\nalias for compatibility with GCC).  There\'s also a separate LangOpt.\n\nThe extension as implemented here is intended to be compatible with\nthe -mzvector extension recently implemented by GCC.\n\nBased on a patch by Richard Sandiford.\n\nDifferential Revision: http://reviews.llvm.org/D11001\n\nllvm-svn: 243642"},
		[d]={{D,1238,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n    // ...\n    } else if (TypeSpecType == TST_float) {\n    // ...\n    } else if (getTypeSpecWidth() == TypeSpecifierWidth::Long) {\n      // Vector long is unsupported for ZVector, or without VSX, and deprecated\n      // for AltiVec.\n      // It has also been historically deprecated on AIX (as an alias for\n      // \"vector int\" in both 32-bit and 64-bit modes). It was then made\n      // unsupported in the Clang-based XL compiler since the deprecated type\n      // has a number of conflicting semantics and continuing to support it\n      // is a disservice to users.\n      if (S.getLangOpts().ZVector || !S.Context.getTargetInfo().hasFeature(\"vsx\") || S.Context.getTargetInfo().getTriple().isOSAIX())\n        S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_long_decl_spec);"}},
		[l]={
			["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:23:8: error: cannot use \'long\' with \'__vector\'","clang/test/Sema/zvector.c:54:10: error: cannot use \'long\' with \'__vector\'"}
		}
	},
	["err_invalid_vector_long_double_decl_spec"]={
		[b]="err_invalid_vector_long_double_decl_spec",
		[i]="cannot use \'long double\' with \'__vector\'",
		[j]="cannot use \'long double\' with \'__vector\'",
		[h]=k,
		[c]="cannot use \'long double\' with \'__vector\'",
		[f]=a,
		[e]=m,
		[g]={"691e01d94e53",1414783164,"[PowerPC] Initial VSX intrinsic support, with min/max for vector double","[PowerPC] Initial VSX intrinsic support, with min/max for vector double\n\nNow that we have initial support for VSX, we can begin adding\nintrinsics for programmer access to VSX instructions.  This patch\nperforms the necessary enablement in the front end, and tests it by\nimplementing intrinsics for minimum and maximum using the vector\ndouble data type.\n\nThe main change in the front end is to no longer disallow \"vector\" and\n\"double\" in the same declaration (lib/Sema/DeclSpec.cpp), but \"vector\"\nand \"long double\" must still be disallowed.  The new intrinsics are\naccessed via vec_max and vec_min with changes in\nlib/Headers/altivec.h.  Note that for v4f32, we already access\ncorresponding VMX builtins, but with VSX enabled we should use the\nforms that allow all 64 vector registers.\n\nThe new built-ins are defined in include/clang/Basic/BuiltinsPPC.def.\n\nI\'ve added a new test in test/CodeGen/builtins-ppc-vsx.c that is\nsimilar to, but much smaller than, builtins-ppc-altivec.c.  This\nallows us to test VSX IR generation without duplicating CHECK lines\nfor the existing bazillion Altivec tests.\n\nSince vector double is now legal when VSX is available, I\'ve modified\nthe error message, and changed where we test for it and for vector\nlong double, since the target machine isn\'t visible in the old place.\nThis serendipitously removed a not-pertinent warning about \'long\'\nbeing deprecated when used with \'vector\', when \"vector long double\" is\nencountered and we just want to issue an error.  The existing tests\ntest/Parser/altivec.c and test/Parser/cxx-altivec.cpp have been\nupdated accordingly, and I\'ve added test/Parser/vsx.c to verify that\n\"vector double\" is now legitimate with VSX enabled.\n\nThere is a companion patch for LLVM.\n\nllvm-svn: 220989"},
		[d]={{D,1217,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n      // vector long double and vector long long double are never allowed.\n      // vector double is OK for Power7 and later, and ZVector.\n      if (getTypeSpecWidth() == TypeSpecifierWidth::Long || getTypeSpecWidth() == TypeSpecifierWidth::LongLong)\n        S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_long_double_decl_spec);"}},
		[l]={
			["clang/test/Parser/vsx.c"]={"clang/test/Parser/vsx.c:9:10: error: cannot use \'long double\' with \'__vector\'","clang/test/Parser/vsx.c:10:8: error: cannot use \'long double\' with \'__vector\'"}
		}
	},
	["err_invalid_vector_long_long_decl_spec"]={
		[b]="err_invalid_vector_long_long_decl_spec",
		[i]={{nil,B,"use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled"},{w,nil,"use of \'long long\' with \'__vector bool\' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled"}},
		[j]={{nil,B,"use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled"},{w,nil,"use of \'long long\' with \'__vector bool\' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled"}},
		[h]=k,
		[c]="use of \'long long\' with \'__vector\' requires VSX support \\(available on POWER7 or later\\) to be enabled",
		[f]=a,
		[e]=m,
		[g]={"2351bec3ead0",1425413323,"[PowerPC]Activate \"vector bool long long\" (and alternate spellings) as a valid type for Altivec supp...","[PowerPC]Activate \"vector bool long long\" (and alternate spellings) as a valid type for Altivec support for Power.\n\nThere are two test case updates for very basic testing. While I was editing cxx-altivec.cpp I also updated it to better match some other changes in altivec.c.\n\nNote: \"vector bool long\" was not also added because its use is considered deprecated.\n\nhttp://reviews.llvm.org/D7235\n\nllvm-svn: 231118"},
		[d]={{D,1171,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // No vector long long without VSX (or ZVector).\n    if ((getTypeSpecWidth() == TypeSpecifierWidth::LongLong) && !S.Context.getTargetInfo().hasFeature(\"vsx\") && !S.getLangOpts().ZVector)\n      S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_long_long_decl_spec);"}},
		[l]={
			["clang/test/Parser/altivec.c"]={"clang/test/Parser/altivec.c:106:15: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:107:17: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:108:13: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:109:15: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:133:8: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:134:15: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:135:17: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled"}
		}
	},
	["err_invalid_vfs_overlay"]={
		[b]="err_invalid_vfs_overlay",
		[i]="invalid virtual filesystem overlay file \'%0\'",
		[j]="invalid virtual filesystem overlay file \'A\'",
		[h]=tb,
		[c]="invalid virtual filesystem overlay file \'(.*?)\'",
		[f]=a,
		[e]=v,
		[g]={"801272a98c71",1393352627,"Add a driver option -ivfsoverlay","Add a driver option -ivfsoverlay\n\nReads the description of a virtual filesystem from a file and overlays\nit over the real file system.\n\nllvm-svn: 202176"},
		[d]={{jc,4699,"IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromOverlayFiles(ArrayRef<std::string> VFSOverlayFiles, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS) {\n  // ...\n  // earlier vfs files are on the bottom\n  for (const auto &File : VFSOverlayFiles) {\n    // ...\n    if (!FS) {\n      Diags.Report(diag::err_invalid_vfs_overlay) << File;"}}
	},
	["err_invalid_width_spec"]={
		[b]="err_invalid_width_spec",
		[i]="\'%select{|short|long|long long}0 %1\' is invalid",
		[j]={{nil,nil,{"\'",{a,"short","long","long long"}," B\' is invalid"}}},
		[h]=k,
		[c]="\'(?:|short|long|long long) (.*?)\' is invalid",
		[f]=a,
		[e]=m,
		[g]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select.\n\nllvm-svn: 253136"},
		[d]={{D,1282,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  case TypeSpecifierWidth::Short:    // short int\n  case TypeSpecifierWidth::LongLong: // long long int\n    if (TypeSpecType == TST_unspecified)\n    // ...\n    else if (!(TypeSpecType == TST_int || (IsFixedPointType && getTypeSpecWidth() != TypeSpecifierWidth::LongLong))) {\n      S.Diag(TSWRange.getBegin(), diag::err_invalid_width_spec) << (int)TypeSpecWidth << getSpecifierName((TST)TypeSpecType, Policy);"},{D,1294,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  case TypeSpecifierWidth::Long: // long double, long int\n    if (TypeSpecType == TST_unspecified)\n    // ...\n    else if (TypeSpecType != TST_int && TypeSpecType != TST_double && !IsFixedPointType) {\n      S.Diag(TSWRange.getBegin(), diag::err_invalid_width_spec) << (int)TypeSpecWidth << getSpecifierName((TST)TypeSpecType, Policy);"}},
		[l]={
			["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:99:1: error: \'long struct\' is invalid"}
		}
	},
	["err_ivar_access_using_property_syntax_suggest"]={
		[b]="err_ivar_access_using_property_syntax_suggest",
		[i]="property %0 not found on object of type %1; did you mean to access instance variable %2?",
		[j]="property A not found on object of type B; did you mean to access instance variable C?",
		[h]=k,
		[c]="property (.*?) not found on object of type (.*?); did you mean to access instance variable (.*?)\\?",
		[f]=a,
		[e]=m,
		[g]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.\n// rdar://7811841\n\nllvm-svn: 133970"},
		[d]={{bb,2143,"/// 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 (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n    // ...\n    Diag(MemberLoc, diag::err_ivar_access_using_property_syntax_suggest) << MemberName << QualType(OPT, 0) << Ivar->getDeclName() << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
		[l]={
			["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:52:36: error: property \'x\' not found on object of type \'Radar7861841 *\'; did you mean to access instance variable \'x\'?"}
		}
	},
	["err_ivar_in_superclass_use"]={
		[b]="err_ivar_in_superclass_use",
		[i]="property %0 attempting to use instance variable %1 declared in super class %2",
		[j]="property A attempting to use instance variable B declared in super class C",
		[h]=k,
		[c]="property (.*?) attempting to use instance variable (.*?) declared in super class (.*?)",
		[f]=a,
		[e]=m,
		[g]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
		[d]={{"clang/lib/Sema/SemaObjCProperty.cpp",1352,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // ...\n    if (!Ivar) {\n    // ...\n    } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n      Diag(PropertyDiagLoc, diag::err_ivar_in_superclass_use) << property->getDeclName() << Ivar->getDeclName() << ClassDeclared->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/ivar-sem-check-2.m"]={"clang/test/SemaObjC/ivar-sem-check-2.m:20:13: error: property \'prop\' attempting to use instance variable \'value2\' declared in super class \'Super\'"}
		}
	},
	["err_ivar_reference_type"]={
		[b]="err_ivar_reference_type",
		[i]="instance variables cannot be of reference type",
		[j]="instance variables cannot be of reference type",
		[h]=k,
		[c]="instance variables cannot be of reference type",
		[f]=a,
		[e]=m,
		[g]={"0103d67f9816",1272319623,"Diagnose declaration of reference typed ivars.","Diagnose declaration of reference typed ivars.\n\nllvm-svn: 102390"},
		[d]={{p,18379,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (T->isReferenceType()) {\n    Diag(Loc, diag::err_ivar_reference_type);"}},
		[l]={
			["clang/test/SemaObjCXX/ivar-reference-type.mm"]={"clang/test/SemaObjCXX/ivar-reference-type.mm:3:8: error: instance variables cannot be of reference type"}
		}
	},
	["err_ivar_use_in_class_method"]={
		[b]="err_ivar_use_in_class_method",
		[i]="instance variable %0 accessed in class method",
		[j]="instance variable A accessed in class method",
		[h]=k,
		[c]="instance variable (.*?) accessed in class method",
		[f]=a,
		[e]=m,
		[g]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
		[d]={{q,2963,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n    // ...\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n      // Diagnose using an ivar in a class method.\n      if (IsClassMethod) {\n        Diag(Loc, diag::err_ivar_use_in_class_method) << IV->getDeclName();"},{q,2991,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n  // ...\n  } else if (CurMethod->isInstanceMethod()) {\n  // ...\n  } else if (Lookup.isSingleResult() && Lookup.getFoundDecl()->isDefinedOutsideFunctionOrMethod()) {\n    // If accessing a stand-alone ivar in a class method, this is an error.\n    if (const ObjCIvarDecl *IV = dyn_cast<ObjCIvarDecl>(Lookup.getFoundDecl())) {\n      Diag(Loc, diag::err_ivar_use_in_class_method) << IV->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/ivar-lookup-resolution-builtin.m"]={"clang/test/SemaObjC/ivar-lookup-resolution-builtin.m:18:10: error: instance variable \'index\' accessed in class method"}
		}
	},
	["err_kern_call_not_global_function"]={
		[b]="err_kern_call_not_global_function",
		[i]="kernel call to non-global function %0",
		[j]="kernel call to non-global function A",
		[h]=k,
		[c]="kernel call to non\\-global function (.*?)",
		[f]=a,
		[e]=m,
		[g]={"4b66c47a16ee",1298426009,"Sema: diagnose kernel calls to non-global functions","Sema: diagnose kernel calls to non-global functions\n\nllvm-svn: 126292"},
		[d]={{q,7490,"/// 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 (getLangOpts().CUDA) {\n    if (Config) {\n      // CUDA: Kernel calls must be to global functions\n      if (FDecl && !FDecl->hasAttr<CUDAGlobalAttr>())\n        return ExprError(Diag(LParenLoc, diag::err_kern_call_not_global_function) << FDecl << Fn->getSourceRange());"}},
		[l]={
			["clang/test/SemaCUDA/kernel-call.cu"]={"clang/test/SemaCUDA/kernel-call.cu:22:15: error: kernel call to non-global function \'h1\'"}
		}
	},
	["err_kern_is_nonstatic_method"]={
		[b]="err_kern_is_nonstatic_method",
		[i]="kernel function %0 must be a free function or static member function",
		[j]="kernel function A must be a free function or static member function",
		[h]=k,
		[c]="kernel function (.*?) must be a free function or static member function",
		[f]=a,
		[e]=m,
		[g]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions.\n\nSummary:\nWarn for NVCC compatibility if you declare a static member function or\ninline function as __global__.\n\nReviewers: tra\n\nSubscribers: jhen, echristo, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16261\n\nllvm-svn: 258263"},
		[d]={{u,5051,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *Method = dyn_cast<CXXMethodDecl>(FD)) {\n    if (Method->isInstance()) {\n      S.Diag(Method->getBeginLoc(), diag::err_kern_is_nonstatic_method) << Method;"}},
		[l]={
			["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:54:3: error: kernel function \'foo\' must be a free function or static member function"}
		}
	},
	["err_kern_type_not_void_return"]={
		[b]="err_kern_type_not_void_return",
		[i]="kernel function type %0 must have void return type",
		[j]="kernel function type A must have void return type",
		[h]=k,
		[c]="kernel function type (.*?) must have void return type",
		[f]=a,
		[e]=m,
		[g]={"e8cfaf4258ca",1292194977,"Sema: diagnose kernel functions with non-void return type","Sema: diagnose kernel functions with non-void return type\n\nllvm-svn: 121653"},
		[d]={{u,5043,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!FD->getReturnType()->isVoidType() && !FD->getReturnType()->getAs<AutoType>() && !FD->getReturnType()->isInstantiationDependentType()) {\n    // ...\n    S.Diag(FD->getTypeSpecStartLoc(), diag::err_kern_type_not_void_return) << FD->getType() << (RTRange.isValid() ? FixItHint::CreateReplacement(RTRange, \"void\") : FixItHint());"},{q,7495,"/// 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 (getLangOpts().CUDA) {\n    if (Config) {\n      // ...\n      // CUDA: Kernel function must have \'void\' return type\n      if (!FuncT->getReturnType()->isVoidType() && !FuncT->getReturnType()->getAs<AutoType>() && !FuncT->getReturnType()->isInstantiationDependentType())\n        return ExprError(Diag(LParenLoc, diag::err_kern_type_not_void_return) << Fn->getType() << Fn->getSourceRange());"},{"clang/lib/Sema/SemaStmt.cpp",3883,"/// 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  // CUDA: Kernel function must have \'void\' return type.\n  if (getLangOpts().CUDA && FD->hasAttr<CUDAGlobalAttr>() && !Deduced->isVoidType()) {\n    Diag(FD->getLocation(), diag::err_kern_type_not_void_return) << FD->getType() << FD->getSourceRange();"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",3347,"/// Substitute the explicitly-provided template arguments into the\n/// given function template according to C++ [temp.arg.explicit].\n///\n/// \\param FunctionTemplate the function template into which the explicit\n/// template arguments will be substituted.\n///\n/// \\param ExplicitTemplateArgs the explicitly-specified template\n/// arguments.\n///\n/// \\param Deduced the deduced template arguments, which will be populated\n/// with the converted and checked explicit template arguments.\n///\n/// \\param ParamTypes will be populated with the instantiated function\n/// parameters.\n///\n/// \\param FunctionType if non-NULL, the result type of the function template\n/// will also be instantiated and the pointed-to value will be updated with\n/// the instantiated function type.\n///\n/// \\param Info if substitution fails for any reason, this object will be\n/// populated with more information about the failure.\n///\n/// \\returns TDK_Success if substitution was successful, or some failure\n/// condition.\nSema::TemplateDeductionResult Sema::SubstituteExplicitTemplateArguments(FunctionTemplateDecl *FunctionTemplate, TemplateArgumentListInfo &ExplicitTemplateArgs, SmallVectorImpl<DeducedTemplateArgument> &Deduced, SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType, TemplateDeductionInfo &Info) {\n  // ...\n  {\n    // ...\n    // CUDA: Kernel function must have \'void\' return type.\n    if (getLangOpts().CUDA)\n      if (Function->hasAttr<CUDAGlobalAttr>() && !ResultType->isVoidType()) {\n        Diag(Function->getLocation(), diag::err_kern_type_not_void_return) << Function->getType() << Function->getSourceRange();"}},
		[l]={
			["clang/test/SemaCUDA/autoret-global.cu"]={"clang/test/SemaCUDA/autoret-global.cu:19:17: error: kernel function type \'auto (int)\' must have void return type"}
		}
	},
	["err_kernel_arg_address_space"]={
		[b]="err_kernel_arg_address_space",
		[i]="pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space",
		[j]="pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space",
		[h]=k,
		[c]="pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space",
		[f]=a,
		[e]=m,
		[g]={"de82a65053de",1481638043,"[OpenCL] Improve address space diagnostics.","[OpenCL] Improve address space diagnostics.\n\nReviewers: Anastasia\n\nSubscribers: bader, yaxunl, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D27671\n\nllvm-svn: 289536"},
		[d]={{p,9463,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  case InvalidAddrSpacePtrKernelParam:\n    // ...\n    S.Diag(Param->getLocation(), diag::err_kernel_arg_address_space);"}},
		[l]={
			["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:18:44: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:21:45: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:24:34: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:27:35: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:30:40: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:32:54: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:34:67: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:36:67: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space"}
		}
	},
	["err_keyword_as_parameter"]={
		[b]={{nil,o,"err_keyword_as_parameter"}},
		[i]={{nil,o,"invalid parameter name: \'%0\' is a keyword"}},
		[j]={{nil,o,"invalid parameter name: \'A\' is a keyword"}},
		[h]=k,
		[c]="invalid parameter name\\: \'(.*?)\' is a keyword",
		[f]=a,
		[e]={{nil,o,C}},
		[g]={"625acd8f6847",1586351328,"[Parser] Improve diagnostic and error recovery when C++ keywords are used as identifiers.","[Parser] Improve diagnostic and error recovery when C++ keywords are used as identifiers.\n\nSummary:\nPreviously, clang emitted a less-usefull diagnostic and didnt recover\nwell when the keywords is used as identifier in function paramter.\n\n```\nvoid foo(int case, int x); // previously we drop all parameters after\n`int case`.\n```\n\nReviewers: sammccall\n\nReviewed By: sammccall\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D77633"},
		[d]={{P,7428,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///       parameter-type-list: [C99 6.7.5]\n///         parameter-list\n///         parameter-list \',\' \'...\'\n/// [C++]   parameter-list \'...\'\n///\n///       parameter-list: [C99 6.7.5]\n///         parameter-declaration\n///         parameter-list \',\' parameter-declaration\n///\n///       parameter-declaration: [C99 6.7.5]\n///         declaration-specifiers declarator\n/// [C++]   declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                       initializer-clause\n/// [GNU]   declaration-specifiers declarator attributes\n///         declaration-specifiers abstract-declarator[opt]\n/// [C++]   declaration-specifiers abstract-declarator[opt]\n///           \'=\' assignment-expression\n/// [GNU]   declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    // ...\n    } else {\n      // ...\n      // Now we are at the point where declarator parsing is finished.\n      //\n      // Try to catch keywords in place of the identifier in a declarator, and\n      // in particular the common case where:\n      //   1 identifier comes at the end of the declarator\n      //   2 if the identifier is dropped, the declarator is valid but anonymous\n      //     (no identifier)\n      //   3 declarator parsing succeeds, and then we have a trailing keyword,\n      //     which is never valid in a param list (e.g. missing a \',\')\n      // And we can\'t handle this in ParseDeclarator because in general keywords\n      // may be allowed to follow the declarator. (And in some cases there\'d be\n      // better recovery like inserting punctuation). ParseDeclarator is just\n      // treating this as an anonymous parameter, and fortunately at this point\n      // we\'ve already almost done that.\n      //\n      // We care about case 1) where the declarator type should be known, and\n      // the identifier should be null.\n      if (!ParmDeclarator.isInvalidType() && !ParmDeclarator.hasName() && Tok.isNot(tok::raw_identifier) && !Tok.isAnnotation() && Tok.getIdentifierInfo() && Tok.getIdentifierInfo()->isKeyword(getLangOpts())) {\n        Diag(Tok, diag::err_keyword_as_parameter) << PP.getSpelling(Tok);"}},
		[l]={
			["clang/test/Parser/cxx-keyword-identifiers.cpp"]={"clang/test/Parser/cxx-keyword-identifiers.cpp:4:14: error: invalid parameter name: \'case\' is a keyword","clang/test/Parser/cxx-keyword-identifiers.cpp:4:24: error: invalid parameter name: \'throw\' is a keyword","clang/test/Parser/cxx-keyword-identifiers.cpp:10:14: error: invalid parameter name: \'case\' is a keyword","clang/test/Parser/cxx-keyword-identifiers.cpp:18:14: error: invalid parameter name: \'case\' is a keyword"}
		}
	},
	["err_keyword_misplaced"]={
		[b]="err_keyword_misplaced",
		[i]="misplaced %0; expected %0 here",
		[j]="misplaced A; expected A here",
		[h]=k,
		[c]="misplaced (.*?); expected (.*?) here",
		[f]=a,
		[e]=C,
		[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
		[d]={{P,1718,"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-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:56:23: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:57:22: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:58:22: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:59:21: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:92:23: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here"}
		}
	},
	["err_keyword_not_allowed"]={
		[b]="err_keyword_not_allowed",
		[i]="%0 cannot appear here",
		[j]="A cannot appear here",
		[h]=k,
		[c]="(.*?) cannot appear here",
		[f]=a,
		[e]=C,
		[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
		[d]={{P,1706,"/// 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);"},{P,1725,"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;"},{P,5053,"/// 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,"},{P,6704,"PastIdentifier:\n  // ...\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::l_square)) {\n    // ...\n    } else if (Tok.isRegularKeywordAttribute()) {\n      // ...\n      Diag(Tok, diag::err_keyword_not_allowed) << Tok.getIdentifierInfo();"},{U,776,"/// 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);"},{U,1931,"#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);"},{U,1980,"#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,"},{U,1997,"#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,"},{U,2067,"#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,"},{U,2078,"#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,"},{U,3059,"/// 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();"},{U,4663,"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;"},{"clang/lib/Parse/ParseStmt.cpp",342,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::kw_asm: {\n    for (const ParsedAttr &AL : CXX11Attrs)\n      // ...\n      (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"}},
		[l]={
			["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={
				[1]="clang/test/Parser/cxx0x-keyword-attributes.cpp:40:7: error: \'__arm_streaming\' cannot appear here",
				[2]="clang/test/Parser/cxx0x-keyword-attributes.cpp:64:30: error: \'__arm_streaming\' cannot appear here",
				[3]="clang/test/Parser/cxx0x-keyword-attributes.cpp:68:35: error: \'__arm_streaming\' cannot appear here",
				[4]="clang/test/Parser/cxx0x-keyword-attributes.cpp:78:3: error: \'__arm_streaming\' cannot appear here",
				[5]="clang/test/Parser/cxx0x-keyword-attributes.cpp:80:3: error: \'__arm_streaming\' cannot appear here",
				[6]="clang/test/Parser/cxx0x-keyword-attributes.cpp:83:3: error: \'__arm_streaming\' cannot appear here",
				[7]="clang/test/Parser/cxx0x-keyword-attributes.cpp:85:3: error: \'__arm_streaming\' cannot appear here",
				[8]="clang/test/Parser/cxx0x-keyword-attributes.cpp:93:20: error: \'__arm_streaming\' cannot appear here",
				[9]="clang/test/Parser/cxx0x-keyword-attributes.cpp:96:3: error: \'__arm_streaming\' cannot appear here",
				[10]="clang/test/Parser/cxx0x-keyword-attributes.cpp:111:18: error: \'__arm_streaming\' cannot appear here",
				[11]="clang/test/Parser/cxx0x-keyword-attributes.cpp:112:10: error: \'__arm_streaming\' cannot appear here",
				[12]="clang/test/Parser/cxx0x-keyword-attributes.cpp:113:10: error: \'__arm_streaming\' cannot appear here",
				[13]="clang/test/Parser/cxx0x-keyword-attributes.cpp:113:30: error: \'__arm_streaming\' cannot appear here",
				[14]="clang/test/Parser/cxx0x-keyword-attributes.cpp:117:14: error: \'__arm_streaming\' cannot appear here",
				[15]="clang/test/Parser/cxx0x-keyword-attributes.cpp:118:1: error: \'__arm_streaming\' cannot appear here",
				[16]="clang/test/Parser/cxx0x-keyword-attributes.cpp:119:1: error: \'__arm_streaming\' cannot appear here",
				[17]="clang/test/Parser/cxx0x-keyword-attributes.cpp:120:1: error: \'__arm_streaming\' cannot appear here",
				[18]="clang/test/Parser/cxx0x-keyword-attributes.cpp:121:1: error: \'__arm_streaming\' cannot appear here",
				[19]="clang/test/Parser/cxx0x-keyword-attributes.cpp:122:1: error: \'__arm_streaming\' cannot appear here",
				[20]="clang/test/Parser/cxx0x-keyword-attributes.cpp:130:7: error: \'__arm_streaming\' cannot appear here",
				[21]="clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' cannot appear here",
				[22]="clang/test/Parser/cxx0x-keyword-attributes.cpp:139:1: error: \'__arm_streaming\' cannot appear here",
				[23]="clang/test/Parser/cxx0x-keyword-attributes.cpp:159:7: error: \'__arm_streaming\' cannot appear here",
				[24]="clang/test/Parser/cxx0x-keyword-attributes.cpp:164:20: error: \'__arm_streaming\' cannot appear here",
				[25]="clang/test/Parser/cxx0x-keyword-attributes.cpp:165:26: error: \'__arm_streaming\' cannot appear here",
				[26]="clang/test/Parser/cxx0x-keyword-attributes.cpp:175:8: error: \'__arm_streaming\' cannot appear here",
				[27]="clang/test/Parser/cxx0x-keyword-attributes.cpp:176:8: error: \'__arm_streaming\' cannot appear here",
				[28]="clang/test/Parser/cxx0x-keyword-attributes.cpp:177:8: error: \'__arm_streaming\' cannot appear here",
				[29]="clang/test/Parser/cxx0x-keyword-attributes.cpp:178:17: error: \'__arm_streaming\' cannot appear here",
				[30]="clang/test/Parser/cxx0x-keyword-attributes.cpp:191:6: error: \'__arm_streaming\' cannot appear here",
				[31]="clang/test/Parser/cxx0x-keyword-attributes.cpp:192:6: error: \'__arm_streaming\' cannot appear here",
				[32]="clang/test/Parser/cxx0x-keyword-attributes.cpp:197:16: error: \'__arm_streaming\' cannot appear here",
				[33]="clang/test/Parser/cxx0x-keyword-attributes.cpp:200:3: error: \'__arm_streaming\' cannot appear here",
				[34]="clang/test/Parser/cxx0x-keyword-attributes.cpp:203:3: error: \'__arm_streaming\' cannot appear here",
				[35]="clang/test/Parser/cxx0x-keyword-attributes.cpp:204:17: error: \'__arm_streaming\' cannot appear here",
				[36]="clang/test/Parser/cxx0x-keyword-attributes.cpp:204:40: error: \'__arm_streaming\' cannot appear here",
				[37]="clang/test/Parser/cxx0x-keyword-attributes.cpp:204:63: error: \'__arm_streaming\' cannot appear here",
				[38]="clang/test/Parser/cxx0x-keyword-attributes.cpp:206:16: error: \'__arm_streaming\' cannot appear here",
				[39]="clang/test/Parser/cxx0x-keyword-attributes.cpp:207:3: error: \'__arm_streaming\' cannot appear here",
				[40]="clang/test/Parser/cxx0x-keyword-attributes.cpp:208:3: error: \'__arm_streaming\' cannot appear here",
				[41]="clang/test/Parser/cxx0x-keyword-attributes.cpp:211:10: error: \'__arm_streaming\' cannot appear here",
				[42]="clang/test/Parser/cxx0x-keyword-attributes.cpp:235:5: error: \'__arm_streaming\' cannot appear here",
				[43]="clang/test/Parser/cxx0x-keyword-attributes.cpp:264:8: error: \'__arm_streaming\' cannot appear here",
				[44]="clang/test/Parser/cxx0x-keyword-attributes.cpp:265:10: error: \'__arm_streaming\' cannot appear here",
				[45]="clang/test/Parser/cxx0x-keyword-attributes.cpp:268:10: error: \'__arm_streaming\' cannot appear here",
				[46]="clang/test/Parser/cxx0x-keyword-attributes.cpp:271:12: error: \'__arm_streaming\' cannot appear here",
				[47]="clang/test/Parser/cxx0x-keyword-attributes.cpp:283:10: error: \'__arm_streaming\' cannot appear here",
				[48]="clang/test/Parser/cxx0x-keyword-attributes.cpp:285:9: error: \'__arm_streaming\' cannot appear here",
				[49]="clang/test/Parser/cxx0x-keyword-attributes.cpp:302:51: error: \'__arm_streaming\' cannot appear here",
				[50]="clang/test/Parser/cxx0x-keyword-attributes.cpp:307:17: error: \'__arm_streaming\' cannot appear here",
				[51]="clang/test/Parser/cxx0x-keyword-attributes.cpp:323:28: error: \'__arm_streaming\' cannot appear here",
				[52]="clang/test/Parser/cxx0x-keyword-attributes.cpp:328:33: error: \'__arm_streaming\' cannot appear here",
				[53]="clang/test/Parser/cxx0x-keyword-attributes.cpp:338:19: error: \'__arm_streaming\' cannot appear here",
				[54]="clang/test/Parser/cxx0x-keyword-attributes.cpp:340:20: error: \'__arm_streaming\' cannot appear here"
			}
		}
	},
	["err_keyword_not_import_attr"]={
		[b]="err_keyword_not_import_attr",
		[i]="%0 cannot be applied to a module import",
		[j]="A cannot be applied to a module import",
		[h]=k,
		[c]="(.*?) cannot be applied to a module import",
		[f]=a,
		[e]=ac,
		[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
		[d]={{cb,2535,"/// Parse a module import declaration. This is essentially the same for\n/// Objective-C and C++20 except for the leading \'@\' (in ObjC) and the\n/// trailing optional attributes (in C++).\n///\n/// [ObjC]  @import declaration:\n///           \'@\' \'import\' module-name \';\'\n/// [ModTS] module-import-declaration:\n///           \'import\' module-name attribute-specifier-seq[opt] \';\'\n/// [C++20] module-import-declaration:\n///           \'export\'[opt] \'import\' module-name\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' module-partition\n///                   attribute-specifier-seq[opt] \';\'\n///           \'export\'[opt] \'import\' header-name\n///                   attribute-specifier-seq[opt] \';\'\nDecl *Parser::ParseModuleImport(SourceLocation AtLoc, Sema::ModuleImportState &ImportState) {\n  // ...\n  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_import_attr, diag::err_keyword_not_import_attr,"}}
	},
	["err_keyword_not_module_attr"]={
		[b]="err_keyword_not_module_attr",
		[i]="%0 cannot be applied to a module",
		[j]="A cannot be applied to a module",
		[h]=k,
		[c]="(.*?) cannot be applied to a module",
		[f]=a,
		[e]=ac,
		[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
		[d]={{cb,2465,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///   module-declaration:   [C++20]\n///     \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///   global-module-fragment:  [C++2a]\n///     \'module\' \';\' top-level-declaration-seq[opt]\n///   module-declaration:      [C++2a]\n///     \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///   private-module-fragment: [C++2a]\n///     \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_module_attr, diag::err_keyword_not_module_attr,"}}
	},
	["err_keyword_not_supported_on_target"]={
		[b]="err_keyword_not_supported_on_target",
		[i]="%0 is not supported on this target",
		[j]="A is not supported on this target",
		[h]=k,
		[c]="(.*?) is not supported on this target",
		[f]=a,
		[e]=v,
		[g]={"33ee5c466346",1680613513,"[clang] Add Parse and Sema support for RegularKeyword attributes","[clang] Add Parse and Sema support for RegularKeyword attributes\n\nThis patch adds the Parse and Sema support for RegularKeyword attributes,\nfollowing on from a previous patch that added Attr.td support.\n\nThe patch is quite large.  However, nothing outside the tests is\nspecific to the first RegularKeyword attribute (__arm_streaming).\nThe patch should therefore be a one-off, up-front cost.  Other\nattributes just need an entry in Attr.td and the usual Sema support.\n\nThe approach taken in the patch is that the keywords can be used with\nany language version.  If standard attributes were added in language\nversion Y, the keyword rules for version X<Y are the same as they were\nfor version Y (to the extent possible).  Any extensions beyond Y are\nhandled in the same way for both keywords and attributes.  This ensures\nthat existing C++11 successors like C++17 are not treated differently\nfrom versions that have yet to be defined.\n\nSome notes on the implementation:\n\n* The patch emits errors rather than warnings for diagnostics that\nrelate to keywords.\n\n* Where possible, the patch drops “attribute” from diagnostics\nrelating to keywords.\n\n* One exception to the previous point is that warnings about C++\nextensions do still mention attributes.  The use there seemed OK\nsince the diagnostics are noting a change in the production rules.\n\n* If a diagnostic string needs to be different for keywords and\nattributes, the patch standardizes on passing the attribute/\nname/token followed by 0 for attributes and 1 for keywords.\n\n* Although the patch updates warn_attribute_wrong_decl_type_str,\nwarn_attribute_wrong_decl_type, and warn_attribute_wrong_decl_type,\nonly the error forms of these strings are used for keywords.\n\n* I couldn\'t trigger the warnings in checkUnusedDeclAttributes,\neven for existing attributes.  An assert on the warnings caused\nno failures in the testsuite.  I think in practice all standard\nattributes would be diagnosed before this.\n\n* The patch drops a call to standardAttributesAllowed in\nParseFunctionDeclarator.  This is because MaybeParseCXX11Attributes\nchecks the same thing itself, where appropriate.\n\n* The new tests are based on c2x-attributes.c and\ncxx0x-attributes.cpp.  The C++ test also incorporates a version of\ncxx11-base-spec-attributes.cpp.  The FIXMEs are carried across from\nthe originals.\n\nDifferential Revision: https://reviews.llvm.org/D148702"},
		[d]={{u,2230,"bool Sema::CheckAttrTarget(const ParsedAttr &AL) {\n  // Check whether the attribute is valid on the current target.\n  if (!AL.existsInTarget(Context.getTargetInfo())) {\n    Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_keyword_not_supported_on_target : diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{u,8732,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  // Unknown attributes are automatically warned on. Target-specific attributes\n  // which do not apply to the current target architecture are treated as\n  // though they were unknown attributes.\n  if (AL.getKind() == ParsedAttr::UnknownAttribute || !AL.existsInTarget(S.Context.getTargetInfo())) {\n    S.Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : AL.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",495,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getKind() == ParsedAttr::UnknownAttribute || !(A.existsInTarget(S.Context.getTargetInfo()) || (S.Context.getLangOpts().SYCLIsDevice && Aux && A.existsInTarget(*Aux)))) {\n    S.Diag(A.getLoc(), A.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : A.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << A << A.getRange();"}},
		[l]={
			["clang/test/SemaCUDA/amdgpu-bf16.cu"]={"clang/test/SemaCUDA/amdgpu-bf16.cu:16:45: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:18:45: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:20:45: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:22:46: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:25:30: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:25:43: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:26:3: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:30:47: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:35:47: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:40:47: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:45:48: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:51:15: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:51:1: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:57:9: error: __bf16 is not supported on this target"}
		}
	},
	["err_l_square_l_square_not_attribute"]={
		[b]="err_l_square_l_square_not_attribute",
		[i]="C++11 only allows consecutive left square brackets when introducing an attribute",
		[j]="C++11 only allows consecutive left square brackets when introducing an attribute",
		[h]=k,
		[c]="C\\+\\+11 only allows consecutive left square brackets when introducing an attribute",
		[f]=a,
		[e]=C,
		[g]={"7bdcc4a9da8c",1334021532,"Disambiguation of \'[[\':","Disambiguation of \'[[\':\n * In C++11, \'[[\' is ill-formed unless it starts an attribute-specifier. Reject\n   array sizes and array indexes which begin with a lambda-expression. Recover by\n   parsing the lambda as a lambda.\n * In Objective-C++11, either \'[\' could be the start of a message-send.\n   Fully disambiguate this case: it turns out that the grammars of message-sends,\n   lambdas and attributes do not actually overlap. Accept any occurrence of \'[[\'\n   where either \'[\' starts a message send, but reject a lambda in an array index\n   just like in C++11 mode.\n\nImplement a couple of changes to the attribute wording which occurred after our\nattributes implementation landed:\n * In a function-declaration, the attributes go after the exception specification,\n   not after the right paren.\n * A reference type can have attributes applied.\n * An \'identifier\' in an attribute can also be a keyword. Support for alternative\n   tokens (iso646 keywords) in attributes to follow.\n\nAnd some bug fixes:\n * Parse attributes after declarator-ids, even if they are not simple identifiers.\n * Do not accept attributes after a parenthesized declarator.\n * Accept attributes after an array size in a new-type-id.\n * Partially disamiguate \'delete\' followed by a lambda. More work is required\n   here for the case where the lambda-introducer is \'[]\'.\n\nllvm-svn: 154369"},
		[d]={{P,1673,"/// 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_InvalidAttributeSpecifier:\n    Diag(Tok.getLocation(), diag::err_l_square_l_square_not_attribute);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p6.cpp:11:4: error: C++11 only allows consecutive left square brackets when introducing an attribute"}
		}
	},
	["err_lambda_after_delete"]={
		[b]={{nil,r,"err_lambda_after_delete"}},
		[i]={{nil,r,"\'[]\' after delete interpreted as \'delete[]\'; add parentheses to treat this as a lambda-expression"}},
		[j]={{nil,r,"\'[]\' after delete interpreted as \'delete[]\'; add parentheses to treat this as a lambda-expression"}},
		[h]=k,
		[c]="\'\\[\\]\' after delete interpreted as \'delete\\[\\]\'; add parentheses to treat this as a lambda\\-expression",
		[f]=a,
		[e]={{nil,r,C}},
		[g]={"f53d1727107e",1558278478,"Added a better diagnostic when using the delete operator with lambdas","Added a better diagnostic when using the delete operator with lambdas\n\nSummary:\nThis adds a new error for missing parentheses around lambdas in delete operators.\n\n```\nint main() {\n  delete []() { return new int(); }();\n}\n```\n\nThis will result in:\n\n```\ntest.cpp:2:3: error: \'[]\' after delete interpreted as \'delete[]\'\n  delete []() { return new int(); }();\n  ^~~~~~~~~\ntest.cpp:2:9: note: add parentheses around the lambda\n  delete []() { return new int(); }();\n        ^\n        (                          )\n```\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: riccibruno, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D36357\n\nllvm-svn: 361119"},
		[d]={{db,3427,"/// ParseCXXDeleteExpression - Parse a C++ delete-expression. Delete is used\n/// to free memory allocated by new.\n///\n/// This method is called to parse the \'delete\' expression after the optional\n/// \'::\' has been already parsed.  If the \'::\' was present, \"UseGlobal\" is true\n/// and \"Start\" is its location.  Otherwise, \"Start\" is the location of the\n/// \'delete\' token.\n///\n///        delete-expression:\n///                   \'::\'[opt] \'delete\' cast-expression\n///                   \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\nExprResult Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) {\n  // ...\n  if (Tok.is(tok::l_square) && NextToken().is(tok::r_square)) {\n    // ...\n    // Basic lookahead to check if we have a lambda expression.\n    if (Next.isOneOf(tok::l_brace, tok::less) || (Next.is(tok::l_paren) && (GetLookAheadToken(3).is(tok::r_paren) || (GetLookAheadToken(3).is(tok::identifier) && GetLookAheadToken(4).is(tok::identifier))))) {\n      // ...\n      if (EmitFixIt)\n        Diag(Start, diag::err_lambda_after_delete) << SourceRange(Start, RSquareLoc) << FixItHint::CreateInsertion(LSquareLoc, \"(\") << FixItHint::CreateInsertion(Lexer::getLocForEndOfToken(RBraceLoc, 0, Actions.getSourceManager(), getLangOpts()), \")\");"},{db,3435,"/// ParseCXXDeleteExpression - Parse a C++ delete-expression. Delete is used\n/// to free memory allocated by new.\n///\n/// This method is called to parse the \'delete\' expression after the optional\n/// \'::\' has been already parsed.  If the \'::\' was present, \"UseGlobal\" is true\n/// and \"Start\" is its location.  Otherwise, \"Start\" is the location of the\n/// \'delete\' token.\n///\n///        delete-expression:\n///                   \'::\'[opt] \'delete\' cast-expression\n///                   \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\nExprResult Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) {\n  // ...\n  if (Tok.is(tok::l_square) && NextToken().is(tok::r_square)) {\n    // ...\n    // Basic lookahead to check if we have a lambda expression.\n    if (Next.isOneOf(tok::l_brace, tok::less) || (Next.is(tok::l_paren) && (GetLookAheadToken(3).is(tok::r_paren) || (GetLookAheadToken(3).is(tok::identifier) && GetLookAheadToken(4).is(tok::identifier))))) {\n      // ...\n      if (EmitFixIt)\n      // ...\n      else\n        Diag(Start, diag::err_lambda_after_delete) << SourceRange(Start, RSquareLoc);"}},
		[l]={
			["clang/test/SemaCXX/new-delete-0x.cpp"]={"clang/test/SemaCXX/new-delete-0x.cpp:37:3: error: \'[]\' after delete interpreted as \'delete[]\'; add parentheses to treat this as a lambda-expression"}
		}
	},
	["err_lambda_capture_anonymous_var"]={
		[b]="err_lambda_capture_anonymous_var",
		[i]="unnamed variable cannot be implicitly captured in a lambda expression",
		[j]="unnamed variable cannot be implicitly captured in a lambda expression",
		[h]=k,
		[c]="unnamed variable cannot be implicitly captured in a lambda expression",
		[f]=a,
		[e]=T,
		[g]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions.","Implement implicit capture for lambda expressions.\n\nStill left: explicit captures in lambdas need to cause implicit capture, and I need to take a look at the diagnostics for some cases.\n\nllvm-svn: 149718"},
		[d]={{q,19156,"// 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 are not allowed to capture unnamed variables\n  // (e.g. anonymous unions).\n  // FIXME: The C++11 rule don\'t actually state this explicitly, but I\'m\n  // assuming that\'s the intent.\n  if (IsLambda && !Var->getDeclName()) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_lambda_capture_anonymous_var);"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:98:28: error: unnamed variable cannot be implicitly captured in a lambda expression"}
		}
	},
	["err_lambda_capture_default_arg"]={
		[b]="err_lambda_capture_default_arg",
		[i]="lambda expression in default argument cannot capture any entity",
		[j]="lambda expression in default argument cannot capture any entity",
		[h]=k,
		[c]="lambda expression in default argument cannot capture any entity",
		[f]=a,
		[e]=T,
		[g]={"f0d495100cf4",1328916622,"Implement C++11 [expr.lambda.prim]p13, which prohibits lambdas in","Implement C++11 [expr.lambda.prim]p13, which prohibits lambdas in\ndefault arguments if in fact those lambdas capture any entity.\n\nllvm-svn: 150282"},
		[d]={{t,168,"bool CheckDefaultArgumentVisitor::VisitLambdaExpr(const LambdaExpr *Lambda) {\n  // ...\n  for (const LambdaCapture &LC : Lambda->captures()) {\n    if (!Lambda->isInitCapture(&LC))\n      return S.Diag(LC.getLocation(), diag::err_lambda_capture_default_arg);"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp:9:19: error: lambda expression in default argument cannot capture any entity","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp:10:19: error: lambda expression in default argument cannot capture any entity","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp:11:30: error: lambda expression in default argument cannot capture any entity"}
		}
	},
	["err_lambda_capture_flexarray_type"]={
		[b]="err_lambda_capture_flexarray_type",
		[i]="variable %0 with flexible array member cannot be captured in a lambda expression",
		[j]="variable A with flexible array member cannot be captured in a lambda expression",
		[h]=k,
		[c]="variable (.*?) with flexible array member cannot be captured in a lambda expression",
		[f]=a,
		[e]=T,
		[g]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture \nstruct variables with flexiable array members in\nblocks (and lambdas). Issue error instead of\ncrashing in IRGen. // rdar://12655829\n\nllvm-svn: 171912"},
		[d]={{q,19178,"// 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  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        if (IsBlock)\n        // ...\n        else\n          S.Diag(Loc, diag::err_lambda_capture_flexarray_type) << Var;"}},
		[l]={
			["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:7:15: error: variable \'a\' with flexible array member cannot be captured in a lambda expression"}
		}
	},
	["err_lambda_capture_misplaced_ellipsis"]={
		[b]={{nil,r,"err_lambda_capture_misplaced_ellipsis"}},
		[i]={{nil,r,"ellipsis in pack %select{|init-}0capture must appear %select{after|before}0 the name of the capture"}},
		[j]={{nil,r,{"ellipsis in pack ",{a,"init-"},"capture must appear ",{"after","before"}," the name of the capture"}}},
		[h]=k,
		[c]="ellipsis in pack (?:|init\\-)capture must appear (?:after|before) the name of the capture",
		[f]=a,
		[e]={{nil,r,C}},
		[g]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures.\n\nThis permits an init-capture to introduce a new pack:\n\n  template<typename ...T> auto x = [...a = T()] { /* a is a pack */ };\n\nTo support this, the mechanism for allowing ParmVarDecls to be packs has\nbeen extended to support arbitrary local VarDecls.\n\nllvm-svn: 361300"},
		[d]={{db,1087,"/// 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 (llvm::any_of(EllipsisLocs, [](SourceLocation Loc) { return Loc.isValid(); })) {\n      // ...\n      if (EllipsisLoc.isInvalid()) {\n        DiagID = diag::err_lambda_capture_misplaced_ellipsis;"},{db,1114,"/// 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 (llvm::any_of(EllipsisLocs, [](SourceLocation Loc) { return Loc.isValid(); })) {\n      // ...\n      if (DiagID) {\n        NonTentativeAction([&] {\n          // ...\n          if (DiagID == diag::err_lambda_capture_misplaced_ellipsis) {"}},
		[l]={
			["clang/test/CXX/temp/temp.decls/temp.variadic/init-capture.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/init-capture.cpp:46:45: error: ellipsis in pack init-capture must appear before the name of the capture"}
		}
	},
	["err_lambda_capture_multiple_ellipses"]={
		[b]={{nil,r,"err_lambda_capture_multiple_ellipses"}},
		[i]={{nil,r,"multiple ellipses in pack capture"}},
		[j]={{nil,r,"multiple ellipses in pack capture"}},
		[h]=k,
		[c]="multiple ellipses in pack capture",
		[f]=a,
		[e]={{nil,r,C}},
		[g]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures.\n\nThis permits an init-capture to introduce a new pack:\n\n  template<typename ...T> auto x = [...a = T()] { /* a is a pack */ };\n\nTo support this, the mechanism for allowing ParmVarDecls to be packs has\nbeen extended to support arbitrary local VarDecls.\n\nllvm-svn: 361300"},
		[d]={{db,1097,"/// 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 (llvm::any_of(EllipsisLocs, [](SourceLocation Loc) { return Loc.isValid(); })) {\n      // ...\n      if (EllipsisLoc.isInvalid()) {\n      // ...\n      } else {\n        // ...\n        if (NumEllipses > 1)\n          DiagID = diag::err_lambda_capture_multiple_ellipses;"}}
	},
	["err_lambda_decl_ref_not_modifiable_lvalue"]={
		[b]="err_lambda_decl_ref_not_modifiable_lvalue",
		[i]="cannot assign to a variable captured by copy in a non-mutable lambda",
		[j]="cannot assign to a variable captured by copy in a non-mutable lambda",
		[h]=k,
		[c]="cannot assign to a variable captured by copy in a non\\-mutable lambda",
		[f]=a,
		[e]=m,
		[g]={"5fa2ef4445fa",1331599021,"Alternate fix to PR12248:  put Sema in charge of special-casing","Alternate fix to PR12248:  put Sema in charge of special-casing\nthe diagnostic for assigning to a copied block capture.  This has\nthe pleasant side-effect of letting us special-case the diagnostic\nfor assigning to a copied lambda capture as well, without introducing\na new non-modifiable enumerator for it.\n\nllvm-svn: 152593"},
		[d]={{q,14303,"/// 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      // ...\n      else\n        DiagID = diag::err_lambda_decl_ref_not_modifiable_lvalue;"}},
		[l]={
			["clang/test/SemaCXX/captured-statements.cpp"]={"clang/test/SemaCXX/captured-statements.cpp:11:9: error: cannot assign to a variable captured by copy in a non-mutable lambda","clang/test/SemaCXX/captured-statements.cpp:24:9: error: cannot assign to a variable captured by copy in a non-mutable lambda"}
		}
	},
	["err_lambda_decl_specifier_repeated"]={
		[b]="err_lambda_decl_specifier_repeated",
		[i]={{nil,n,"%select{\'mutable\'|\'static\'|\'constexpr\'|\'consteval\'}0 cannot appear multiple times in a lambda declarator"},{s,r,"%select{\'mutable\'|\'constexpr\'|\'consteval\'}0 cannot appear multiple times in a lambda declarator"},{V,nil,"%select{\'mutable\'|\'constexpr\'}0 cannot appear multiple times in a lambda declarator"}},
		[j]={{nil,n,{{"\'mutable\'","\'static\'","\'constexpr\'","\'consteval\'"}," cannot appear multiple times in a lambda declarator"}},{s,r,{{"\'mutable\'","\'constexpr\'","\'consteval\'"}," cannot appear multiple times in a lambda declarator"}},{V,nil,{{"\'mutable\'","\'constexpr\'"}," cannot appear multiple times in a lambda declarator"}}},
		[h]=k,
		[c]="(?:\'mutable\'|\'static\'|\'constexpr\'|\'consteval\') cannot appear multiple times in a lambda declarator",
		[f]=a,
		[e]=C,
		[g]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lambda expressions\n\nSupport the constexpr specifier on lambda expressions - and support its inference from the lambda call operator\'s body.\n\ni.e.\n  auto L = [] () constexpr { return 5; };\n  static_assert(L() == 5); // OK\n  auto Implicit = [] (auto a) { return a; };\n  static_assert(Implicit(5) == 5); \n\nWe do not support evaluation of lambda\'s within constant expressions just yet.\n\nImplementation Strategy:\n  - teach ParseLambdaExpressionAfterIntroducer to expect a constexpr specifier and mark the invented function call operator\'s declarator\'s decl-specifier with it; Have it emit fixits for multiple decl-specifiers (mutable or constexpr) in this location.\n  - for cases where constexpr is not explicitly specified, have buildLambdaExpr check whether the invented function call operator satisfies the requirements of a constexpr function, by calling CheckConstexprFunctionDecl/Body.\n\nMuch obliged to Richard Smith for his patience and his care, in ensuring the code is clang-worthy.\n\nllvm-svn: 264513"},
		[d]={{db,1178,"static void tryConsumeLambdaSpecifierToken(Parser &P, SourceLocation &MutableLoc, SourceLocation &StaticLoc, SourceLocation &ConstexprLoc, SourceLocation &ConstevalLoc, SourceLocation &DeclEndLoc) {\n  // ...\n  auto ConsumeLocation = [&P, &DeclEndLoc](SourceLocation &SpecifierLoc, int DiagIndex) {\n    if (SpecifierLoc.isValid()) {\n      P.Diag(P.getCurToken().getLocation(), diag::err_lambda_decl_specifier_repeated) << DiagIndex << FixItHint::CreateRemoval(P.getCurToken().getLocation());"}},
		[l]={
			["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:26:33: error: \'mutable\' cannot appear multiple times in a lambda declarator","clang/test/Parser/cxx2b-lambdas.cpp:27:33: error: \'constexpr\' cannot appear multiple times in a lambda declarator","clang/test/Parser/cxx2b-lambdas.cpp:42:24: error: \'static\' cannot appear multiple times in a lambda declarator"}
		}
	},
	["err_lambda_impcap"]={
		[b]="err_lambda_impcap",
		[i]="variable %0 cannot be implicitly captured in a lambda with no capture-default specified",
		[j]="variable A cannot be implicitly captured in a lambda with no capture-default specified",
		[h]=k,
		[c]="variable (.*?) cannot be implicitly captured in a lambda with no capture\\-default specified",
		[f]=a,
		[e]=T,
		[g]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions.","Implement implicit capture for lambda expressions.\n\nStill left: explicit captures in lambdas need to cause implicit capture, and I need to take a look at the diagnostics for some cases.\n\nllvm-svn: 149718"},
		[d]={{q,19666,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  // ...\n  do {\n    // ...\n    // If we are instantiating a generic lambda call operator body,\n    // we do not want to capture new variables.  What was captured\n    // during either a lambdas transformation or initial parsing\n    // should be used.\n    if (isGenericLambdaCallOperatorSpecialization(DC)) {\n      if (BuildAndDiagnose) {\n        // ...\n        if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n          Diag(ExprLoc, diag::err_lambda_impcap) << Var;"},{q,19746,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  // ...\n  do {\n    // ...\n    if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n      // No capture-default, and this is not an explicit capture\n      // so cannot capture this variable.\n      if (BuildAndDiagnose) {\n        Diag(ExprLoc, diag::err_lambda_impcap) << Var;"}},
		[l]={
			["clang/test/SemaCXX/cxx20-decomposition.cpp"]={"clang/test/SemaCXX/cxx20-decomposition.cpp:172:33: error: variable \'b\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:172:33: error: variable \'b\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:182:16: error: variable \'a\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:182:16: error: variable \'a\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:182:16: error: variable \'a\' cannot be implicitly captured in a lambda with no capture-default specified"}
		}
	},
	["err_lambda_in_constant_expression"]={
		[b]="err_lambda_in_constant_expression",
		[i]="a lambda expression may not appear inside of a constant expression",
		[j]="a lambda expression may not appear inside of a constant expression",
		[h]=k,
		[c]="a lambda expression may not appear inside of a constant expression",
		[f]=a,
		[e]=T,
		[g]={"9adc361008e2",1382692372,"Sema: Do not allow lambda expressions to appear inside of constant expressions","Sema: Do not allow lambda expressions to appear inside of constant expressions\n\nWe would previously not diagnose this which would lead to crashes (on\nvery strange code).\n\nThis fixes PR17675.\n\nllvm-svn: 193397"},
		[d]={{q,18487,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  if (!Rec.Lambdas.empty()) {\n    // ...\n    if (!getLangOpts().CPlusPlus20 && (Rec.ExprContext == ExpressionKind::EK_TemplateArgument || Rec.isUnevaluated() || (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17))) {\n      // ...\n      if (Rec.isUnevaluated()) {\n      // ...\n      } else if (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17) {\n        // ...\n        D = diag::err_lambda_in_constant_expression;"}},
		[l]={
			["clang/test/SemaCXX/new-delete-0x.cpp"]={"clang/test/SemaCXX/new-delete-0x.cpp:24:24: error: a lambda expression may not appear inside of a constant expression"}
		}
	},
	["err_lambda_in_invalid_context"]={
		[b]={{nil,A,"err_lambda_in_invalid_context"}},
		[i]={{nil,A,"a lambda expression cannot appear in this context"}},
		[j]={{nil,A,"a lambda expression cannot appear in this context"}},
		[h]=k,
		[c]="a lambda expression cannot appear in this context",
		[f]=a,
		[e]={{nil,A,T}},
		[g]={"b6d5c5871857",1531421141,"[C++17] Disallow lambdas in template parameters (PR33696).","[C++17] Disallow lambdas in template parameters (PR33696).\n\nSummary: This revision disallows lambdas in template parameters, as reported in PR33696.\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D37442\n\nllvm-svn: 336930"},
		[d]={{q,18503,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  if (!Rec.Lambdas.empty()) {\n    // ...\n    if (!getLangOpts().CPlusPlus20 && (Rec.ExprContext == ExpressionKind::EK_TemplateArgument || Rec.isUnevaluated() || (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17))) {\n      // ...\n      if (Rec.isUnevaluated()) {\n      // ...\n      } else if (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17) {\n      // ...\n      } else if (Rec.ExprContext == ExpressionKind::EK_TemplateArgument) {\n        // ...\n        D = diag::err_lambda_in_invalid_context;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2-template-parameter.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2-template-parameter.cpp:6:13: error: a lambda expression cannot appear in this context"}
		}
	},
	["err_lambda_incomplete_result"]={
		[b]="err_lambda_incomplete_result",
		[i]="incomplete result type %0 in lambda expression",
		[j]="incomplete result type A in lambda expression",
		[h]=k,
		[c]="incomplete result type (.*?) in lambda expression",
		[f]=a,
		[e]=T,
		[g]={"621003e7b956",1329254444,"Check the return type of lambda expressions.","Check the return type of lambda expressions.\n\nllvm-svn: 150503"},
		[d]={{"clang/lib/Sema/SemaLambda.cpp",443,"static void buildLambdaScopeReturnType(Sema &S, LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator, bool ExplicitResultType) {\n  if (ExplicitResultType) {\n    // ...\n    if (!LSI->ReturnType->isDependentType() && !LSI->ReturnType->isVoidType())\n      S.RequireCompleteType(CallOperator->getBeginLoc(), LSI->ReturnType, diag::err_lambda_incomplete_result);"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp:48:22: error: incomplete result type \'Incomplete\' in lambda expression","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp:56:21: error: incomplete result type \'Incomplete\' in lambda expression"}
		}
	},
	["err_lambda_return_init_list"]={
		[b]="err_lambda_return_init_list",
		[i]="cannot deduce lambda return type from initializer list",
		[j]="cannot deduce lambda return type from initializer list",
		[h]=k,
		[c]="cannot deduce lambda return type from initializer list",
		[f]=a,
		[e]=T,
		[g]={"940a550f0d35",1328812839,"Don\'t allow deduction of a lambda result type from an initializer","Don\'t allow deduction of a lambda result type from an initializer\nlist; it is not an expression.\n\nllvm-svn: 150194"},
		[d]={{"clang/lib/Sema/SemaStmt.cpp",3641,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (HasDeducedReturnType) {\n  // ...\n  } else if (CurCap->HasImplicitReturnType) {\n    // For blocks/lambdas with implicit return types, we check each return\n    // statement individually, and deduce the common return type when the block\n    // or lambda is completed.\n    // FIXME: Fold this into the \'auto\' codepath above.\n    if (RetValExp && !isa<InitListExpr>(RetValExp)) {\n    // ...\n    } else {\n      if (RetValExp) {\n        // ...\n        Diag(ReturnLoc, diag::err_lambda_return_init_list) << RetValExp->getSourceRange();"},{"clang/lib/Sema/SemaStmt.cpp",3798,"/// 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/expr/expr.prim/expr.prim.lambda/p4.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp:21:20: error: cannot deduce lambda return type from initializer list"}
		}
	},
	["err_lambda_template_parameter_list_empty"]={
		[b]={{nil,r,"err_lambda_template_parameter_list_empty"}},
		[i]={{nil,r,"lambda template parameter list cannot be empty"}},
		[j]={{nil,r,"lambda template parameter list cannot be empty"}},
		[h]=k,
		[c]="lambda template parameter list cannot be empty",
		[f]=a,
		[e]={{nil,r,C}},
		[g]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas\n\nDifferential Revision: https://reviews.llvm.org/D36527\n\nllvm-svn: 359967"},
		[d]={{db,1344,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  if (Tok.is(tok::less)) {\n    // ...\n    if (TemplateParams.empty()) {\n      Diag(RAngleLoc, diag::err_lambda_template_parameter_list_empty);"}},
		[l]={
			["clang/test/Parser/cxx2a-template-lambdas.cpp"]={"clang/test/Parser/cxx2a-template-lambdas.cpp:4:14: error: lambda template parameter list cannot be empty"}
		}
	},
	["err_lambda_unevaluated_operand"]={
		[b]="err_lambda_unevaluated_operand",
		[i]="lambda expression in an unevaluated operand",
		[j]="lambda expression in an unevaluated operand",
		[h]=k,
		[c]="lambda expression in an unevaluated operand",
		[f]=a,
		[e]=T,
		[g]={"896254916416",1328775283,"Implement C++ [expr.prim.lambda]p2, which bans lambda expressions in","Implement C++ [expr.prim.lambda]p2, which bans lambda expressions in\nunevaluated operands. Be certain that we\'re marking everything\nreferenced within a capture initializer as odr-used.\n\nllvm-svn: 150163"},
		[d]={{q,18483,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  if (!Rec.Lambdas.empty()) {\n    // ...\n    if (!getLangOpts().CPlusPlus20 && (Rec.ExprContext == ExpressionKind::EK_TemplateArgument || Rec.isUnevaluated() || (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17))) {\n      // ...\n      if (Rec.isUnevaluated()) {\n        // ...\n        D = diag::err_lambda_unevaluated_operand;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:18:19: error: lambda expression in an unevaluated operand","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:20:38: error: lambda expression in an unevaluated operand","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:40:14: error: lambda expression in an unevaluated operand"}
		}
	},
	["err_language_linkage_spec_unknown"]={
		[b]="err_language_linkage_spec_unknown",
		[i]="unknown linkage language",
		[j]="unknown linkage language",
		[h]=k,
		[c]="unknown linkage language",
		[f]=a,
		[e]=m,
		[g]={"4ee696d55cbb",1392679527,"PR18870: Parse language linkage specifiers properly if the string-literal is","PR18870: Parse language linkage specifiers properly if the string-literal is\nspelled in an interesting way.\n\nllvm-svn: 201536"},
		[d]={{t,16534,"/// ActOnStartLinkageSpecification - Parsed the beginning of a C++\n/// linkage specification, including the language and (if present)\n/// the \'{\'. ExternLoc is the location of the \'extern\', Lang is the\n/// language string literal. LBraceLoc, if valid, provides the location of\n/// the \'{\' brace. Otherwise, this linkage specification does not\n/// have any braces.\nDecl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc, Expr *LangStr, SourceLocation LBraceLoc) {\n  // ...\n  if (Lang == \"C\")\n  // ...\n  else if (Lang == \"C++\")\n  // ...\n  else {\n    Diag(LangStr->getExprLoc(), diag::err_language_linkage_spec_unknown) << LangStr->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:264:10: error: unknown linkage language"}
		}
	},
	["err_late_asm_label_name"]={
		[b]="err_late_asm_label_name",
		[i]="cannot apply asm label to %select{variable|function}0 after its first use",
		[j]={{nil,nil,{"cannot apply asm label to ",{"variable","function"}," after its first use"}}},
		[h]=k,
		[c]="cannot apply asm label to (?:variable|function) after its first use",
		[f]=a,
		[e]=m,
		[g]={"6ee53bc0850c",1449869335,"Error on redeclaring with a conflicting asm label and on redeclaring with an asm label after the fir...","Error on redeclaring with a conflicting asm label and on redeclaring with an asm label after the first ODR-use. Detects problems like the one in PR22830 where gcc and clang both compiled the file but with different behaviour.\n\nllvm-svn: 255371"},
		[d]={{p,3246,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) {\n    if (AsmLabelAttr *OldA = Old->getAttr<AsmLabelAttr>()) {\n    // ...\n    } else if (Old->isUsed()) {\n      // ...\n      Diag(New->getLocation(), diag::err_late_asm_label_name) << isa<FunctionDecl>(Old) << New->getAttr<AsmLabelAttr>()->getRange();"}},
		[l]={
			["clang/test/Sema/asm-label.c"]={"clang/test/Sema/asm-label.c:10:6: error: cannot apply asm label to function after its first use","clang/test/Sema/asm-label.c:21:5: error: cannot apply asm label to variable after its first use"}
		}
	},
	["err_lexing_char"]={
		[b]={{nil,B,"err_lexing_char"}},
		[i]={{nil,B,"failure when lexing a character literal"}},
		[j]={{nil,B,"failure when lexing a character literal"}},
		[h]=k,
		[c]="failure when lexing a character literal",
		[f]=a,
		[e]={{nil,B,O}},
		[g]={N,1625925174,M,L},
		[d]={{ab,1671,"/// \\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  // Skip over the entry quote.\n  if (begin[0] != \'\\\'\') {\n    PP.Diag(Loc, diag::err_lexing_char);"}}
	},
	["err_lexing_numeric"]={
		[b]={{nil,B,"err_lexing_numeric"}},
		[i]={{nil,B,"failure when lexing a numeric literal"}},
		[j]={{nil,B,"failure when lexing a numeric literal"}},
		[h]=k,
		[c]="failure when lexing a numeric literal",
		[f]=a,
		[e]={{nil,B,O}},
		[g]={N,1625925174,M,L},
		[d]={{ab,922,"///       integer-constant: [C99 6.4.4.1]\n///         decimal-constant integer-suffix\n///         octal-constant integer-suffix\n///         hexadecimal-constant integer-suffix\n///         binary-literal integer-suffix [GNU, C++1y]\n///       user-defined-integer-literal: [C++11 lex.ext]\n///         decimal-literal ud-suffix\n///         octal-literal ud-suffix\n///         hexadecimal-literal ud-suffix\n///         binary-literal ud-suffix [GNU, C++1y]\n///       decimal-constant:\n///         nonzero-digit\n///         decimal-constant digit\n///       octal-constant:\n///         0\n///         octal-constant octal-digit\n///       hexadecimal-constant:\n///         hexadecimal-prefix hexadecimal-digit\n///         hexadecimal-constant hexadecimal-digit\n///       hexadecimal-prefix: one of\n///         0x 0X\n///       binary-literal:\n///         0b binary-digit\n///         0B binary-digit\n///         binary-literal binary-digit\n///       integer-suffix:\n///         unsigned-suffix [long-suffix]\n///         unsigned-suffix [long-long-suffix]\n///         long-suffix [unsigned-suffix]\n///         long-long-suffix [unsigned-sufix]\n///       nonzero-digit:\n///         1 2 3 4 5 6 7 8 9\n///       octal-digit:\n///         0 1 2 3 4 5 6 7\n///       hexadecimal-digit:\n///         0 1 2 3 4 5 6 7 8 9\n///         a b c d e f\n///         A B C D E F\n///       binary-digit:\n///         0\n///         1\n///       unsigned-suffix: one of\n///         u U\n///       long-suffix: one of\n///         l L\n///       long-long-suffix: one of\n///         ll LL\n///\n///       floating-constant: [C99 6.4.4.2]\n///         TODO: add rules...\n///\nNumericLiteralParser::NumericLiteralParser(StringRef TokSpelling, SourceLocation TokLoc, const SourceManager &SM, const LangOptions &LangOpts, const TargetInfo &Target, DiagnosticsEngine &Diags) : SM(SM), LangOpts(LangOpts), Diags(Diags), ThisTokBegin(TokSpelling.begin()), ThisTokEnd(TokSpelling.end()) {\n  // ...\n  // This routine assumes that the range begin/end matches the regex for integer\n  // and FP constants (specifically, the \'pp-number\' regex), and assumes that\n  // the byte at \"*end\" is both valid and not part of the regex.  Because of\n  // this, it doesn\'t have to check for \'overscan\' in various places.\n  if (isPreprocessingNumberBody(*ThisTokEnd)) {\n    Diags.Report(TokLoc, diag::err_lexing_numeric);"}}
	},
	["err_lexing_string"]={
		[b]="err_lexing_string",
		[i]={{nil,B,"failure when lexing a string literal"},{w,nil,"failure when lexing a string"}},
		[j]={{nil,B,"failure when lexing a string literal"},{w,nil,"failure when lexing a string"}},
		[h]=k,
		[c]="failure when lexing a string literal",
		[f]=a,
		[e]=O,
		[g]={"9933e3ac88ad",1336067432,"In StringLiteralParser::init, make sure we emit an error when","In StringLiteralParser::init, make sure we emit an error when\nfailing to lex the string, as suggested by Eli.\n\nPart of rdar://11305263.\n\nllvm-svn: 156081"},
		[d]={{ab,2289,"void StringLiteralParser::DiagnoseLexingError(SourceLocation Loc) {\n  // ...\n  if (Diags)\n    Diags->Report(Loc, diag::err_lexing_string);"}}
	},
	["err_lifetimebound_ctor_dtor"]={
		[b]={{nil,A,"err_lifetimebound_ctor_dtor"}},
		[i]={{nil,A,"\'lifetimebound\' attribute cannot be applied to a %select{constructor|destructor}0"}},
		[j]={{nil,A,{"\'lifetimebound\' attribute cannot be applied to a ",{"constructor",ob}}}},
		[h]=k,
		[c]="\'lifetimebound\' attribute cannot be applied to a (?:constructor|destructor)",
		[f]=a,
		[e]={{nil,A,m}},
		[g]={"f4e248c23e05",1533083605,"[P0936R0] add [[clang::lifetimebound]] attribute","[P0936R0] add [[clang::lifetimebound]] attribute\n\nThis patch adds support for a new attribute, [[clang::lifetimebound]], that\nindicates that the lifetime of a function result is related to one of the\nfunction arguments. When walking an initializer to make sure that the lifetime\nof the initial value is at least as long as the lifetime of the initialized\nobject, we step through parameters (including the implicit object parameter of\na non-static member function) that are marked with this attribute.\n\nThere\'s nowhere to write an attribute on the implicit object parameter, so in\nlieu of that, it may be applied to a function type (where it appears\nimmediately after the cv-qualifiers and ref-qualifier, which is as close to a\ndeclaration of the implicit object parameter as we have). I\'m currently\nmodeling this in the AST as the attribute appertaining to the function type.\n\nDifferential Revision: https://reviews.llvm.org/D49922\n\nllvm-svn: 338464"},
		[d]={{p,7027,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // Check the attributes on the function type, if any.\n  if (const auto *FD = dyn_cast<FunctionDecl>(&ND)) {\n    // ...\n    for (TypeLoc TL = FD->getTypeSourceInfo()->getTypeLoc(); (ATL = TL.getAsAdjusted<AttributedTypeLoc>()); TL = ATL.getModifiedLoc()) {\n      // The [[lifetimebound]] attribute can be applied to the implicit object\n      // parameter of a non-static member function (other than a ctor or dtor)\n      // by applying it to the function type.\n      if (const auto *A = ATL.getAttrAs<LifetimeBoundAttr>()) {\n        // ...\n        if (!MD || MD->isStatic()) {\n        // ...\n        } else if (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)) {\n          S.Diag(A->getLocation(), diag::err_lifetimebound_ctor_dtor) << isa<CXXDestructorDecl>(MD) << A->getRange();"}},
		[l]={
			["clang/test/SemaCXX/attr-lifetimebound.cpp"]={"clang/test/SemaCXX/attr-lifetimebound.cpp:9:11: error: \'lifetimebound\' attribute cannot be applied to a constructor","clang/test/SemaCXX/attr-lifetimebound.cpp:10:12: error: \'lifetimebound\' attribute cannot be applied to a destructor"}
		}
	},
	["err_lifetimebound_no_object_param"]={
		[b]={{nil,A,"err_lifetimebound_no_object_param"}},
		[i]={{nil,A,"\'lifetimebound\' attribute cannot be applied; %select{static |non-}0member function has no implicit object parameter"}},
		[j]={{nil,A,{"\'lifetimebound\' attribute cannot be applied; ",{"static ","non-"},"member function has no implicit object parameter"}}},
		[h]=k,
		[c]="\'lifetimebound\' attribute cannot be applied; (?:static |non\\-)member function has no implicit object parameter",
		[f]=a,
		[e]={{nil,A,m}},
		[g]={"f4e248c23e05",1533083605,"[P0936R0] add [[clang::lifetimebound]] attribute","[P0936R0] add [[clang::lifetimebound]] attribute\n\nThis patch adds support for a new attribute, [[clang::lifetimebound]], that\nindicates that the lifetime of a function result is related to one of the\nfunction arguments. When walking an initializer to make sure that the lifetime\nof the initial value is at least as long as the lifetime of the initialized\nobject, we step through parameters (including the implicit object parameter of\na non-static member function) that are marked with this attribute.\n\nThere\'s nowhere to write an attribute on the implicit object parameter, so in\nlieu of that, it may be applied to a function type (where it appears\nimmediately after the cv-qualifiers and ref-qualifier, which is as close to a\ndeclaration of the implicit object parameter as we have). I\'m currently\nmodeling this in the AST as the attribute appertaining to the function type.\n\nDifferential Revision: https://reviews.llvm.org/D49922\n\nllvm-svn: 338464"},
		[d]={{p,7024,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n  // ...\n  // Check the attributes on the function type, if any.\n  if (const auto *FD = dyn_cast<FunctionDecl>(&ND)) {\n    // ...\n    for (TypeLoc TL = FD->getTypeSourceInfo()->getTypeLoc(); (ATL = TL.getAsAdjusted<AttributedTypeLoc>()); TL = ATL.getModifiedLoc()) {\n      // The [[lifetimebound]] attribute can be applied to the implicit object\n      // parameter of a non-static member function (other than a ctor or dtor)\n      // by applying it to the function type.\n      if (const auto *A = ATL.getAttrAs<LifetimeBoundAttr>()) {\n        // ...\n        if (!MD || MD->isStatic()) {\n          S.Diag(A->getLocation(), diag::err_lifetimebound_no_object_param) << !MD << A->getRange();"}},
		[l]={
			["clang/test/SemaCXX/attr-lifetimebound.cpp"]={"clang/test/SemaCXX/attr-lifetimebound.cpp:7:29: error: \'lifetimebound\' attribute cannot be applied; non-member function has no implicit object parameter","clang/test/SemaCXX/attr-lifetimebound.cpp:11:41: error: \'lifetimebound\' attribute cannot be applied; static member function has no implicit object parameter"}
		}
	},
	["err_list_init_in_parens"]={
		[b]="err_list_init_in_parens",
		[i]="list-initializer for non-class type %0 must not be parenthesized",
		[j]="list-initializer for non-class type A must not be parenthesized",
		[h]=k,
		[c]="cannot initialize (?:non\\-class|reference) type (.*?) with a parenthesized initializer list",
		[f]=a,
		[e]=m,
		[g]={"3852637005b1",1478965135,"Use descriptive message if list initializer is incorrectly parenthesized.","Use descriptive message if list initializer is incorrectly parenthesized.\n\nIf initializer contains parentheses around braced list where it is not allowed,\nas in construct int({0}), clang issued message like `functional-style cast\nfrom \'void\' to \'int\' is not allowed`, which does not help much. Both gcc and\nmsvc issue message `list-initializer for non-class type must not be\nparenthesized`, which is more descriptive. This change implements similar\nmessage for clang.\n\nDifferential Revision: https://reviews.llvm.org/D25816\n\nllvm-svn: 286721"},
		[d]={{H,9573,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ParenthesizedListInitForReference:\n    S.Diag(Kind.getLocation(), diag::err_list_init_in_parens) << 1 << Entity.getType() << Args[0]->getSourceRange();"},{H,9823,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ParenthesizedListInitForScalar:\n    S.Diag(Kind.getLocation(), diag::err_list_init_in_parens) << 0 << Entity.getType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-initializer-scalars.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:94:9: error: cannot initialize non-class type \'int\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:95:12: error: cannot initialize non-class type \'int\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:96:9: error: cannot initialize non-class type \'int\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:98:10: error: cannot initialize non-class type \'int *\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:100:14: error: cannot initialize non-class type \'intptr\' (aka \'int *\') with a parenthesized initializer list"}
		}
	},
	["err_literal_operator_bad_param_count"]={
		[b]="err_literal_operator_bad_param_count",
		[i]="non-template literal operator must have one or two parameters",
		[j]="non-template literal operator must have one or two parameters",
		[h]=k,
		[c]="non\\-template literal operator must have one or two parameters",
		[f]=a,
		[e]=m,
		[g]={cc,1455667444,gc,kc},
		[d]={{t,16481,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n  // ...\n  } else {\n    Diag(FnDecl->getLocation(), diag::err_literal_operator_bad_param_count);"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p5.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p5.cpp:15:15: error: non-template literal operator must have one or two parameters"}
		}
	},
	["err_literal_operator_default_argument"]={
		[b]="err_literal_operator_default_argument",
		[i]="literal operator cannot have a default argument",
		[j]="literal operator cannot have a default argument",
		[h]=k,
		[c]="literal operator cannot have a default argument",
		[f]=a,
		[e]=m,
		[g]={"768ceccc75f0",1331280982,"Literal operators can\'t have default arguments.","Literal operators can\'t have default arguments.\n\nllvm-svn: 152394"},
		[d]={{t,16492,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // A parameter-declaration-clause containing a default argument is not\n  // equivalent to any of the permitted forms.\n  for (auto *Param : FnDecl->parameters()) {\n    if (Param->hasDefaultArg()) {\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_literal_operator_default_argument) << Param->getDefaultArgRange();"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p3.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p3.cpp:40:44: error: literal operator cannot have a default argument"}
		}
	},
	["err_literal_operator_extern_c"]={
		[b]="err_literal_operator_extern_c",
		[i]="literal operator must have C++ linkage",
		[j]="literal operator must have C++ linkage",
		[h]=k,
		[c]="literal operator must have C\\+\\+ linkage",
		[f]=a,
		[e]=m,
		[g]={"72eebee0cb6a",1330854076,"Add tests for [over.literal]. Fix a few bugs which were exposed by the tests.","Add tests for [over.literal]. Fix a few bugs which were exposed by the tests.\n\nllvm-svn: 151997"},
		[d]={{t,16353,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  if (FnDecl->isExternC()) {\n    Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:4:17: error: literal operator must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:9:8: error: literal operator must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:12:10: error: literal operator must have C++ linkage"}
		}
	},
	["err_literal_operator_id_outside_namespace"]={
		[b]="err_literal_operator_id_outside_namespace",
		[i]="non-namespace scope \'%0\' cannot have a literal operator member",
		[j]="non-namespace scope \'A\' cannot have a literal operator member",
		[h]=k,
		[c]="non\\-namespace scope \'(.*?)\' cannot have a literal operator member",
		[f]=a,
		[e]=m,
		[g]={"d091dc179dbd",1386205113,"Reject template-ids containing literal-operator-ids that have a dependent","Reject template-ids containing literal-operator-ids that have a dependent\nnested-name-specifier, rather than crashing. (In fact, reject all\nliteral-operator-ids that have a non-namespace nested-name-specifier). The\ngrammar doesn\'t allow these in some cases, and in other cases does allow them\nbut instantiation will always fail.\n\nllvm-svn: 196443"},
		[d]={{I,531,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  // ...\n  case NestedNameSpecifier::Identifier:\n  case NestedNameSpecifier::TypeSpec:\n  case NestedNameSpecifier::TypeSpecWithTemplate:\n    // ...\n    Diag(Name.getBeginLoc(), diag::err_literal_operator_id_outside_namespace) << SS.getScopeRep();"}},
		[l]={
			["clang/test/SemaCXX/cxx11-user-defined-literals.cpp"]={"clang/test/SemaCXX/cxx11-user-defined-literals.cpp:153:17: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:154:17: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:155:8: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:156:26: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:158:8: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:165:8: error: non-namespace scope \'S::\' cannot have a literal operator member"}
		}
	},
	["err_literal_operator_invalid_param"]={
		[b]="err_literal_operator_invalid_param",
		[i]="parameter of literal operator must have type \'unsigned long long\', \'long double\', \'char\', \'wchar_t\', \'char16_t\', \'char32_t\', or \'const char *\'",
		[j]="parameter of literal operator must have type \'unsigned long long\', \'long double\', \'char\', \'wchar_t\', \'char16_t\', \'char32_t\', or \'const char *\'",
		[h]=k,
		[c]="parameter of literal operator must have type \'unsigned long long\', \'long double\', \'char\', \'wchar_t\', \'char16_t\', \'char32_t\', or \'const char \\*\'",
		[f]=a,
		[e]=m,
		[g]={cc,1455667444,gc,kc},
		[d]={{t,16421,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n    // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n    // ...\n    } else if (ParamType->isRealFloatingType()) {\n    // ...\n    } else if (ParamType->isIntegerType()) {\n    // ...\n    } else {\n      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_invalid_param) << ParamType << Param->getSourceRange();"}}
	},
	["err_literal_operator_outside_namespace"]={
		[b]="err_literal_operator_outside_namespace",
		[i]="literal operator %0 must be in a namespace or global scope",
		[j]="literal operator A must be in a namespace or global scope",
		[h]=k,
		[c]="literal operator (.*?) must be in a namespace or global scope",
		[f]=a,
		[e]=m,
		[g]={"c88db06565fc",1263373262,"Implement semantic checking for C++ literal operators.","Implement semantic checking for C++ literal operators.\nThis now rejects literal operators that don\'t meet the requirements.\nTemplates are not yet checked for.\n\nllvm-svn: 93315"},
		[d]={{t,16347,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  if (isa<CXXMethodDecl>(FnDecl)) {\n    Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace) << FnDecl->getDeclName();"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p2.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p2.cpp:14:8: error: literal operator \'operator\"\"_c\' must be in a namespace or global scope","clang/test/CXX/over/over.oper/over.literal/p2.cpp:16:15: error: literal operator \'operator\"\"_c\' must be in a namespace or global scope","clang/test/CXX/over/over.oper/over.literal/p2.cpp:40:10: error: literal operator \'operator\"\"_x\' must be in a namespace or global scope"}
		}
	},
	["err_literal_operator_param"]={
		[b]="err_literal_operator_param",
		[i]="invalid literal operator parameter type %0, did you mean %1?",
		[j]="invalid literal operator parameter type A, did you mean B?",
		[h]=k,
		[c]="invalid literal operator parameter type (.*?), did you mean (.*?)\\?",
		[f]=a,
		[e]=m,
		[g]={cc,1455667444,gc,kc},
		[d]={{t,16404,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n    // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n      // ...\n      // Pointer parameter must be a const char *.\n      if (!(Context.hasSameType(InnerType.getUnqualifiedType(), Context.CharTy) && InnerType.isConstQualified() && !InnerType.isVolatileQualified())) {\n        Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) << ParamType << \"\'const char *\'\" << Param->getSourceRange();"},{t,16410,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n    // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n    // ...\n    } else if (ParamType->isRealFloatingType()) {\n      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) << ParamType << Context.LongDoubleTy << Param->getSourceRange();"},{t,16415,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n    // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n    // ...\n    } else if (ParamType->isRealFloatingType()) {\n    // ...\n    } else if (ParamType->isIntegerType()) {\n      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) << ParamType << Context.UnsignedLongLongTy << Param->getSourceRange();"},{t,16439,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    if (!PT) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << FirstParamType << \"\'const char *\'\" << (*Param)->getSourceRange();"},{t,16448,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    // First parameter must be const\n    if (!PointeeType.isConstQualified() || PointeeType.isVolatileQualified()) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << FirstParamType << \"\'const char *\'\" << (*Param)->getSourceRange();"},{t,16463,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    // Only const char *, const wchar_t*, const char8_t*, const char16_t*, and\n    // const char32_t* are allowed as the first parameter to a two-parameter\n    // function\n    if (!(Context.hasSameType(InnerType, Context.CharTy) || Context.hasSameType(InnerType, Context.WideCharTy) || Context.hasSameType(InnerType, Context.Char8Ty) || Context.hasSameType(InnerType, Context.Char16Ty) || Context.hasSameType(InnerType, Context.Char32Ty))) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << FirstParamType << \"\'const char *\'\" << (*Param)->getSourceRange();"},{t,16475,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    if (!Context.hasSameType(SecondParamType, Context.getSizeType())) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << SecondParamType << Context.getSizeType() << (*Param)->getSourceRange();"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p8.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p8.cpp:14:27: error: invalid literal operator parameter type \'double\', did you mean \'long double\'?"}
		}
	},
	["err_literal_operator_string_not_empty"]={
		[b]="err_literal_operator_string_not_empty",
		[i]="string literal after \'operator\' must be \'\"\"\'",
		[j]="string literal after \'operator\' must be \'\"\"\'",
		[h]=k,
		[c]="string literal after \'operator\' must be \'\"\"\'",
		[f]=a,
		[e]=C,
		[g]={"d67aea28f6cb",1331004107,"User-defined literals: reject string and character UDLs in all places where the","User-defined literals: reject string and character UDLs in all places where the\ngrammar requires a string-literal and not a user-defined-string-literal. The\ntwo constructs are still represented by the same TokenKind, in order to prevent\na combinatorial explosion of different kinds of token. A flag on Token tracks\nwhether a ud-suffix is present, in order to prevent clients from needing to look\nat the token\'s spelling.\n\nllvm-svn: 152098"},
		[d]={{db,2778,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n    // ...\n    // The string literal must be empty.\n    if (!Literal.GetString().empty() || Literal.Pascal) {\n      // ...\n      DiagId = diag::err_literal_operator_string_not_empty;"}},
		[l]={
			["clang/test/Parser/cxx0x-literal-operators.cpp"]={"clang/test/Parser/cxx0x-literal-operators.cpp:4:15: error: string literal after \'operator\' must be \'\"\"\'"}
		}
	},
	["err_literal_operator_string_prefix"]={
		[b]="err_literal_operator_string_prefix",
		[i]="string literal after \'operator\' cannot have an encoding prefix",
		[j]="string literal after \'operator\' cannot have an encoding prefix",
		[h]=k,
		[c]="string literal after \'operator\' cannot have an encoding prefix",
		[f]=a,
		[e]=C,
		[g]={"7d182a790988",1331247962,"Fix a couple of issues with literal-operator-id parsing, and provide recovery","Fix a couple of issues with literal-operator-id parsing, and provide recovery\nfor a few kinds of error. Specifically:\n\nSince we\'re after translation phase 6, the \"\" token might be formed by multiple\nsource-level string literals. Checking the token width is not a correct way of\ndetecting empty string literals, due to escaped newlines. Diagnose and recover\nfrom a missing space between \"\" and suffix, and from string literals other than\n\"\", which are followed by a suffix.\n\nllvm-svn: 152348"},
		[d]={{db,2741,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n    // ...\n    while (isTokenStringLiteral()) {\n      if (!Tok.is(tok::string_literal) && !DiagId) {\n        // ...\n        DiagId = diag::err_literal_operator_string_prefix;"}},
		[l]={
			["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:109:15: error: string literal after \'operator\' cannot have an encoding prefix","clang/test/Parser/cxx11-user-defined-literals.cpp:111:1: error: string literal after \'operator\' cannot have an encoding prefix"}
		}
	},
	["err_literal_operator_template"]={
		[b]="err_literal_operator_template",
		[i]="template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'",
		[j]="template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'",
		[h]=k,
		[c]="template parameter list for literal operator must be either \'char\\.\\.\\.\' or \'typename T, T\\.\\.\\.\'",
		[f]=a,
		[e]=m,
		[g]={cc,1455667444,gc,kc},
		[d]={{t,16337,"static bool checkLiteralOperatorTemplateParameterList(Sema &SemaRef, FunctionTemplateDecl *TpDecl) {\n  // ...\n  SemaRef.Diag(TpDecl->getTemplateParameters()->getSourceRange().getBegin(), diag::err_literal_operator_template) << TpDecl->getTemplateParameters()->getSourceRange();"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p5.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p5.cpp:18:1: error: template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'","clang/test/CXX/over/over.oper/over.literal/p5.cpp:20:1: error: template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'"}
		}
	},
	["err_literal_operator_template_with_params"]={
		[b]="err_literal_operator_template_with_params",
		[i]="literal operator template cannot have any parameters",
		[j]="literal operator template cannot have any parameters",
		[h]=k,
		[c]="literal operator template cannot have any parameters",
		[f]=a,
		[e]=m,
		[g]={cc,1455667444,gc,kc},
		[d]={{t,16375,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n    if (FnDecl->param_size() != 0) {\n      Diag(FnDecl->getLocation(), diag::err_literal_operator_template_with_params);"}},
		[l]={
			["clang/test/CXX/over/over.oper/over.literal/p8.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p8.cpp:15:23: error: literal operator template cannot have any parameters"}
		}
	},
	["err_loader_uninitialized_cant_init"]={
		[b]={{nil,o,"err_loader_uninitialized_cant_init"}},
		[i]={{nil,o,"variable with \'loader_uninitialized\' attribute cannot have an initializer"}},
		[j]={{nil,o,"variable with \'loader_uninitialized\' attribute cannot have an initializer"}},
		[h]=k,
		[c]="variable with \'loader_uninitialized\' attribute cannot have an initializer",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{p,13276,"/// 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  // The LoaderUninitialized attribute acts as a definition (of undef).\n  if (VDecl->hasAttr<LoaderUninitializedAttr>()) {\n    Diag(VDecl->getLocation(), diag::err_loader_uninitialized_cant_init);"}},
		[l]={
			["clang/test/Sema/attr-loader-uninitialized.c"]={"clang/test/Sema/attr-loader-uninitialized.c:20:5: error: variable with \'loader_uninitialized\' attribute cannot have an initializer","clang/test/Sema/attr-loader-uninitialized.c:37:24: error: variable with \'loader_uninitialized\' attribute cannot have an initializer"}
		}
	},
	["err_loader_uninitialized_extern_decl"]={
		[b]={{nil,o,"err_loader_uninitialized_extern_decl"}},
		[i]={{nil,o,"variable %0 cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute"}},
		[j]={{nil,o,"variable A cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute"}},
		[h]=k,
		[c]="variable (.*?) cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{p,13722,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      if (Var->getStorageClass() == SC_Extern) {\n        Diag(Var->getLocation(), diag::err_loader_uninitialized_extern_decl) << Var;"}},
		[l]={
			["clang/test/Sema/attr-loader-uninitialized.c"]={"clang/test/Sema/attr-loader-uninitialized.c:10:12: error: variable \'external_rejected\' cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute","clang/test/Sema/attr-loader-uninitialized.c:14:17: error: variable \'incomplete_external_rejected\' cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute","clang/test/Sema/attr-loader-uninitialized.c:40:50: error: variable \'extern_hidden\' cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute"}
		}
	},
	["err_loader_uninitialized_redeclaration"]={
		[b]={{nil,o,"err_loader_uninitialized_redeclaration"}},
		[i]={{nil,o,"redeclaration cannot add \'loader_uninitialized\' attribute"}},
		[j]={{nil,o,"redeclaration cannot add \'loader_uninitialized\' attribute"}},
		[h]=k,
		[c]="redeclaration cannot add \'loader_uninitialized\' attribute",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{p,3099,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<C11NoReturnAttr>(NewAttribute)) {\n    // ...\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    // ...\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n    // ...\n    } else if (isa<LoaderUninitializedAttr>(NewAttribute)) {\n      // If there is a C definition followed by a redeclaration with this\n      // attribute then there are two different definitions. In C++, prefer the\n      // standard diagnostics.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(NewAttribute->getLocation(), diag::err_loader_uninitialized_redeclaration);"}},
		[l]={
			["clang/test/Sema/attr-loader-uninitialized.c"]={"clang/test/Sema/attr-loader-uninitialized.c:27:52: error: redeclaration cannot add \'loader_uninitialized\' attribute"}
		}
	},
	["err_loader_uninitialized_trivial_ctor"]={
		[b]={{nil,o,"err_loader_uninitialized_trivial_ctor"}},
		[i]={{nil,o,"variable with \'loader_uninitialized\' attribute must have a trivial default constructor"}},
		[j]={{nil,o,"variable with \'loader_uninitialized\' attribute must have a trivial default constructor"}},
		[h]=k,
		[c]="variable with \'loader_uninitialized\' attribute must have a trivial default constructor",
		[f]=a,
		[e]={{nil,o,m}},
		[g]={hb,1576908663,ib,fb},
		[d]={{p,13734,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      // ...\n      if (CXXRecordDecl *RD = Var->getType()->getAsCXXRecordDecl()) {\n        if (!RD->hasTrivialDefaultConstructor()) {\n          Diag(Var->getLocation(), diag::err_loader_uninitialized_trivial_ctor);"}},
		[l]={
			["clang/test/Sema/attr-loader-uninitialized.cpp"]={"clang/test/Sema/attr-loader-uninitialized.cpp:62:12: error: variable with \'loader_uninitialized\' attribute must have a trivial default constructor"}
		}
	},
	["err_local_cant_init"]={
		[b]="err_local_cant_init",
		[i]="\'__local\' variable cannot have an initializer",
		[j]="\'__local\' variable cannot have an initializer",
		[h]=k,
		[c]="\'__local\' variable cannot have an initializer",
		[f]=a,
		[e]=m,
		[g]={"2dbb708b8ade",1316466875,"OpenCL: introduce support for function scope __local variables","OpenCL: introduce support for function scope __local variables\n\nllvm-svn: 140068"},
		[d]={{p,13269,"/// 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  // OpenCL 1.1 6.5.2: \"Variables allocated in the __local address space inside\n  // a kernel function cannot be initialized.\"\n  if (VDecl->getType().getAddressSpace() == LangAS::opencl_local) {\n    Diag(VDecl->getLocation(), diag::err_local_cant_init);"}},
		[l]={
			["clang/test/SemaOpenCL/atomic-init.cl"]={"clang/test/SemaOpenCL/atomic-init.cl:9:20: error: \'__local\' variable cannot have an initializer"}
		}
	},
	["err_loongarch_builtin_requires_la32"]={
		[b]={{nil,n,"err_loongarch_builtin_requires_la32"}},
		[i]={{nil,n,"this builtin requires target: loongarch32"}},
		[j]={{nil,n,"this builtin requires target: loongarch32"}},
		[h]=k,
		[c]="this builtin requires target\\: loongarch32",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{K,3840,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_cacop_w: {\n    if (BuiltinID == LoongArch::BI__builtin_loongarch_cacop_w && !TI.hasFeature(\"32bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la32) << TheCall->getSourceRange();"}}
	},
	["err_loongarch_builtin_requires_la64"]={
		[b]={{nil,n,"err_loongarch_builtin_requires_la64"}},
		[i]={{nil,n,"this builtin requires target: loongarch64"}},
		[j]={{nil,n,"this builtin requires target: loongarch64"}},
		[h]=k,
		[c]="this builtin requires target\\: loongarch64",
		[f]=a,
		[e]={{nil,n,v}},
		[g]={N,1625925174,M,L},
		[d]={{K,3833,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_cacop_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3861,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_crc_w_b_w:\n  case LoongArch::BI__builtin_loongarch_crc_w_h_w:\n  case LoongArch::BI__builtin_loongarch_crc_w_w_w:\n  case LoongArch::BI__builtin_loongarch_crc_w_d_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_b_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_h_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_w_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_d_w:\n  case LoongArch::BI__builtin_loongarch_iocsrrd_d:\n  case LoongArch::BI__builtin_loongarch_iocsrwr_d:\n  case LoongArch::BI__builtin_loongarch_asrtle_d:\n  case LoongArch::BI__builtin_loongarch_asrtgt_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3879,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_csrrd_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3885,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_csrwr_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3891,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_csrxchg_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3898,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_lddir_d:\n  case LoongArch::BI__builtin_loongarch_ldpte_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"}},
		[l]={
			["clang/test/CodeGen/LoongArch/intrinsic-la32-error.c"]={"clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:6:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:51:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:55:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:59:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:63:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:66:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:70:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:74:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:78:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:82:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:86:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:90:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:112:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:116:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:120:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:124:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:128:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:132:3: error: this builtin requires target: loongarch64"}
		}
	},
	["err_lvalue_reference_bind_to_initlist"]={
		[b]="err_lvalue_reference_bind_to_initlist",
		[i]="%select{non-const|volatile}0 lvalue reference to type %1 cannot bind to an initializer list temporary",
		[j]={{nil,nil,{{"non-const",eb}," lvalue reference to type B cannot bind to an initializer list temporary"}}},
		[h]=k,
		[c]="(?:non\\-const|volatile) lvalue reference to type (.*?) cannot bind to an initializer list temporary",
		[f]=a,
		[e]=m,
		[g]={"29526f09cee8",1322412607,"Reference initialization with initializer lists.","Reference initialization with initializer lists.\n\nThis supports single-element initializer lists for references according to DR1288, as well as creating temporaries and binding to them for other initializer lists.\n\nllvm-svn: 145186"},
		[d]={{H,9694,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToTemporary:\n    if (isa<InitListExpr>(Args[0])) {\n      S.Diag(Kind.getLocation(), diag::err_lvalue_reference_bind_to_initlist) << DestType.getNonReferenceType().isVolatileQualified() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/auto-invalid-init-crash.cpp"]={"clang/test/SemaCXX/auto-invalid-init-crash.cpp:7:14: error: non-const lvalue reference to type \'std::initializer_list<int>\' cannot bind to an initializer list temporary"}
		}
	},
	["err_lvalue_reference_bind_to_temporary"]={
		[b]="err_lvalue_reference_bind_to_temporary",
		[i]="%select{non-const|volatile}0 lvalue reference %diff{to type $ cannot bind to a temporary of type $|cannot bind to incompatible temporary}1,2",
		[j]={{nil,nil,{{"non-const",eb}," lvalue reference ",{"to type B cannot bind to a temporary of type C","cannot bind to incompatible temporary"}}}},
		[h]=k,
		[c]="(?:non\\-const|volatile) lvalue reference (?:to type (.*?) cannot bind to a temporary of type (.*?)|cannot bind to incompatible temporary)",
		[f]=a,
		[e]=m,
		[g]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the","Reimplement reference initialization (C++ [dcl.init.ref]) using the\nnew notion of an \"initialization sequence\", which encapsulates the\ncomputation of the initialization sequence along with diagnostic\ninformation and the capability to turn the computed sequence into an\nexpression. At present, I\'ve only switched one CheckReferenceInit\ncallers over to this new mechanism; more will follow.\n\nAside from (hopefully) being much more true to the standard, the\ndiagnostics provided by this reference-initialization code are a bit\nbetter than before. Some examples:\n\np5-var.cpp:54:12: error: non-const lvalue reference to type \'struct\nDerived\'\n      cannot bind to a value of unrelated type \'struct Base\'\n  Derived &dr2 = b; // expected-error{{non-const lvalue reference to\n  ...\n           ^     ~\np5-var.cpp:55:9: error: binding of reference to type \'struct Base\' to\na value of\n      type \'struct Base const\' drops qualifiers\n  Base &br3 = bc; // expected-error{{drops qualifiers}}\n        ^     ~~\n\np5-var.cpp:57:15: error: ambiguous conversion from derived class\n      \'struct Diamond\' to base class \'struct Base\':\n    struct Diamond -> struct Derived -> struct Base\n    struct Diamond -> struct Derived2 -> struct Base\n  Base &br5 = diamond; // expected-error{{ambiguous conversion from\n      ...\n              ^~~~~~~\np5-var.cpp:59:9: error: non-const lvalue reference to type \'long\'\n      cannot bind to\n      a value of unrelated type \'int\'\n  long &lr = i; // expected-error{{non-const lvalue reference to type\n      ...\n        ^    ~\n\np5-var.cpp:74:9: error: non-const lvalue reference to type \'struct\nBase\' cannot\n      bind to a temporary of type \'struct Base\'\n  Base &br1 = Base(); // expected-error{{non-const lvalue reference to\n  ...\n        ^     ~~~~~~\n\np5-var.cpp:102:9: error: non-const reference cannot bind to bit-field\n\'i\'\n  int & ir1 = (ib.i); // expected-error{{non-const reference cannot\n  ...\n        ^     ~~~~~~\np5-var.cpp:98:7: note: bit-field is declared here\n  int i : 17; // expected-note{{bit-field is declared here}}\n      ^\n\nllvm-svn: 90992"},
		[d]={{H,9705,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToUnrelated:\n    S.Diag(Kind.getLocation(), Failure == FK_NonConstLValueReferenceBindingToTemporary ? diag::err_lvalue_reference_bind_to_temporary : diag::err_lvalue_reference_bind_to_unrelated) << DestType.getNonReferenceType().isVolatileQualified() << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:6:9: error: non-const lvalue reference to type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:6:13)\' cannot bind to a temporary of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:6:13)\'"}
		}
	},
	["err_lvalue_reference_bind_to_unrelated"]={
		[b]="err_lvalue_reference_bind_to_unrelated",
		[i]="%select{non-const|volatile}0 lvalue reference %diff{to type $ cannot bind to a value of unrelated type $|cannot bind to a value of unrelated type}1,2",
		[j]={{nil,nil,{{"non-const",eb}," lvalue reference ",{"to type B cannot bind to a value of unrelated type C","cannot bind to a value of unrelated type"}}}},
		[h]=k,
		[c]="(?:non\\-const|volatile) lvalue reference (?:to type (.*?) cannot bind to a value of unrelated type (.*?)|cannot bind to a value of unrelated type)",
		[f]=a,
		[e]=m,
		[g]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the","Reimplement reference initialization (C++ [dcl.init.ref]) using the\nnew notion of an \"initialization sequence\", which encapsulates the\ncomputation of the initialization sequence along with diagnostic\ninformation and the capability to turn the computed sequence into an\nexpression. At present, I\'ve only switched one CheckReferenceInit\ncallers over to this new mechanism; more will follow.\n\nAside from (hopefully) being much more true to the standard, the\ndiagnostics provided by this reference-initialization code are a bit\nbetter than before. Some examples:\n\np5-var.cpp:54:12: error: non-const lvalue reference to type \'struct\nDerived\'\n      cannot bind to a value of unrelated type \'struct Base\'\n  Derived &dr2 = b; // expected-error{{non-const lvalue reference to\n  ...\n           ^     ~\np5-var.cpp:55:9: error: binding of reference to type \'struct Base\' to\na value of\n      type \'struct Base const\' drops qualifiers\n  Base &br3 = bc; // expected-error{{drops qualifiers}}\n        ^     ~~\n\np5-var.cpp:57:15: error: ambiguous conversion from derived class\n      \'struct Diamond\' to base class \'struct Base\':\n    struct Diamond -> struct Derived -> struct Base\n    struct Diamond -> struct Derived2 -> struct Base\n  Base &br5 = diamond; // expected-error{{ambiguous conversion from\n      ...\n              ^~~~~~~\np5-var.cpp:59:9: error: non-const lvalue reference to type \'long\'\n      cannot bind to\n      a value of unrelated type \'int\'\n  long &lr = i; // expected-error{{non-const lvalue reference to type\n      ...\n        ^    ~\n\np5-var.cpp:74:9: error: non-const lvalue reference to type \'struct\nBase\' cannot\n      bind to a temporary of type \'struct Base\'\n  Base &br1 = Base(); // expected-error{{non-const lvalue reference to\n  ...\n        ^     ~~~~~~\n\np5-var.cpp:102:9: error: non-const reference cannot bind to bit-field\n\'i\'\n  int & ir1 = (ib.i); // expected-error{{non-const reference cannot\n  ...\n        ^     ~~~~~~\np5-var.cpp:98:7: note: bit-field is declared here\n  int i : 17; // expected-note{{bit-field is declared here}}\n      ^\n\nllvm-svn: 90992"},
		[d]={{H,9706,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToUnrelated:\n    S.Diag(Kind.getLocation(), Failure == FK_NonConstLValueReferenceBindingToTemporary ? diag::err_lvalue_reference_bind_to_temporary : diag::err_lvalue_reference_bind_to_unrelated) << DestType.getNonReferenceType().isVolatileQualified() << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:32:36: error: non-const lvalue reference to type \'float\' cannot bind to a value of unrelated type \'int\'"}
		}
	},
	["err_lvalue_to_rvalue_ref"]={
		[b]="err_lvalue_to_rvalue_ref",
		[i]="rvalue reference %diff{to type $ cannot bind to lvalue of type $|cannot bind to incompatible lvalue}0,1",
		[j]={{nil,nil,{"rvalue reference ",{"to type A cannot bind to lvalue of type B","cannot bind to incompatible lvalue"}}}},
		[h]=k,
		[c]="rvalue reference (?:to type (.*?) cannot bind to lvalue of type (.*?)|cannot bind to incompatible lvalue)",
		[f]=a,
		[e]=m,
		[g]={"0f8b23f71fbe",1237245728,"Almost complete implementation of rvalue references. One bug, and a few unclear areas. Maybe Doug ca...","Almost complete implementation of rvalue references. One bug, and a few unclear areas. Maybe Doug can shed some light on some of the fixmes.\n\nllvm-svn: 67059"},
		[d]={{H,9738,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_RValueReferenceBindingToLValue:\n    S.Diag(Kind.getLocation(), diag::err_lvalue_to_rvalue_ref) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/coroutine-rvo.cpp"]={"clang/test/SemaCXX/coroutine-rvo.cpp:79:13: error: rvalue reference to type \'NoCopyNoMove\' cannot bind to lvalue of type \'NoCopyNoMove\'","clang/test/SemaCXX/coroutine-rvo.cpp:118:15: error: rvalue reference to type \'RetThis\' cannot bind to lvalue of type \'RetThis\'"}
		}
	},
	["err_machine_mode"]={
		[b]="err_machine_mode",
		[i]="%select{unknown|unsupported}0 machine mode %1",
		[j]={{nil,nil,{{"unknown","unsupported"}," machine mode B"}}},
		[h]=k,
		[c]="(?:unknown|unsupported) machine mode (.*?)",
		[f]=a,
		[e]=m,
		[g]={"0390908588fa",1387812191,"Consolidating some mode attribute diagnostics. No functional changes intended.","Consolidating some mode attribute diagnostics. No functional changes intended.\n\nllvm-svn: 197911"},
		[d]={{u,4776,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  // FIXME: Sync this with InitializePredefinedMacros; we need to match int8_t\n  // and friends, at least with glibc.\n  // FIXME: Make sure floating-point mappings are accurate\n  // FIXME: Support XF and TF types\n  if (!DestWidth) {\n    Diag(AttrLoc, diag::err_machine_mode) << 0 /*Unknown*/ << Name;"},{u,4838,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (NewElemTy.isNull()) {\n    Diag(AttrLoc, diag::err_machine_mode) << 1 /*Unsupported*/ << Name;"}},
		[l]={
			["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:21:30: error: unsupported machine mode \'QC\'","clang/test/Sema/attr-mode-vector-types.c:34:28: error: unknown machine mode \'V3QI\'"}
		}
	},
	["err_main_arg_wrong"]={
		[b]="err_main_arg_wrong",
		[i]="%select{first|second|third|fourth}0 parameter of \'main\' (%select{argument count|argument array|environment|platform-specific data}0) must be of type %1",
		[j]={{nil,nil,{{"first","second","third","fourth"}," parameter of \'main\' (",{"argument count","argument array","environment","platform-specific data"},") must be of type B"}}},
		[h]=k,
		[c]="(?:first|second|third|fourth) parameter of \'main\' \\((?:argument count|argument array|environment|platform\\-specific data)\\) must be of type (.*?)",
		[f]=a,
		[e]=m,
		[g]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
		[d]={{p,12211,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  for (unsigned i = 0; i < nparams; ++i) {\n    // ...\n    if (mismatch) {\n      Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i];"}},
		[l]={
			["clang/test/CXX/basic/basic.start/basic.start.main/p2.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.main/p2.cpp:60:1: error: first parameter of \'main\' (argument count) must be of type \'int\'"}
		}
	},
	["err_main_global_variable"]={
		[b]="err_main_global_variable",
		[i]="main cannot be declared as global variable",
		[j]="main cannot be declared as global variable",
		[h]=k,
		[c]="main cannot be declared as global variable",
		[f]=a,
		[e]=m,
		[g]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++.","[Sema] main can\'t be declared as global variable, in C++.\n\nSo, we now reject that. We also warn for any external-linkage global\nvariable named main in C, because it results in undefined behavior.\n\nPR:	  24309\nDifferential Revision:	http://reviews.llvm.org/D11658\nReviewed by:	rsmith\n\nllvm-svn: 245051"},
		[d]={{p,8109,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Special handling of variable named \'main\'.\n  if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr(\"main\") && NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() && !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {\n    // C++ [basic.start.main]p3\n    // A program that declares a variable main at global scope is ill-formed.\n    if (getLangOpts().CPlusPlus)\n      Diag(D.getBeginLoc(), diag::err_main_global_variable);"}},
		[l]={
			["clang/test/CXX/basic/basic.start/basic.start.main/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.main/p3.cpp:49:3: error: main cannot be declared as global variable"}
		}
	},
	["err_main_returns_nonint"]={
		[b]="err_main_returns_nonint",
		[i]="\'main\' must return \'int\'",
		[j]="\'main\' must return \'int\'",
		[h]=k,
		[c]="\'main\' must return \'int\'",
		[f]=a,
		[e]=m,
		[g]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
		[d]={{p,12145,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // All the standards say that main() should return \'int\'.\n    if (Context.hasSameType(FT->getReturnType(), Context.IntTy))\n    // ...\n    else {\n      // ...\n      Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint) << (RTRange.isValid() ? FixItHint::CreateReplacement(RTRange, \"int\") : FixItHint());"}},
		[l]={
			["clang/test/Sema/c89.c"]={"clang/test/Sema/c89.c:108:1: error: \'main\' must return \'int\'","clang/test/Sema/c89.c:110:7: error: \'main\' must return \'int\'"}
		}
	},
	["err_main_surplus_args"]={
		[b]="err_main_surplus_args",
		[i]="too many parameters (%0) for \'main\': must be 0, 2, or 3",
		[j]="too many parameters (A) for \'main\': must be 0, 2, or 3",
		[h]=k,
		[c]="too many parameters \\((.*?)\\) for \'main\'\\: must be 0, 2, or 3",
		[f]=a,
		[e]=m,
		[g]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
		[d]={{p,12174,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (HasExtraParameters) {\n    Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams;"}}
	},
	["err_mainlike_template_decl"]={
		[b]="err_mainlike_template_decl",
		[i]="%0 cannot be a template",
		[j]="A cannot be a template",
		[h]=k,
		[c]="(.*?) cannot be a template",
		[f]=a,
		[e]=m,
		[g]={"c729b0b50669",1379371460,"[-cxx-abi microsoft] Correctly identify Win32 entry points","[-cxx-abi microsoft] Correctly identify Win32 entry points\n\nSummary:\nThis fixes several issues with the original implementation:\n- Win32 entry points cannot be in namespaces\n- A Win32 entry point cannot be a function template, diagnose if we it.\n- Win32 entry points cannot be overloaded.\n- Win32 entry points implicitly return, similar to main.\n\nReviewers: rnk, rsmith, whunt, timurrrr\n\nReviewed By: rnk\n\nCC: cfe-commits, nrieck\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D1683\n\nllvm-svn: 190818"},
		[d]={{p,12222,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {\n    Diag(FD->getLocation(), diag::err_mainlike_template_decl) << FD;"},{p,12276,"void Sema::CheckMSVCRTEntryPoint(FunctionDecl *FD) {\n  // ...\n  if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {\n    Diag(FD->getLocation(), diag::err_mainlike_template_decl) << FD;"}},
		[l]={
			["clang/test/SemaCXX/ms-overload-entry-point.cpp"]={"clang/test/SemaCXX/ms-overload-entry-point.cpp:4:5: error: \'wmain\' cannot be a template"}
		}
	},
	["err_make_signed_integral_only"]={
		[b]={{nil,n,"err_make_signed_integral_only"}},
		[i]={{nil,n,"\'%select{make_unsigned|make_signed}0\' is only compatible with non-%select{bool|_BitInt(1)}1 integers and enum types, but was given %2%select{| whose underlying type is %4}3"}},
		[j]={{nil,n,{"\'",{"make_unsigned","make_signed"},"\' is only compatible with non-",{"bool","_BitInt(1)"}," integers and enum types, but was given C",{a," whose underlying type is E"}}}},
		[h]=k,
		[c]="\'(?:make_unsigned|make_signed)\' is only compatible with non\\-(?:bool|_BitInt\\(1\\)) integers and enum types, but was given (.*?)(?:| whose underlying type is (.*?))",
		[f]=a,
		[e]={{nil,n,m}},
		[g]={N,1625925174,M,L},
		[d]={{G,9638,"static QualType ChangeIntegralSignedness(Sema &S, QualType BaseType, bool IsMakeSigned, SourceLocation Loc) {\n  if (BaseType->isEnumeralType()) {\n    // ...\n    if (auto *BitInt = dyn_cast<BitIntType>(Underlying)) {\n      // ...\n      S.Diag(Loc, diag::err_make_signed_integral_only) << IsMakeSigned << /*_BitInt(1)*/ true << BaseType << 1 << Underlying;"},{G,9643,"static QualType ChangeIntegralSignedness(Sema &S, QualType BaseType, bool IsMakeSigned, SourceLocation Loc) {\n  if (BaseType->isEnumeralType()) {\n    // ...\n    if (Underlying->isBooleanType()) {\n      S.Diag(Loc, diag::err_make_signed_integral_only) << IsMakeSigned << /*_BitInt(1)*/ false << BaseType << 1 << Underlying;"},{G,9683,"QualType Sema::BuiltinChangeSignedness(QualType BaseType, UTTKind UKind, SourceLocation Loc) {\n  // ...\n  if ((!BaseType->isIntegerType() && !BaseType->isEnumeralType()) || BaseType->isBooleanType() || (BaseType->isBitIntType() && BaseType->getAs<BitIntType>()->getNumBits() < 2)) {\n    Diag(Loc, diag::err_make_signed_integral_only) << IsMakeSigned << BaseType->isBitIntType() << BaseType << 0;"}},
		[l]={
			["clang/test/SemaCXX/type-traits.cpp"]={"clang/test/SemaCXX/type-traits.cpp:3995:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'bool\'","clang/test/SemaCXX/type-traits.cpp:3997:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'UnscopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:3999:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'ScopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:4001:27: error: \'make_signed\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4003:27: error: \'make_signed\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'UnscopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4005:27: error: \'make_signed\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'ScopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4007:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int[]\'","clang/test/SemaCXX/type-traits.cpp:4009:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int[5]\'","clang/test/SemaCXX/type-traits.cpp:4011:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'void\'","clang/test/SemaCXX/type-traits.cpp:4013:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int *\'","clang/test/SemaCXX/type-traits.cpp:4015:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int &\'","clang/test/SemaCXX/type-traits.cpp:4017:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int &&\'","clang/test/SemaCXX/type-traits.cpp:4019:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'float\'","clang/test/SemaCXX/type-traits.cpp:4021:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'double\'","clang/test/SemaCXX/type-traits.cpp:4023:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'long double\'","clang/test/SemaCXX/type-traits.cpp:4025:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'S\'","clang/test/SemaCXX/type-traits.cpp:4027:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'S *\'","clang/test/SemaCXX/type-traits.cpp:4029:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int S::*\'","clang/test/SemaCXX/type-traits.cpp:4031:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int (S::*)()\'","clang/test/SemaCXX/type-traits.cpp:4092:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'bool\'","clang/test/SemaCXX/type-traits.cpp:4094:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'UnscopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:4096:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'ScopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:4098:27: error: \'make_unsigned\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4100:27: error: \'make_unsigned\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'UnscopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4102:27: error: \'make_unsigned\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'ScopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4104:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int[]\'","clang/test/SemaCXX/type-traits.cpp:4106:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int[5]\'","clang/test/SemaCXX/type-traits.cpp:4108:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'void\'","clang/test/SemaCXX/type-traits.cpp:4110:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int *\'","clang/test/SemaCXX/type-traits.cpp:4112:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int &\'","clang/test/SemaCXX/type-traits.cpp:4114:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int &&\'","clang/test/SemaCXX/type-traits.cpp:4116:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'float\'","clang/test/SemaCXX/type-traits.cpp:4118:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'double\'","clang/test/SemaCXX/type-traits.cpp:4120:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'long double\'","clang/test/SemaCXX/type-traits.cpp:4122:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'S\'","clang/test/SemaCXX/type-traits.cpp:4124:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'S *\'","clang/test/SemaCXX/type-traits.cpp:4126:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int S::*\'","clang/test/SemaCXX/type-traits.cpp:4128:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int (S::*)()\'"}
		}
	},
	["err_malformed_std_coroutine_handle"]={
		[b]={{nil,E,"err_malformed_std_coroutine_handle"}},
		[i]={{nil,B,"std::coroutine_handle isn\'t a class template"},{w,E,"std::experimental::coroutine_handle must be a class template"}},
		[j]={{nil,B,"std::coroutine_handle isn\'t a class template"},{w,E,"std::experimental::coroutine_handle must be a class template"}},
		[h]=k,
		[c]="std\\:\\:coroutine_handle isn\'t a class template",
		[f]=a,
		[e]={{nil,E,qb}},
		[g]={"6dcb0eb301c7",1489028983,"[coroutines] Build and pass coroutine_handle to await_suspend","[coroutines] Build and pass coroutine_handle to await_suspend\n\nSummary:\nThis patch adds passing a coroutine_handle object to await_suspend calls.\nIt builds the coroutine_handle using coroutine_handle<PromiseType>::from_address(__builtin_coro_frame()).\n\n(a revision of https://reviews.llvm.org/D26316 that for some reason refuses to apply via arc patch)\n\nReviewers: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits, EricWF\n\nDifferential Revision: https://reviews.llvm.org/D30769\n\nllvm-svn: 297356"},
		[d]={{gb,160,"/// Look up the std::coroutine_handle<PromiseType>.\nstatic QualType lookupCoroutineHandleType(Sema &S, QualType PromiseType, SourceLocation Loc) {\n  // ...\n  if (!CoroHandle) {\n    // ...\n    S.Diag(Found->getLocation(), diag::err_malformed_std_coroutine_handle);"}}
	},
	["err_malformed_std_coroutine_traits"]={
		[b]="err_malformed_std_coroutine_traits",
		[i]={{nil,B,"std::coroutine_traits isn\'t a class template"},{w,nil,"\'std::experimental::coroutine_traits\' must be a class template"}},
		[j]={{nil,B,"std::coroutine_traits isn\'t a class template"},{w,nil,"\'std::experimental::coroutine_traits\' must be a class template"}},
		[h]=k,
		[c]="std\\:\\:coroutine_traits isn\'t a class template",
		[f]=a,
		[e]=qb,
		[g]={"9f690bd80bb6",1445925765,"[coroutines] Creation of promise object, lookup of operator co_await, building","[coroutines] Creation of promise object, lookup of operator co_await, building\nof await_* calls, and AST representation for same.\n\nllvm-svn: 251387"},
		[d]={{gb,1,"ClassTemplateDecl *Sema::lookupCoroutineTraits(SourceLocation KwLoc, SourceLocation FuncLoc) {\n  // ...\n  if (!StdCoroutineTraitsCache) {\n    // ...\n    Diag(Found->getLocation(), diag::err_malformed_std_coroutine_traits);"}}
	},
	["err_malformed_std_initializer_list"]={
		[b]="err_malformed_std_initializer_list",
		[i]="std::initializer_list must be a class template with a single type parameter",
		[j]="std::initializer_list must be a class template with a single type parameter",
		[h]=k,
		[c]="std\\:\\:initializer_list must be a class template with a single type parameter",
		[f]=a,
		[e]=m,
		[g]={"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"},
		[d]={{t,11809,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!Template) {\n    // ...\n    S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);"},{t,11818,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (Params->getMinRequiredArguments() != 1 || !isa<TemplateTypeParmDecl>(Params->getParam(0))) {\n    S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);"}}
	},
	["err_malformed_std_nothrow"]={
		[b]={{nil,E,"err_malformed_std_nothrow"}},
		[i]={{nil,E,"std::nothrow must be a valid variable declaration"}},
		[j]={{nil,E,"std::nothrow must be a valid variable declaration"}},
		[h]=k,
		[c]="std\\:\\:nothrow must be a valid variable declaration",
		[f]=a,
		[e]={{nil,E,qb}},
		[g]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i...","[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() is present.\n\nSummary:\nThis patch implements [dcl.fct.def.coroutine]p8:\n> The unqualified-id get_return_object_on_allocation_failure is looked up in the scope of\n> class P by class member access lookup (3.4.5). If a declaration is found, ..., and if a \n> global allocation function is selected, the ::operator new(size_t, nothrow_t) form shall be used.\n> [...]\n> The allocation function used in this case must have a non-throwing noexcept-specification.\n\nReviewers: GorNishanov, rsmith, majnemer, aaron.ballman\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31562\n\nllvm-svn: 300420"},
		[d]={{gb,1029,"/// Look up the std::nothrow object.\nstatic Expr *buildStdNoThrowDeclRef(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!VD) {\n    // ...\n    S.Diag(Found->getLocation(), diag::err_malformed_std_nothrow);"}}
	},
	["err_matrix_incomplete_index"]={
		[b]={{nil,o,"err_matrix_incomplete_index"}},
		[i]={{nil,o,"single subscript expressions are not allowed for matrix values"}},
		[j]={{nil,o,"single subscript expressions are not allowed for matrix values"}},
		[h]=k,
		[c]="single subscript expressions are not allowed for matrix values",
		[f]=a,
		[e]={{nil,o,v}},
		[g]={hb,1576908663,ib,fb},
		[d]={{q,21634,"/// 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::IncompleteMatrixIdx:\n    Diag(cast<MatrixSubscriptExpr>(E->IgnoreParens())->getRowIdx()->getBeginLoc(), diag::err_matrix_incomplete_index);"}},
		[l]={
			["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:171:5: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:174:6: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:181:16: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:186:17: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:223:17: error: single subscript expressions are not allowed for matrix values"}
		}
	},
	["err_matrix_index_not_integer"]={
		[b]={{nil,o,"err_matrix_index_not_integer"}},
		[i]={{nil,o,"matrix %select{row|column}0 index is not an integer"}},
		[j]={{nil,o,{"matrix ",{"row","column"}," index is not an integer"}}},
		[h]=k,
		[c]="matrix (?:row|column) index is not an integer",
		[f]=a,
		[e]={{nil,o,v}},
		[g]={hb,1576908663,ib,fb},
		[d]={{q,5171,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent()) {\n      Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_not_integer) << IsColumnIdx;"}},
		[l]={
			["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:14:12: error: matrix row index is not an integer","clang/test/SemaObjC/matrix-type-operators.m:14:22: error: matrix column index is not an integer"}
		}
	}
};