Module:ClangDiags/DiagsLongData8

From emmtrix Wiki
Jump to navigation Jump to search

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

local a="";
local b="regex3";
local c="category_hist";
local d="source";
local e="message_hist";
local f="id_hist";
local g="hierarchical_hist";
local h="regex1";
local i="commit";
local j="regex2";
local k="(?:error|fatal error)\\: ";
local l="tests2";
local m="Semantic Issue";
local n="5.0";
local o="11.0";
local p="10.0";
local q="clang/lib/Parse/ParsePragma.cpp";
local r="15.0";
local s="Parse Issue";
local t="clang/lib/Sema/SemaDecl.cpp";
local u="12.0";
local v="Lexical or Preprocessor Issue";
local w="8.0";
local x="clang/lib/Sema/SemaExpr.cpp";
local y="6.0";
local z="clang/lib/Sema/SemaDeclCXX.cpp";
local A="9.0";
local B="14.0";
local C="clang/lib/Sema/SemaAttr.cpp";
local D="5a8987ca5113";
local E="clang/lib/Lex/PPDirectives.cpp";
local F="Update tablegen diagnostic files to be in sync with the def files.";
local G="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local H="clang/lib/Sema/SemaChecking.cpp";
local I="None";
local J="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 K="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local L="b1c4d5507fad";
local M="16.0";
local N="13.0";
local O="clang/lib/Lex/Pragma.cpp";
local P="Add #pragma clang attribute";
local Q="0a849f47d2f7";
local R="Add #pragma clang attribute\n\nThe new \'#pragma clang attribute\' directive can be used to apply attributes to\nmultiple declarations. An attribute must satisfy the following conditions to\nbe supported by the pragma:\n- It must have a subject list that\'s defined in the TableGen file.\n- It must be documented.\n- It must not be late parsed.\n- It must have a GNU/C++11 spelling.\n\nDifferential Revision: https://reviews.llvm.org/D30009\n\nllvm-svn: 300539";
local S="7.0";
local T="clang/lib/Sema/SemaInit.cpp";
local U="clang/test/Parser/pragma-attribute.cpp";
local V="[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 W="clang/lib/Sema/SemaTemplate.cpp";
local X="931fcd3ba011";
local Y="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Z="clang/lib/Sema/SemaStmt.cpp";
local ab="clang/lib/Sema/SemaDeclObjC.cpp";
local bb="clang/lib/Sema/SemaObjCProperty.cpp";
local cb="Mass-rename the handful of error_* diagnostics to err_*.";
local db="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local eb="f881267db9a9";
local fb="clang/lib/Parse/Parser.cpp";
local gb="clang/lib/Sema/SemaExprMember.cpp";
local hb=" B";
local ib="invalid";
local jb="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 kb="Implement P2361 Unevaluated string literals";
local lb="95f50964fbf5";
local mb="739b410f1ff5";
local nb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local ob="11.1";
local pb="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";
local qb="clang/lib/Parse/ParseExprCXX.cpp";
local rb="clang/lib/Sema/SemaExprCXX.cpp";
local sb="clang/lib/Sema/SemaExprObjC.cpp";
local tb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574";
local ub="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local vb="clang/lib/Parse/ParseDecl.cpp";
local wb="clang/lib/Parse/ParseStmt.cpp";
local xb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local yb="7.1";
local zb="Refactoring Invocation Issue";
local Ab="missing";
local Bb=" option";
local Cb="14f6bfcb52e7";
local Db="union";
local Eb="struct";
local Fb="sizeof";
local Gb="__global__";
local Hb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.\n\nThese pragmas are intended to simulate the effect of entering or leaving a file\nwith an associated module. This is not completely implemented yet: declarations\nbetween the pragmas will not be attributed to the correct module, but macro\nvisibility is already functional.\n\nModules named by #pragma clang module begin must already be known to clang (in\nsome module map that\'s either loaded or on the search path).\n\nllvm-svn: 302098";
local Ib="__device__";
local Jb="__host__";
local Kb="f60dc3caa673";
local Lb="clang/test/Preprocessor/line-directive.c";
local Mb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local Nb="alignof";
local Ob="Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726";
local Pb="Let clang atomic builtins fetch add/sub support floating point types";
local Qb="61d065e21ff3";
local Rb="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";
local Sb="__host__ __device__";
local Tb="[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";
local Ub="d13863008b38";

return {
	["err_pp_invalid_udl"]={
		[f]="err_pp_invalid_udl",
		[e]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
		[g]={{nil,nil,{{"character","integer"}," literal with user-defined suffix cannot be used in preprocessor constant expression"}}},
		[h]=k,
		[j]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
		[b]=a,
		[c]=v,
		[i]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and\nuser-defined-floating-literal. Support for raw forms of these literals\nto follow.\n\nllvm-svn: 152302"},
		[d]={{"clang/lib/Lex/PPExpressions.cpp",315,"/// 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    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{"clang/lib/Lex/PPExpressions.cpp",380,"/// 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::char_constant:         // \'x\'\n  case tok::wide_char_constant:    // L\'x\'\n  case tok::utf8_char_constant:    // u8\'x\'\n  case tok::utf16_char_constant:   // u\'x\'\n  case tok::utf32_char_constant: { // U\'x\'\n    // Complain about, and drop, any ud-suffix.\n    if (PeekTok.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}},
		[l]={
			["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"}
		}
	},
	["err_pp_line_digit_sequence"]={
		[f]="err_pp_line_digit_sequence",
		[e]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
		[g]={{nil,nil,{{"#line","GNU line marker"}," directive requires a simple digit sequence"}}},
		[h]=k,
		[j]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
		[b]=a,
		[c]=v,
		[i]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted\nas decimal, even if it starts with 0.  Also, since things like 0x1 are\ncompletely illegal, don\'t even bother using numericliteralparser for them.\n\nllvm-svn: 69454"},
		[d]={{E,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n  // ...\n  for (unsigned i = 0; i != ActualLength; ++i) {\n    // ...\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}},
		[l]={
			[Lb]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"}
		}
	},
	["err_pp_line_invalid_filename"]={
		[f]="err_pp_line_invalid_filename",
		[e]="invalid filename for #line directive",
		[g]="invalid filename for #line directive",
		[h]=k,
		[j]="invalid filename for \\#line directive",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1436,"/// 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    Diag(StrTok, diag::err_pp_line_invalid_filename);"}},
		[l]={
			[Lb]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
		}
	},
	["err_pp_line_requires_integer"]={
		[f]="err_pp_line_requires_integer",
		[e]="#line directive requires a positive integer argument",
		[g]="#line directive requires a positive integer argument",
		[h]=k,
		[j]="\\#line directive requires a positive integer argument",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1411,"/// 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 (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}},
		[l]={
			[Lb]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"}
		}
	},
	["err_pp_linemarker_invalid_filename"]={
		[f]="err_pp_linemarker_invalid_filename",
		[e]="invalid filename for line marker directive",
		[g]="invalid filename for line marker directive",
		[h]=k,
		[j]="invalid filename for line marker directive",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1452,"/// 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  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{E,1587,"/// 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    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{E,1603,"/// 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  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}},
		[l]={
			[Lb]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"}
		}
	},
	["err_pp_linemarker_invalid_flag"]={
		[f]="err_pp_linemarker_invalid_flag",
		[e]="invalid flag line marker directive",
		[g]="invalid flag line marker directive",
		[h]=k,
		[j]="invalid flag line marker directive",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{E,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n    // ...\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{E,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{E,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{E,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{E,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n    PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{E,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
		[l]={
			[Lb]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"}
		}
	},
	["err_pp_linemarker_invalid_pop"]={
		[f]="err_pp_linemarker_invalid_pop",
		[e]="invalid line marker flag \'2\': cannot pop empty include stack",
		[g]="invalid line marker flag \'2\': cannot pop empty include stack",
		[h]=k,
		[j]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}},
		[l]={
			["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"}
		}
	},
	["err_pp_linemarker_requires_integer"]={
		[f]="err_pp_linemarker_requires_integer",
		[e]="line marker directive requires a positive integer argument",
		[g]="line marker directive requires a positive integer argument",
		[h]=k,
		[j]="line marker directive requires a positive integer argument",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1569,"/// 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 (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
	},
	["err_pp_macro_not_identifier"]={
		[f]="err_pp_macro_not_identifier",
		[e]="macro name must be an identifier",
		[g]="macro name must be an identifier",
		[h]=k,
		[j]="macro name must be an identifier",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (!II)\n    return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}},
		[l]={
			["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"}
		}
	},
	["err_pp_malformed_ident"]={
		[f]="err_pp_malformed_ident",
		[e]="invalid #ident directive",
		[g]="invalid #ident directive",
		[h]=k,
		[j]="invalid \\#ident directive",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // ...\n  // If the token kind isn\'t a string, it\'s a malformed directive.\n  if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n    Diag(StrTok, diag::err_pp_malformed_ident);"}}
	},
	["err_pp_missing_lparen_in_vaopt_use"]={
		[f]={{nil,y,"err_pp_missing_lparen_in_vaopt_use"}},
		[e]={{nil,y,"missing \'(\' following __VA_OPT__"}},
		[g]={{nil,y,"missing \'(\' following __VA_OPT__"}},
		[h]=k,
		[j]="missing \'\\(\' following __VA_OPT__",
		[b]=a,
		[c]={{nil,y,v}},
		[i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
		[d]={{E,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // ...\n          if (Tok.isNot(tok::l_paren)) {\n            Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}},
		[l]={
			["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"}
		}
	},
	["err_pp_missing_macro_name"]={
		[f]="err_pp_missing_macro_name",
		[e]="macro name missing",
		[g]="macro name missing",
		[h]=k,
		[j]="macro name missing",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,325,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // Missing macro name?\n  if (MacroNameTok.is(tok::eod))\n    return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}},
		[l]={
			["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:5:7: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:13:12: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:25:9: error: macro name missing"}
		}
	},
	["err_pp_missing_rparen_in_macro_def"]={
		[f]="err_pp_missing_rparen_in_macro_def",
		[e]="missing \')\' in macro parameter list",
		[g]="missing \')\' in macro parameter list",
		[h]=k,
		[j]="missing \'\\)\' in macro parameter list",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{E,2699,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{E,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      case tok::ellipsis: // #define X(A... -> GCC extension\n        // ...\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
	},
	["err_pp_module_begin_no_module_map"]={
		[f]={{nil,n,"err_pp_module_begin_no_module_map"}},
		[e]={{nil,n,"no module map available for module %0"}},
		[g]={{nil,n,"no module map available for module A"}},
		[h]=k,
		[j]="no module map available for module (.*?)",
		[b]=a,
		[c]={{nil,n,v}},
		[i]={Ub,1493857794,Mb,Hb},
		[d]={{O,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///   #pragma clang module begin some.module.name\n///   ...\n///   #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!M) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}}
	},
	["err_pp_module_begin_no_submodule"]={
		[f]={{nil,n,"err_pp_module_begin_no_submodule"}},
		[e]={{nil,n,"submodule %0.%1 not declared in module map"}},
		[g]={{nil,n,"submodule A.B not declared in module map"}},
		[h]=k,
		[j]="submodule (.*?)\\.(.*?) not declared in module map",
		[b]=a,
		[c]={{nil,n,v}},
		[i]={Ub,1493857794,Mb,Hb},
		[d]={{O,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///   #pragma clang module begin some.module.name\n///   ...\n///   #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    for (unsigned I = 1; I != ModuleName.size(); ++I) {\n      // ...\n      if (!NewM) {\n        PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}}
	},
	["err_pp_module_begin_without_module_end"]={
		[f]={{nil,n,"err_pp_module_begin_without_module_end"}},
		[e]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
		[g]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
		[h]=k,
		[j]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
		[b]=a,
		[c]={{nil,n,v}},
		[i]={Ub,1493857794,Mb,Hb},
		[d]={{"clang/lib/Lex/PPLexerChange.cpp",353,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}},
		[l]={
			["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}
		}
	},
	["err_pp_module_begin_wrong_module"]={
		[f]={{nil,n,"err_pp_module_begin_wrong_module"}},
		[e]={{nil,n,"must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2"}},
		[g]={{nil,n,{"must specify \'-fmodule-name=A\' to enter ",{a,"submodule of "},"this module",{" (current module is D)",a}}}},
		[h]=k,
		[j]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
		[b]=a,
		[c]={{nil,n,v}},
		[i]={Ub,1493857794,Mb,Hb},
		[d]={{O,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///   #pragma clang module begin some.module.name\n///   ...\n///   #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ModuleName.front().first->getName() != Current) {\n      PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}}
	},
	["err_pp_module_build_missing_end"]={
		[f]={{nil,n,"err_pp_module_build_missing_end"}},
		[e]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
		[g]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
		[h]=k,
		[j]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
		[b]=a,
		[c]={{nil,n,v}},
		[i]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build\nas part of a compilation.\n\nThis is intended for two purposes:\n\n1) Writing self-contained test cases for modules: we can now write a single\nsource file test that builds some number of module files on the side and\nimports them.\n\n2) Debugging / test case reduction. A single-source testcase is much more\namenable to reduction, compared to a VFS tarball or .pcm files.\n\nllvm-svn: 305101"},
		[d]={{O,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}},
		[l]={
			["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}
		}
	},
	["err_pp_module_end_without_module_begin"]={
		[f]={{nil,n,"err_pp_module_end_without_module_begin"}},
		[e]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
		[g]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
		[h]=k,
		[j]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
		[b]=a,
		[c]={{nil,n,v}},
		[i]={Ub,1493857794,Mb,Hb},
		[d]={{O,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (M)\n    // ...\n    else\n      PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}},
		[l]={
			["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}
		}
	},
	["err_pp_nested_paren"]={
		[f]="err_pp_nested_paren",
		[e]="nested parentheses not permitted in %0",
		[g]="nested parentheses not permitted in A",
		[h]=k,
		[j]="nested parentheses not permitted in (.*?)",
		[b]=a,
		[c]=v,
		[i]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros\n\nSummary:\nThe parsing logic has been separated out from the macro implementation logic, leading to a number of improvements:\n\n* Gracefully handle unexpected/invalid tokens, too few, too many and nested parameters\n* Provide consistent behaviour between all built-in feature-like macros\n* Simplify the implementation of macro logic\n* Fix __is_identifier to correctly return \'0\' for non-identifiers\n\nReviewers: doug.gregor, rsmith\n\nSubscribers: rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17149\n\nllvm-svn: 265381"},
		[d]={{"clang/lib/Lex/PPMacroExpansion.cpp",1337,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    case tok::l_paren:\n      // ...\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}},
		[l]={
			["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"}
		}
	},
	["err_pp_operator_used_as_macro_name"]={
		[f]="err_pp_operator_used_as_macro_name",
		[e]="C++ operator %0 (aka %1) used as a macro name",
		[g]="C++ operator A (aka B) used as a macro name",
		[h]=k,
		[j]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (II->isCPlusPlusOperatorKeyword()) {\n    // ...\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}},
		[l]={
			["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"}
		}
	},
	["err_pp_pragma_hdrstop_not_seen"]={
		[f]={{nil,w,"err_pp_pragma_hdrstop_not_seen"}},
		[e]={{nil,w,"#pragma hdrstop not seen while attempting to use precompiled header"}},
		[g]={{nil,w,"#pragma hdrstop not seen while attempting to use precompiled header"}},
		[h]="fatal error\\: ",
		[j]="\\#pragma hdrstop not seen while attempting to use precompiled header",
		[b]=a,
		[c]={{nil,w,v}},
		[i]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop\n\nWith clang-cl, when the user specifies /Yc or /Yu without a filename\nthe compiler uses a #pragma hdrstop in the main source file to\ndetermine the end of the PCH. If a header is specified with /Yc or\n/Yu #pragma hdrstop has no effect.\n\nThe optional #pragma hdrstop filename argument is not yet supported.\n\nDifferential Revision: https://reviews.llvm.org/D51391\n\nllvm-svn: 341963"},
		[d]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    // ...\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
	},
	["err_pp_pragma_unsafe_buffer_usage_syntax"]={
		[f]="err_pp_pragma_unsafe_buffer_usage_syntax",
		[e]="Expected \'begin\' or \'end\'",
		[g]="Expected \'begin\' or \'end\'",
		[h]=k,
		[j]="Expected \'begin\' or \'end\'",
		[b]=a,
		[c]=v,
		[i]={lb,1625925174,kb,jb},
		[d]={{O,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{O,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n    // ...\n    } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}},
		[l]={
			["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"}
		}
	},
	["err_pp_remainder_by_zero"]={
		[f]="err_pp_remainder_by_zero",
		[e]="remainder by zero in preprocessor expression",
		[g]="remainder by zero in preprocessor expression",
		[h]=k,
		[j]="remainder by zero in preprocessor expression",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{"clang/lib/Lex/PPExpressions.cpp",709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\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, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::percent:\n      if (RHS.Val != 0)\n      // ...\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
	},
	["err_pp_stringize_not_parameter"]={
		[f]="err_pp_stringize_not_parameter",
		[e]="\'%select{#|#@}0\' is not followed by a macro parameter",
		[g]={{nil,nil,{"\'",{"#","#@"},"\' is not followed by a macro parameter"}}},
		[h]=k,
		[j]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{E,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      // Check for a valid macro arg identifier or __VA_OPT__.\n      if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n        // If this is assembler-with-cpp mode, we accept random gibberish after\n        // the \'#\' because \'#\' is often a comment character.  However, change\n        // the kind of the token to tok::unknown so that the preprocessor isn\'t\n        // confused.\n        if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n        // ...\n        } else {\n          Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}},
		[l]={
			["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"}
		}
	},
	["err_pp_through_header_not_found"]={
		[f]={{nil,S,"err_pp_through_header_not_found"}},
		[e]={{nil,S,"\'%0\' required for precompiled header not found"}},
		[g]={{nil,S,"\'A\' required for precompiled header not found"}},
		[h]="fatal error\\: ",
		[j]="\'(.*?)\' required for precompiled header not found",
		[b]=a,
		[c]={{nil,S,v}},
		[i]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
		[d]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n  // ...\n  if (!PPOpts->PCHThroughHeader.empty()) {\n    // ...\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
	},
	["err_pp_through_header_not_seen"]={
		[f]={{nil,S,"err_pp_through_header_not_seen"}},
		[e]={{nil,S,"#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header"}},
		[g]={{nil,S,{"#include of \'A\' not seen while attempting to ",{"create","use"}," precompiled header"}}},
		[h]="fatal error\\: ",
		[j]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
		[b]=a,
		[c]={{nil,S,v}},
		[i]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
		[d]={{"clang/lib/Lex/PPLexerChange.cpp",566,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n    // ...\n    Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
	},
	["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
		[f]="err_pp_unclosed_pragma_unsafe_buffer_usage",
		[e]="\'#pragma unsafe_buffer_usage\' was not ended",
		[g]="\'#pragma unsafe_buffer_usage\' was not ended",
		[h]=k,
		[j]="\'\\#pragma unsafe_buffer_usage\' was not ended",
		[b]=a,
		[c]=v,
		[i]={lb,1625925174,kb,jb},
		[d]={{"clang/lib/Lex/PPLexerChange.cpp",344,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n    // ...\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}},
		[l]={
			["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"}
		}
	},
	["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
		[f]="err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage",
		[e]="not currently inside \'#pragma unsafe_buffer_usage\'",
		[g]="not currently inside \'#pragma unsafe_buffer_usage\'",
		[h]=k,
		[j]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
		[b]=a,
		[c]=v,
		[i]={lb,1625925174,kb,jb},
		[d]={{O,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n        PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}},
		[l]={
			["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"}
		}
	},
	["err_pp_unmatched_end_of_arc_cf_code_audited"]={
		[f]="err_pp_unmatched_end_of_arc_cf_code_audited",
		[e]="not currently inside \'#pragma clang arc_cf_code_audited\'",
		[g]="not currently inside \'#pragma clang arc_cf_code_audited\'",
		[h]=k,
		[j]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
		[b]=a,
		[c]=v,
		[i]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of code.  This has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file;  that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846"},
		[d]={{O,1906,"/// PragmaARCCFCodeAuditedHandler -\n///   \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n    // ...\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}},
		[l]={
			["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"}
		}
	},
	["err_pp_unmatched_end_of_assume_nonnull"]={
		[f]="err_pp_unmatched_end_of_assume_nonnull",
		[e]="not currently inside \'#pragma clang assume_nonnull\'",
		[g]="not currently inside \'#pragma clang assume_nonnull\'",
		[h]=k,
		[j]="not currently inside \'\\#pragma clang assume_nonnull\'",
		[b]=a,
		[c]="Nullability Issue",
		[i]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n    NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n    to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156"},
		[d]={{O,1964,"/// PragmaAssumeNonNullHandler -\n///   \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n    // ...\n    } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}}
	},
	["err_pp_unterminated_conditional"]={
		[f]="err_pp_unterminated_conditional",
		[e]="unterminated conditional directive",
		[g]="unterminated conditional directive",
		[h]=k,
		[j]="unterminated conditional directive",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file.  Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\n  // If we are in a #if directive, emit an error.\n  while (!ConditionalStack.empty()) {\n    if (PP->getCodeCompletionFileLoc() != FileLoc)\n      PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}},
		[l]={
			["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"}
		}
	},
	["err_pp_used_poisoned_id"]={
		[f]="err_pp_used_poisoned_id",
		[e]="attempt to use a poisoned identifier",
		[g]="attempt to use a poisoned identifier",
		[h]=k,
		[j]="attempt to use a poisoned identifier",
		[b]=a,
		[c]=v,
		[i]={L,1236199783,K,J},
		[d]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  // ...\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}},
		[l]={
			["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"}
		}
	},
	["err_pp_vaopt_nested_use"]={
		[f]={{nil,y,"err_pp_vaopt_nested_use"}},
		[e]={{nil,y,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
		[g]={{nil,y,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
		[h]=k,
		[j]="__VA_OPT__ cannot be nested within its own replacement tokens",
		[b]=a,
		[c]={{nil,y,v}},
		[i]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
		[d]={{E,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n      // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // If we\'re already within a VAOPT, emit an error.\n          if (VAOCtx.isInVAOpt()) {\n            Diag(Tok, diag::err_pp_vaopt_nested_use);"}},
		[l]={
			["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"}
		}
	},
	["err_pp_visibility_non_macro"]={
		[f]="err_pp_visibility_non_macro",
		[e]="no macro named %0",
		[g]="no macro named A",
		[h]=k,
		[j]="no macro named (.*?)",
		[b]=a,
		[c]=v,
		[i]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly\npublic. Add a __private_macro__ directive to hide a macro, similar to\nthe __module_private__ declaration specifier.\n\nllvm-svn: 142188"},
		[d]={{E,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n  // ...\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{E,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n  // ...\n  // If the macro is not defined, this is an error.\n  if (!MD) {\n    Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{O,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n  // ...\n  if (!II->hasMacroDefinition()) {\n    PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{O,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///   #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
		[l]={
			["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"}
		}
	},
	["err_ppc_builtin_requires_abi"]={
		[f]={{nil,B,"err_ppc_builtin_requires_abi"}},
		[e]={{nil,B,"this builtin requires ABI -mabi=%0"}},
		[g]={{nil,B,"this builtin requires ABI -mabi=A"}},
		[h]=k,
		[j]="this builtin requires ABI \\-mabi\\=(.*?)",
		[b]=a,
		[c]={{nil,B,m}},
		[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[d]={{H,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_pack_longdouble:\n    if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}}
	},
	["err_ppc_invalid_test_data_class_type"]={
		[f]={{nil,B,"err_ppc_invalid_test_data_class_type"}},
		[e]={{nil,M,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{r,B,"expected a \'float\' or \'double\' for the first argument"}},
		[g]={{nil,M,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{r,B,"expected a \'float\' or \'double\' for the first argument"}},
		[h]=k,
		[j]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
		[b]=a,
		[c]={{nil,B,m}},
		[i]={"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]={{H,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_ppc_test_data_class: {\n    // ...\n    if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}},
		[l]={
			["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"}
		}
	},
	["err_ppc_invalid_use_mma_type"]={
		[f]={{nil,u,"err_ppc_invalid_use_mma_type"}},
		[e]={{nil,u,"invalid use of PPC MMA type"}},
		[g]={{nil,u,"invalid use of PPC MMA type"}},
		[h]=k,
		[j]="invalid use of PPC MMA type",
		[b]=a,
		[c]={{nil,u,m}},
		[i]={Qb,1590001902,Pb,Ob},
		[d]={{H,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}},
		[l]={
			["clang/test/Sema/ppc-pair-mma-types.c"]={"clang/test/Sema/ppc-pair-mma-types.c:17:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:22:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:27:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:33:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:35:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:38:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:40:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:44:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:45:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:48:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:55:17: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:112:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:117:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:122:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:128:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:130:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:133:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:135:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:139:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:140:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:143:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:149:17: error: invalid use of PPC MMA type"}
		}
	},
	["err_pragma_alloc_text_c_linkage"]={
		[f]={{nil,r,"err_pragma_alloc_text_c_linkage"}},
		[e]={{nil,r,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
		[g]={{nil,r,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
		[h]=k,
		[j]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
		[b]=a,
		[c]={{nil,r,m}},
		[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
		[d]={{C,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}},
		[l]={
			["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"}
		}
	},
	["err_pragma_alloc_text_not_function"]={
		[f]={{nil,r,"err_pragma_alloc_text_not_function"}},
		[e]={{nil,r,"\'#pragma alloc_text\' is applicable only to functions"}},
		[g]={{nil,r,"\'#pragma alloc_text\' is applicable only to functions"}},
		[h]=k,
		[j]="\'\\#pragma alloc_text\' is applicable only to functions",
		[b]=a,
		[c]={{nil,r,m}},
		[i]={lb,1625925174,kb,jb},
		[d]={{C,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (!FD) {\n      Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
		[l]={
			["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"}
		}
	},
	["err_pragma_attr_attr_no_push"]={
		[f]={{nil,w,"err_pragma_attr_attr_no_push"}},
		[e]={{nil,w,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
		[g]={{nil,w,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
		[h]=k,
		[j]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
		[b]=a,
		[c]={{nil,w,m}},
		[i]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
		[d]={{C,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}},
		[l]={
			["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}
		}
	},
	["err_pragma_attribute_duplicate_subject"]={
		[f]={{nil,n,"err_pragma_attribute_duplicate_subject"}},
		[e]={{nil,n,"duplicate attribute subject matcher \'%0\'"}},
		[g]={{nil,n,"duplicate attribute subject matcher \'A\'"}},
		[h]=k,
		[j]="duplicate attribute subject matcher \'(.*?)\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\n    // ...\n    } else if (Parens.consumeOpen()) {\n      if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n        Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{q,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n      Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"}
		}
	},
	["err_pragma_attribute_expected_attribute"]={
		[f]={{nil,n,"err_pragma_attribute_expected_attribute"}},
		[e]={{nil,n,"expected an attribute after \'(\'"}},
		[g]={{nil,n,"expected an attribute after \'(\'"}},
		[h]=k,
		[j]="expected an attribute after \'\\(\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    // ...\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"}
		}
	},
	["err_pragma_attribute_expected_attribute_name"]={
		[f]={{nil,n,"err_pragma_attribute_expected_attribute_name"}},
		[e]={{nil,n,"expected identifier that represents an attribute name"}},
		[g]={{nil,n,"expected identifier that represents an attribute name"}},
		[h]=k,
		[j]="expected identifier that represents an attribute name",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1847,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  // ...\n  } else if (Tok.is(tok::kw___attribute)) {\n    // ...\n    // Parse the comma-separated list of attributes.\n    do {\n      if (Tok.isNot(tok::identifier)) {\n        Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"}
		}
	},
	["err_pragma_attribute_expected_attribute_syntax"]={
		[f]={{nil,n,"err_pragma_attribute_expected_attribute_syntax"}},
		[e]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
		[g]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
		[h]=k,
		[j]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1872,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n  // ...\n  } else if (Tok.is(tok::kw___attribute)) {\n  // ...\n  } else if (Tok.is(tok::kw___declspec)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}
		}
	},
	["err_pragma_attribute_expected_period"]={
		[f]={{nil,w,"err_pragma_attribute_expected_period"}},
		[e]={{nil,w,"expected \'.\' after pragma attribute namespace %0"}},
		[g]={{nil,w,"expected \'.\' after pragma attribute namespace A"}},
		[h]=k,
		[j]="expected \'\\.\' after pragma attribute namespace (.*?)",
		[b]=a,
		[c]={{nil,w,s}},
		[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
		[d]={{q,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    // ...\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      // ...\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"}
		}
	},
	["err_pragma_attribute_expected_push_pop_paren"]={
		[f]={{nil,w,"err_pragma_attribute_expected_push_pop_paren"}},
		[e]={{nil,w,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
		[g]={{nil,w,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
		[h]=k,
		[j]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
		[b]=a,
		[c]={{nil,w,s}},
		[i]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
		[d]={{q,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}
		}
	},
	["err_pragma_attribute_expected_subject_identifier"]={
		[f]={{nil,n,"err_pragma_attribute_expected_subject_identifier"}},
		[e]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
		[g]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
		[h]=k,
		[j]="expected an identifier that corresponds to an attribute subject rule",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (Name.empty()) {\n      Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"}
		}
	},
	["err_pragma_attribute_expected_subject_sub_identifier"]={
		[f]={{nil,n,"err_pragma_attribute_expected_subject_sub_identifier"}},
		[e]={{nil,n,"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'%0\' matcher %select{does not support sub-rules|supports the following sub-rules: %2|}1"}},
		[g]={{nil,n,{"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ",{"does not support sub-rules","supports the following sub-rules: C",a}}}},
		[h]=k,
		[j]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1565,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:66:89: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:73:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:74:101: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'namespace\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:87:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:88:96: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'enum\' matcher does not support sub-rules"}
		}
	},
	["err_pragma_attribute_extra_tokens_after_attribute"]={
		[f]={{nil,n,"err_pragma_attribute_extra_tokens_after_attribute"}},
		[e]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
		[g]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
		[h]=k,
		[j]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1957,"void Parser::HandlePragmaAttribute() {\n  // ...\n  // Tokens following an ill-formed attribute will remain in the token stream\n  // and must be removed.\n  if (Tok.isNot(tok::eof)) {\n    Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"}
		}
	},
	["err_pragma_attribute_invalid_argument"]={
		[f]={{nil,n,"err_pragma_attribute_invalid_argument"}},
		[e]={{nil,n,"unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
		[g]={{nil,n,"unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
		[h]=k,
		[j]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else {\n    // ...\n    if (II->isStr(\"push\"))\n    // ...\n    else if (II->isStr(\"pop\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
	},
	["err_pragma_attribute_invalid_matchers"]={
		[f]={{nil,n,"err_pragma_attribute_invalid_matchers"}},
		[e]={{nil,n,"attribute %0 can\'t be applied to %1"}},
		[g]={{nil,n,"attribute A can\'t be applied to B"}},
		[h]=k,
		[j]="attribute (.*?) can\'t be applied to (.*?)",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={Q,1492508507,P,R},
		[d]={{C,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"}
		}
	},
	["err_pragma_attribute_invalid_subject_set_specifier"]={
		[f]={{nil,n,"err_pragma_attribute_invalid_subject_set_specifier"}},
		[e]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
		[g]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
		[h]=k,
		[j]="expected attribute subject set specifier \'apply_to\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1922,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{q,1930,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"}
		}
	},
	["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
		[f]={{nil,n,"err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"}},
		[e]={{nil,n,"negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'"}},
		[g]={{nil,n,"negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'"}},
		[h]=k,
		[j]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={Q,1492508507,P,R},
		[d]={{C,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n        // ...\n        Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}},
		[l]={
			["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"}
		}
	},
	["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
		[f]={{nil,n,"err_pragma_attribute_matcher_subrule_contradicts_rule"}},
		[e]={{nil,n,"redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations"}},
		[g]={{nil,n,"redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations"}},
		[h]=k,
		[j]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={Q,1492508507,P,R},
		[d]={{C,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != Rules.end()) {\n        // ...\n        Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}},
		[l]={
			["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"}
		}
	},
	["err_pragma_attribute_namespace_on_attribute"]={
		[f]={{nil,w,"err_pragma_attribute_namespace_on_attribute"}},
		[e]={{nil,w,"namespace can only apply to \'push\' or \'pop\' directives"}},
		[g]={{nil,w,"namespace can only apply to \'push\' or \'pop\' directives"}},
		[h]=k,
		[j]="namespace can only apply to \'push\' or \'pop\' directives",
		[b]=a,
		[c]={{nil,w,s}},
		[i]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
		[d]={{q,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}},
		[l]={
			["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"}
		}
	},
	["err_pragma_attribute_no_pop_eof"]={
		[f]={{nil,n,"err_pragma_attribute_no_pop_eof"}},
		[e]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
		[g]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
		[h]=k,
		[j]="unterminated \'\\#pragma clang attribute push\' at end of file",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={Q,1492508507,P,R},
		[d]={{C,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  // ...\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
		[l]={
			["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"}
		}
	},
	["err_pragma_attribute_stack_mismatch"]={
		[f]={{nil,n,"err_pragma_attribute_stack_mismatch"}},
		[e]={{nil,w,"\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'"},{yb,n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
		[g]={{nil,w,{"\'#pragma clang attribute ",{"B.",a},"pop\' with no matching \'#pragma clang attribute ",{"B.",a},"push\'"}},{yb,n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
		[h]=k,
		[j]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={Q,1492508507,P,R},
		[d]={{C,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{C,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{C,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n  // ...\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}},
		[l]={
			["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}
		}
	},
	["err_pragma_attribute_unknown_subject_rule"]={
		[f]={{nil,n,"err_pragma_attribute_unknown_subject_rule"}},
		[e]={{nil,n,"unknown attribute subject rule \'%0\'"}},
		[g]={{nil,n,"unknown attribute subject rule \'A\'"}},
		[h]=k,
		[j]="unknown attribute subject rule \'(.*?)\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!Rule.first) {\n      Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"}
		}
	},
	["err_pragma_attribute_unknown_subject_sub_rule"]={
		[f]={{nil,n,"err_pragma_attribute_unknown_subject_sub_rule"}},
		[e]={{nil,n,"%select{invalid use of|unknown}2 attribute subject matcher sub-rule \'%0\'; \'%1\' matcher %select{does not support sub-rules|supports the following sub-rules: %3}2"}},
		[g]={{nil,n,{{"invalid use of","unknown"}," attribute subject matcher sub-rule \'A\'; \'B\' matcher ",{"does not support sub-rules","supports the following sub-rules: D"}}}},
		[h]=k,
		[j]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1578,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}},
		[l]={
			[U]={"clang/test/Parser/pragma-attribute.cpp:67:89: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:72:99: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:77:81: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:78:85: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:82:99: error: unknown attribute subject matcher sub-rule \'unless(is)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:90:99: error: unknown attribute subject matcher sub-rule \'unless(is_global)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:91:86: error: invalid use of attribute subject matcher sub-rule \'unless(is_parameter)\'; \'enum\' matcher does not support sub-rules"}
		}
	},
	["err_pragma_attribute_unsupported_attribute"]={
		[f]={{nil,n,"err_pragma_attribute_unsupported_attribute"}},
		[e]={{nil,n,"attribute %0 is not supported by \'#pragma clang attribute\'"}},
		[g]={{nil,n,"attribute A is not supported by \'#pragma clang attribute\'"}},
		[h]=k,
		[j]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={Q,1492508507,P,R},
		[d]={{q,1903,"void Parser::HandlePragmaAttribute() {\n  // ...\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n      Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}},
		[l]={
			["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"}
		}
	},
	["err_pragma_cannot_end_force_cuda_host_device"]={
		[f]="err_pragma_cannot_end_force_cuda_host_device",
		[e]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
		[g]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
		[h]=k,
		[j]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
		[b]=a,
		[c]=s,
		[i]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.\n\nSummary:\nThese cause us to consider all functions in-between to be __host__\n__device__.\n\nYou can nest these pragmas; you just can\'t have more \'end\'s than\n\'begin\'s.\n\nReviewers: rsmith\n\nSubscribers: tra, jhen, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D24975\n\nllvm-svn: 283677"},
		[d]={{q,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Info->isStr(\"begin\"))\n  // ...\n  else if (!Actions.PopForceCUDAHostDevice())\n    PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}}
	},
	["err_pragma_clang_section_expected_equal"]={
		[f]={{nil,n,"err_pragma_clang_section_expected_equal"}},
		[e]={{nil,p,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'"},{A,n,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text}0\'"}},
		[g]={{nil,p,{"expected \'=\' following \'#pragma clang section ",{ib,"bss","data","rodata","text","relro"},"\'"}},{A,n,{"expected \'=\' following \'#pragma clang section ",{ib,"bss","data","rodata","text"},"\'"}}},
		[h]=k,
		[j]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
		[d]={{q,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}},
		[l]={
			["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"}
		}
	},
	["err_pragma_comment_malformed"]={
		[f]="err_pragma_comment_malformed",
		[e]="pragma comment requires parenthesized identifier and optional string",
		[g]="pragma comment requires parenthesized identifier and optional string",
		[h]=k,
		[j]="pragma comment requires parenthesized identifier and optional string",
		[b]=a,
		[c]=s,
		[i]={L,1236199783,K,J},
		[d]={{q,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{q,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{q,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{q,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}},
		[l]={
			["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"}
		}
	},
	["err_pragma_comment_unknown_kind"]={
		[f]="err_pragma_comment_unknown_kind",
		[e]="unknown kind of pragma comment",
		[g]="unknown kind of pragma comment",
		[h]=k,
		[j]="unknown kind of pragma comment",
		[b]=a,
		[c]=s,
		[i]={L,1236199783,K,J},
		[d]={{q,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}},
		[l]={
			["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"}
		}
	},
	["err_pragma_detect_mismatch_malformed"]={
		[f]="err_pragma_detect_mismatch_malformed",
		[e]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
		[g]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
		[h]=k,
		[j]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
		[b]=a,
		[c]=s,
		[i]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file.\n\nllvm-svn: 183178"},
		[d]={{q,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::comma)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{q,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings.  The values are embedded in\n/// the object file and passed along to the linker.  If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted.  See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}},
		[l]={
			["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"}
		}
	},
	["err_pragma_expected_clang_section_name"]={
		[f]={{nil,n,"err_pragma_expected_clang_section_name"}},
		[e]={{nil,p,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'"},{A,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma %0\'"}},
		[g]={{nil,p,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'"},{A,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma A\'"}},
		[h]=k,
		[j]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
		[d]={{q,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{q,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (SecType->isStr(\"bss\"))\n    // ...\n    else if (SecType->isStr(\"data\"))\n    // ...\n    else if (SecType->isStr(\"rodata\"))\n    // ...\n    else if (SecType->isStr(\"relro\"))\n    // ...\n    else if (SecType->isStr(\"text\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}},
		[l]={
			["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"}
		}
	},
	["err_pragma_expected_file_scope"]={
		[f]={{nil,r,"err_pragma_expected_file_scope"}},
		[e]={{nil,r,"\'#pragma %0\' can only appear at file scope"}},
		[g]={{nil,r,"\'#pragma A\' can only appear at file scope"}},
		[h]=k,
		[j]="\'\\#pragma (.*?)\' can only appear at file scope",
		[b]=a,
		[c]={{nil,r,m}},
		[i]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
		[d]={{C,793,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{C,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{C,1260,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}},
		[l]={
			["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:27:19: error: \'#pragma alloc_text\' can only appear at file scope"}
		}
	},
	["err_pragma_expected_integer"]={
		[f]={{nil,o,"err_pragma_expected_integer"}},
		[e]={{nil,o,"expected an integer argument in \'#pragma %0\'"}},
		[g]={{nil,o,"expected an integer argument in \'#pragma A\'"}},
		[h]=k,
		[j]="expected an integer argument in \'\\#pragma (.*?)\'",
		[b]=a,
		[c]={{nil,o,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{q,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{q,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}},
		[l]={
			["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"}
		}
	},
	["err_pragma_fc_except_requires_precise"]={
		[f]={{nil,o,"err_pragma_fc_except_requires_precise"}},
		[e]={{nil,o,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
		[g]={{nil,o,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
		[h]=k,
		[j]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{C,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_Except:\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}}
	},
	["err_pragma_fc_noprecise_requires_noexcept"]={
		[f]={{nil,o,"err_pragma_fc_noprecise_requires_noexcept"}},
		[e]={{nil,o,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
		[g]={{nil,o,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
		[h]=k,
		[j]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{C,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
		[l]={
			["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"}
		}
	},
	["err_pragma_fc_noprecise_requires_nofenv"]={
		[f]={{nil,o,"err_pragma_fc_noprecise_requires_nofenv"}},
		[e]={{nil,o,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
		[g]={{nil,o,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
		[h]=k,
		[j]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{C,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n    // ...\n    else if (CurFPFeatures.getAllowFEnvAccess())\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}}
	},
	["err_pragma_fc_pp_scope"]={
		[f]={{nil,o,"err_pragma_fc_pp_scope"}},
		[e]={{nil,B,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{N,o,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
		[g]={{nil,B,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{N,o,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
		[h]=k,
		[j]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{C,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    // ...\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}},
		[l]={
			["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"}
		}
	},
	["err_pragma_fenv_requires_precise"]={
		[f]={{nil,o,"err_pragma_fenv_requires_precise"}},
		[e]={{nil,o,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
		[g]={{nil,o,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
		[h]=k,
		[j]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{C,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n  // ...\n  if (IsEnabled) {\n    // Verify Microsoft restriction:\n    // You can\'t enable fenv_access unless precise semantics are enabled.\n    // Precise semantics can be enabled either by the float_control\n    // pragma, or by using the /fp:precise or /fp:strict compiler options\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fenv_requires_precise);"}}
	},
	["err_pragma_file_or_compound_scope"]={
		[f]={{nil,o,"err_pragma_file_or_compound_scope"}},
		[e]={{nil,o,"\'#pragma %0\' can only appear at file scope or at the start of a compound statement"}},
		[g]={{nil,o,"\'#pragma A\' can only appear at file scope or at the start of a compound statement"}},
		[h]=k,
		[j]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
		[b]=a,
		[c]={{nil,o,s}},
		[i]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
		[d]={{wb,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp_contract:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{wb,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{wb,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_access:\n  case tok::annot_pragma_fenv_access_ms:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{wb,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_round:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{wb,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_float_control:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}},
		[l]={
			["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"}
		}
	},
	["err_pragma_float_control_malformed"]={
		[f]={{nil,o,"err_pragma_float_control_malformed"}},
		[e]={{nil,o,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
		[g]={{nil,o,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
		[h]=k,
		[j]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
		[b]=a,
		[c]={{nil,o,s}},
		[i]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
		[d]={{q,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n    if (Tok.isNot(tok::r_paren)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (PushOnOff == \"on\")\n      // ...\n      else if (PushOnOff == \"off\") {\n      // ...\n      } else if (PushOnOff == \"push\") {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (ExpectedPush == \"push\") {\n        // ...\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{q,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///   #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
		[l]={
			["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}
		}
	},
	["err_pragma_fp_invalid_argument"]={
		[f]={{nil,n,"err_pragma_fp_invalid_argument"}},
		[e]={{nil,r,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\'}2"},{B,u,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'}2"},{ob,o,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; %select{expected \'fast\' or \'on\' or \'off\'|expected \'on\' or \'off\'}2"},{p,n,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected \'on\', \'fast\' or \'off\'"}},
		[g]={{nil,r,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'","\'source\', \'double\' or \'extended\'"}}},{B,u,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'"}}},{ob,o,{"unexpected argument \'A\' to \'#pragma clang fp B\'; ",{"expected \'fast\' or \'on\' or \'off\'","expected \'on\' or \'off\'"}}},{p,n,"unexpected argument \'A\' to \'#pragma clang fp B\'; expected \'on\', \'fast\' or \'off\'"}},
		[h]=k,
		[j]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
		[d]={{q,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n    if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{q,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      // ...\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{q,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      // ...\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{q,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      // ...\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{q,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      // ...\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}},
		[l]={
			["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"}
		}
	},
	["err_pragma_fp_invalid_option"]={
		[f]={{nil,n,"err_pragma_fp_invalid_option"}},
		[e]={{nil,u,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'"},{ob,o,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\' or \'reassociate\'"},{p,n,"%select{invalid|missing}0 option%select{ %1|}0; expected contract"}},
		[g]={{nil,u,{{ib,Ab},Bb,{hb,a},"; expected \'contract\', \'reassociate\' or \'exceptions\'"}},{ob,o,{{ib,Ab},Bb,{hb,a},"; expected \'contract\' or \'reassociate\'"}},{p,n,{{ib,Ab},Bb,{hb,a},"; expected contract"}}},
		[h]=k,
		[j]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
		[b]=a,
		[c]={{nil,n,s}},
		[i]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
		[d]={{q,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{q,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
		[l]={
			["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"}
		}
	},
	["err_pragma_invalid_keyword"]={
		[f]="err_pragma_invalid_keyword",
		[e]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
		[g]={{nil,nil,{"invalid argument; expected \'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}},
		[h]=k,
		[j]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
		[b]=a,
		[c]=s,
		[i]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute.\n\nThis patch is necessary to support constant expressions which replaces the integer value in the loop hint attribute with an expression. The integer value was also storing the pragma’s state for options like vectorize(enable/disable) and the pragma unroll and nounroll directive. The state variable is introduced to hold the state of those options/pragmas. This moves the validation of the state (keywords) from SemaStmtAttr handler to the loop hint annotation token handler.\n\nReviewed by Aaron Ballman\n\nllvm-svn: 214333"},
		[d]={{q,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n      // ...\n      } else {\n        Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
		[l]={
			["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"}
		}
	},
	["err_pragma_loop_compatibility"]={
		[f]="err_pragma_loop_compatibility",
		[e]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
		[g]={{nil,nil,{{"incompatible","duplicate"}," directives \'B\' and \'C\'"}}},
		[h]=k,
		[j]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
		[b]=a,
		[c]=m,
		[i]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
		[d]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (PrevAttr)\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}},
		[l]={
			["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"}
		}
	},
	["err_pragma_loop_invalid_argument_type"]={
		[f]="err_pragma_loop_invalid_argument_type",
		[e]="invalid argument of type %0; expected an integer type",
		[g]="invalid argument of type A; expected an integer type",
		[h]=k,
		[j]="invalid argument of type (.*?); expected an integer type",
		[b]=a,
		[c]=m,
		[i]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
		[d]={{x,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
		[l]={
			["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"}
		}
	},
	["err_pragma_loop_invalid_argument_value"]={
		[f]="err_pragma_loop_invalid_argument_value",
		[e]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
		[g]={{nil,nil,{{"invalid value \'A\'; must be positive","value \'A\' is too large"}}}},
		[h]=k,
		[j]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
		[b]=a,
		[c]=m,
		[i]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
		[d]={{x,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n    Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}},
		[l]={
			["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"}
		}
	},
	["err_pragma_loop_invalid_option"]={
		[f]="err_pragma_loop_invalid_option",
		[e]={{nil,p,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"},{A,w,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"},{yb,nil,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}},
		[g]={{nil,p,{{ib,Ab},Bb,{hb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}},{A,w,{{ib,Ab},Bb,{hb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"}},{yb,nil,{{ib,Ab},Bb,{hb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}}},
		[h]=k,
		[j]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
		[b]=a,
		[c]=s,
		[i]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
		[d]={{q,3515,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{q,3537,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n///  loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
		[l]={
			["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}
		}
	},
	["err_pragma_loop_invalid_vectorize_option"]={
		[f]={{nil,u,"err_pragma_loop_invalid_vectorize_option"}},
		[e]={{nil,u,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
		[g]={{nil,u,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
		[h]=k,
		[j]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
		[b]=a,
		[c]={{nil,u,s}},
		[i]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors\n\nThis patch adds support for two new variants of the vectorize_width\npragma:\n\n1. vectorize_width(X[, fixed|scalable]) where an optional second\nparameter is passed to the vectorize_width pragma, which indicates if\nthe user wishes to use fixed width or scalable vectorization. For\nexample the user can now write something like:\n\n  #pragma clang loop vectorize_width(4, fixed)\nor\n  #pragma clang loop vectorize_width(4, scalable)\n\nIn the absence of a second parameter it is assumed the user wants\nfixed width vectorization, in order to maintain compatibility with\nexisting code.\n2. vectorize_width(fixed|scalable) where the width is left unspecified,\nbut the user hints what type of vectorization they prefer, either\nfixed width or scalable.\n\nI have implemented this by making use of the LLVM loop hint attribute:\n\n  llvm.loop.vectorize.scalable.enable\n\nTests were added to\n\n  clang/test/CodeGenCXX/pragma-loop.cpp\n\nfor both the \'fixed\' and \'scalable\' optional parameter.\n\nSee this thread for context: http://lists.llvm.org/pipermail/cfe-dev/2020-November/067262.html\n\nDifferential Revision: https://reviews.llvm.org/D89031"},
		[d]={{q,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n  // ...\n  } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n    // ...\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n          Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
	},
	["err_pragma_loop_missing_argument"]={
		[f]="err_pragma_loop_missing_argument",
		[e]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
		[g]={{nil,nil,{"missing argument; expected ",{"an integer value",{"\'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}}}},
		[h]=k,
		[j]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
		[b]=a,
		[c]=s,
		[i]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE\n\nThis patch fixes a crash when handling malformed arguments to loop pragmas such\nas: \"#pragma clang loop vectorize(()\".  Essentially any argument which is not an\nidentifier or constant resulted in a crash.  This patch also changes a couple of\nthe error messages which weren\'t quite correct.  New behavior with this patch vs\nold behavior:\n\n#pragma clang loop vectorize(1)\nOLD: error: missing keyword; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\n#pragma clang loop vectorize()\nOLD: error: expected \')\'\nNEW: error: missing argument to loop pragma \'vectorize\'\n\n#pragma clang loop vectorize_width(bad)\nOLD: error: missing value; expected a positive integer value\nNEW: error: invalid argument; expected a positive integer value\n\n#pragma clang loop vectorize(bad)\nOLD: invalid keyword \'bad\'; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\nhttp://reviews.llvm.org/D4197\n\nPatch by Mark Heffernan\n\nllvm-svn: 211292"},
		[d]={{q,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    // ...\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
		[l]={
			["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"}
		}
	},
	["err_pragma_loop_precedes_nonloop"]={
		[f]="err_pragma_loop_precedes_nonloop",
		[e]="expected a for, while, or do-while loop to follow \'%0\'",
		[g]="expected a for, while, or do-while loop to follow \'A\'",
		[h]=k,
		[j]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
		[b]=a,
		[c]=m,
		[i]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
		[d]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n  // ...\n  // This could be handled automatically by adding a Subjects definition in\n  // Attr.td, but that would make the diagnostic behavior worse in this case\n  // because the user spells this attribute as a pragma.\n  if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n    // ...\n    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}},
		[l]={
			["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"}
		}
	},
	["err_pragma_message_malformed"]={
		[f]="err_pragma_message_malformed",
		[e]="pragma %select{message|warning|error}0 requires parenthesized string",
		[g]={{nil,nil,{"pragma ",{"message","warning","error"}," requires parenthesized string"}}},
		[h]=k,
		[j]="pragma (?:message|warning|error) requires parenthesized string",
		[b]=a,
		[c]=v,
		[i]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!\n\nllvm-svn: 106950"},
		[d]={{O,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///   #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///   #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    default:\n      PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{O,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///   #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///   #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{O,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///   #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///   #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}},
		[l]={
			["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"}
		}
	},
	["err_pragma_misplaced_in_decl"]={
		[f]={{nil,p,"err_pragma_misplaced_in_decl"}},
		[e]={{nil,p,"this pragma cannot appear in %0 declaration"}},
		[g]={{nil,p,"this pragma cannot appear in A declaration"}},
		[h]=k,
		[j]="this pragma cannot appear in (.*?) declaration",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma\n\nIf a class or struct or union declaration contains a pragma that\nis not valid in this context, compiler issues generic error like\n\"expected member name or \';\' after declaration specifiers\". With this\nchange the error tells that this pragma cannot appear in this declaration.\n\nDifferential Revision: https://reviews.llvm.org/D64932\n\nllvm-svn: 367779"},
		[d]={{vb,4671,"/// ParseStructUnionBody\n///       struct-contents:\n///         struct-declaration-list\n/// [EXT]   empty\n/// [GNU]   \"struct-declaration-list\" without terminating \';\'\n///       struct-declaration-list:\n///         struct-declaration\n///         struct-declaration-list struct-declaration\n/// [OBC]   \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n  // ...\n  // While we still have something to read, read the declarations in the struct.\n  while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n    // ...\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{"clang/lib/Parse/ParseDeclCXX.cpp",3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  // ...\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}},
		[l]={
			["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"}
		}
	},
	["err_pragma_missing_argument"]={
		[f]="err_pragma_missing_argument",
		[e]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
		[g]={{nil,nil,{"missing argument to \'#pragma A\'",{a,"; expected C"}}}},
		[h]=k,
		[j]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
		[b]=a,
		[c]=s,
		[i]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'.\n\nllvm-svn: 213574"},
		[d]={{q,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{q,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{q,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}},
		[l]={
			["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
		}
	},
	["err_pragma_optimize_extra_argument"]={
		[f]="err_pragma_optimize_extra_argument",
		[e]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
		[g]="unexpected extra argument \'A\' to \'#pragma clang optimize\'",
		[h]=k,
		[j]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
		[b]=a,
		[c]=s,
		[i]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
		[d]={{q,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
		[l]={
			["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"}
		}
	},
	["err_pragma_optimize_invalid_argument"]={
		[f]="err_pragma_optimize_invalid_argument",
		[e]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
		[g]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
		[h]=k,
		[j]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
		[b]=a,
		[c]=s,
		[i]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
		[d]={{q,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{q,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (II->isStr(\"on\")) {\n  // ...\n  } else if (!II->isStr(\"off\")) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
		[l]={
			["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
		}
	},
	["err_pragma_options_align_mac68k_target_unsupported"]={
		[f]="err_pragma_options_align_mac68k_target_unsupported",
		[e]="mac68k alignment pragma is not supported on this target",
		[g]="mac68k alignment pragma is not supported on this target",
		[h]=k,
		[j]="mac68k alignment pragma is not supported on this target",
		[b]=a,
		[c]=m,
		[i]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.\n\nllvm-svn: 104789"},
		[d]={{C,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n  // ...\n  case POAK_Mac68k:\n    // Check if the target supports this.\n    if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n      Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}},
		[l]={
			["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"}
		}
	},
	["err_pragma_pack_identifer_not_supported"]={
		[f]={{nil,u,"err_pragma_pack_identifer_not_supported"}},
		[e]={{nil,u,"specifying an identifier within `#pragma pack` is not supported on this target"}},
		[g]={{nil,u,"specifying an identifier within `#pragma pack` is not supported on this target"}},
		[h]=k,
		[j]="specifying an identifier within `\\#pragma pack` is not supported on this target",
		[b]=a,
		[c]={{nil,u,m}},
		[i]={Qb,1590001902,Pb,Ob},
		[d]={{C,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  // XL pragma pack does not support identifier syntax.\n  if (IsXLPragma && !SlotLabel.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}},
		[l]={
			["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"}
		}
	},
	["err_pragma_pack_invalid_alignment"]={
		[f]={{nil,u,"err_pragma_pack_invalid_alignment"}},
		[e]={{nil,u,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
		[g]={{nil,u,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
		[h]=k,
		[j]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
		[b]=a,
		[c]={{nil,u,m}},
		[i]={Qb,1590001902,Pb,Ob},
		[d]={{C,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  if (Alignment) {\n    // ...\n    if (IsXLPragma && *Val == 0) {\n      // ...\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}},
		[l]={
			["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}
		}
	},
	["err_pragma_pipeline_invalid_keyword"]={
		[f]={{nil,w,"err_pragma_pipeline_invalid_keyword"}},
		[e]={{nil,w,"invalid argument; expected \'disable\'"}},
		[g]={{nil,w,"invalid argument; expected \'disable\'"}},
		[h]=k,
		[j]="invalid argument; expected \'disable\'",
		[b]=a,
		[c]={{nil,w,s}},
		[i]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations.\n\nThis patch adds #pragma clang loop pipeline and #pragma clang loop pipeline_initiation_interval for debugging or reducing compile time purposes. It is possible to disable SWP for concrete loops to save compilation time or to find bugs by not doing SWP to certain loops. It is possible to set value of initiation interval to concrete number to save compilation time by not doing extra pipeliner passes or to check created schedule for specific initiation interval.\n\nPatch by Alexey Lapshin.\n\nllvm-svn: 350414"},
		[d]={{q,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}},
		[l]={
			["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"}
		}
	},
	["err_pragma_pointers_to_members_unknown_kind"]={
		[f]="err_pragma_pointers_to_members_unknown_kind",
		[e]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
		[g]={{nil,nil,{"unexpected A, expected to see one of ",{a,"\'best_case\', \'full_generality\', "},"\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}}},
		[h]=k,
		[j]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
		[b]=a,
		[c]=s,
		[i]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members\n\nIntroduce a notion of a \'current representation method\' for\npointers-to-members.\n\nWhen starting out, this is set to \'best case\' (representation method is\nchosen by examining the class, selecting the smallest representation\nthat would work given the class definition or lack thereof).\n\nThis pragma allows the translation unit to dictate exactly what\nrepresentation to use, similar to how the inheritance model keywords\noperate.\n\nN.B.  PCH support is forthcoming.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2723\n\nllvm-svn: 201105"},
		[d]={{q,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{q,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    // ...\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n      // ...\n      } else if (Arg->isStr(\"multiple_inheritance\")) {\n      // ...\n      } else if (Arg->isStr(\"virtual_inheritance\")) {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}},
		[l]={
			["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}
		}
	},
	["err_pragma_pop_visibility_mismatch"]={
		[f]="err_pragma_pop_visibility_mismatch",
		[e]="#pragma visibility pop with no matching #pragma visibility push",
		[g]="#pragma visibility pop with no matching #pragma visibility push",
		[h]=k,
		[j]="\\#pragma visibility pop with no matching \\#pragma visibility push",
		[b]=a,
		[c]=m,
		[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
		[d]={{C,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{C,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n  // ...\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}},
		[l]={
			["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"}
		}
	},
	["err_pragma_push_pop_macro_malformed"]={
		[f]="err_pragma_push_pop_macro_malformed",
		[e]="pragma %0 requires a parenthesized string",
		[g]="pragma A requires a parenthesized string",
		[h]=k,
		[j]="pragma (.*?) requires a parenthesized string",
		[b]=a,
		[c]=v,
		[i]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!\n\nllvm-svn: 111234"},
		[d]={{O,580,"/// 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.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{O,588,"/// 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.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{O,604,"/// 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.isNot(tok::r_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}}
	},
	["err_pragma_push_visibility_mismatch"]={
		[f]="err_pragma_push_visibility_mismatch",
		[e]="#pragma visibility push with no matching #pragma visibility pop",
		[g]="#pragma visibility push with no matching #pragma visibility pop",
		[h]=k,
		[j]="\\#pragma visibility push with no matching \\#pragma visibility pop",
		[b]=a,
		[c]=m,
		[i]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
		[d]={{C,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
		[l]={
			["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"}
		}
	},
	["err_pragma_section_invalid_for_target"]={
		[f]={{nil,N,"err_pragma_section_invalid_for_target"}},
		[e]={{nil,N,"argument to #pragma section is not valid for this target: %0"}},
		[g]={{nil,N,"argument to #pragma section is not valid for this target: A"}},
		[h]=k,
		[j]="argument to \\#pragma section is not valid for this target\\: (.*?)",
		[b]=a,
		[c]={{nil,N,m}},
		[i]={Qb,1590001902,Pb,Ob},
		[d]={{C,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  // ...\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}},
		[l]={
			["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"}
		}
	},
	["err_preserve_enum_value_invalid"]={
		[f]={{nil,u,"err_preserve_enum_value_invalid"}},
		[e]={{nil,u,"__builtin_preserve_enum_value argument %0 invalid"}},
		[g]={{nil,u,"__builtin_preserve_enum_value argument A invalid"}},
		[h]=k,
		[j]="__builtin_preserve_enum_value argument (.*?) invalid",
		[b]=a,
		[c]={{nil,u,I}},
		[i]={Cb,1582847864,xb,tb},
		[d]={{H,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_enum_value_invalid;"}},
		[l]={
			["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"}
		}
	},
	["err_preserve_enum_value_not_const"]={
		[f]={{nil,u,"err_preserve_enum_value_not_const"}},
		[e]={{nil,u,"__builtin_preserve_enum_value argument %0 not a constant"}},
		[g]={{nil,u,"__builtin_preserve_enum_value argument A not a constant"}},
		[h]=k,
		[j]="__builtin_preserve_enum_value argument (.*?) not a constant",
		[b]=a,
		[c]={{nil,u,I}},
		[i]={Cb,1582847864,xb,tb},
		[d]={{H,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    // ...\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
	},
	["err_preserve_field_info_not_const"]={
		[f]={{nil,p,"err_preserve_field_info_not_const"}},
		[e]={{nil,p,"__builtin_preserve_field_info argument %0 not a constant"}},
		[g]={{nil,p,"__builtin_preserve_field_info argument A not a constant"}},
		[h]=k,
		[j]="__builtin_preserve_field_info argument (.*?) not a constant",
		[b]=a,
		[c]={{nil,p,I}},
		[i]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
		[d]={{H,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}},
		[l]={
			["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"}
		}
	},
	["err_preserve_field_info_not_field"]={
		[f]={{nil,p,"err_preserve_field_info_not_field"}},
		[e]={{nil,p,"__builtin_preserve_field_info argument %0 not a field access"}},
		[g]={{nil,p,"__builtin_preserve_field_info argument A not a field access"}},
		[h]=k,
		[j]="__builtin_preserve_field_info argument (.*?) not a field access",
		[b]=a,
		[c]={{nil,p,I}},
		[i]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
		[d]={{H,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_field_info_not_field;"}},
		[l]={
			["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"}
		}
	},
	["err_preserve_type_info_invalid"]={
		[f]={{nil,u,"err_preserve_type_info_invalid"}},
		[e]={{nil,u,"__builtin_preserve_type_info argument %0 invalid"}},
		[g]={{nil,u,"__builtin_preserve_type_info argument A invalid"}},
		[h]=k,
		[j]="__builtin_preserve_type_info argument (.*?) invalid",
		[b]=a,
		[c]={{nil,u,I}},
		[i]={Cb,1582847864,xb,tb},
		[d]={{H,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n    if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_type_info_invalid;"}},
		[l]={
			["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"}
		}
	},
	["err_preserve_type_info_not_const"]={
		[f]={{nil,u,"err_preserve_type_info_not_const"}},
		[e]={{nil,u,"__builtin_preserve_type_info argument %0 not a constant"}},
		[g]={{nil,u,"__builtin_preserve_type_info argument A not a constant"}},
		[h]=k,
		[j]="__builtin_preserve_type_info argument (.*?) not a constant",
		[b]=a,
		[c]={{nil,u,I}},
		[i]={Cb,1582847864,xb,tb},
		[d]={{H,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n      kind = diag::err_preserve_type_info_not_const;"}}
	},
	["err_private_ivar_access"]={
		[f]="err_private_ivar_access",
		[e]="instance variable %0 is private",
		[g]="instance variable A is private",
		[h]=k,
		[j]="instance variable (.*?) is private",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{x,2971,"/// 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      // ...\n      // Diagnose the use of an ivar outside of the declaring class.\n      if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n        Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{gb,1445,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n          if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n            S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"}
		}
	},
	["err_private_module_fragment_expected_semi"]={
		[f]={{nil,A,"err_private_module_fragment_expected_semi"}},
		[e]={{nil,A,"expected \';\' after private module fragment declaration"}},
		[g]={{nil,A,"expected \';\' after private module fragment declaration"}},
		[h]=k,
		[j]="expected \';\' after private module fragment declaration",
		[b]=a,
		[c]={{nil,A,"Modules Issue"}},
		[i]={"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]={{fb,2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///   module-declaration:   [C++20]\n///     \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///   global-module-fragment:  [C++2a]\n///     \'module\' \';\' top-level-declaration-seq[opt]\n///   module-declaration:      [C++2a]\n///     \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///   private-module-fragment: [C++2a]\n///     \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    // ...\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
	},
	["err_private_module_fragment_not_module"]={
		[f]={{nil,A,"err_private_module_fragment_not_module"}},
		[e]={{nil,A,"private module fragment declaration with no preceding module declaration"}},
		[g]={{nil,A,"private module fragment declaration with no preceding module declaration"}},
		[h]=k,
		[j]="private module fragment declaration with no preceding module declaration",
		[b]=a,
		[c]={{nil,A,"Modules Issue"}},
		[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
		[d]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleMapModule:\n  case Module::ExplicitGlobalModuleFragment:\n  case Module::ImplicitGlobalModuleFragment:\n  case Module::ModulePartitionImplementation:\n  case Module::ModulePartitionInterface:\n  case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"}
		}
	},
	["err_private_module_fragment_not_module_interface"]={
		[f]={{nil,A,"err_private_module_fragment_not_module_interface"}},
		[e]={{nil,A,"private module fragment in module implementation unit"}},
		[g]={{nil,A,"private module fragment in module implementation unit"}},
		[h]=k,
		[j]="private module fragment in module implementation unit",
		[b]=a,
		[c]={{nil,A,"Modules Issue"}},
		[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
		[d]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"}
		}
	},
	["err_private_module_fragment_redefined"]={
		[f]={{nil,A,"err_private_module_fragment_redefined"}},
		[e]={{nil,A,"private module fragment redefined"}},
		[g]={{nil,A,"private module fragment redefined"}},
		[h]=k,
		[j]="private module fragment redefined",
		[b]=a,
		[c]={{nil,A,"Modules Issue"}},
		[i]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
		[d]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
		[l]={
			["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"}
		}
	},
	["err_probability_not_constant_float"]={
		[f]={{nil,o,"err_probability_not_constant_float"}},
		[e]={{nil,o,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
		[g]={{nil,o,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
		[h]=k,
		[j]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
		[b]=a,
		[c]={{nil,o,I}},
		[i]={Cb,1582847864,xb,tb},
		[d]={{H,2441,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"}
		}
	},
	["err_probability_out_of_range"]={
		[f]={{nil,o,"err_probability_out_of_range"}},
		[e]={{nil,o,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
		[g]={{nil,o,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
		[h]=k,
		[j]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
		[b]=a,
		[c]={{nil,o,I}},
		[i]={Cb,1582847864,xb,tb},
		[d]={{H,2453,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}},
		[l]={
			["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}
		}
	},
	["err_property_accessor_type"]={
		[f]="err_property_accessor_type",
		[e]="type of property %0 (%1) does not match type of accessor %2 (%3)",
		[g]="type of property A (B) does not match type of accessor C (D)",
		[h]=k,
		[j]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{bb,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  // ...\n  if (!compat) {\n    // ...\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    // ...\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}},
		[l]={
			["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"}
		}
	},
	["err_property_found_suggest"]={
		[f]="err_property_found_suggest",
		[e]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
		[g]="property A found on object of type B; did you mean to access it with the \".\" operator?",
		[h]=k,
		[j]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
		[b]=a,
		[c]=m,
		[i]={"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]={{gb,1398,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (!IV) {\n      // ...\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      // ...\n      } else {\n        if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n          S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}},
		[l]={
			["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"}
		}
	},
	["err_property_function_in_objc_container"]={
		[f]="err_property_function_in_objc_container",
		[e]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
		[g]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
		[h]=k,
		[j]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
		[b]=a,
		[c]=m,
		[i]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, ","Objective-C. Diagnose use of properties in functions nested in, \nnow deprecated, ObjC containers instead of crashing. \n// rdar://16859666\n\nllvm-svn: 209758"},
		[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",699,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}},
		[l]={
			["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:34:37: error: use of Objective-C property in function nested in Objective-C container not supported, move function outside its container"}
		}
	},
	["err_property_implemented"]={
		[f]="err_property_implemented",
		[e]="property %0 is already implemented",
		[g]="property A is already implemented",
		[h]=k,
		[j]="property (.*?) is already implemented",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{bb,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{bb,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n  // ...\n  } else {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"}
		}
	},
	["err_property_is_variably_modified"]={
		[f]="err_property_is_variably_modified",
		[e]="property %0 has a variably modified type",
		[g]="property A has a variably modified type",
		[h]=k,
		[j]="property (.*?) has a variably modified type",
		[b]=a,
		[c]=m,
		[i]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and","Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585"},
		[d]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  // ...\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
	},
	["err_property_ivar_type"]={
		[f]="err_property_ivar_type",
		[e]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
		[g]="type of property A (B) does not match type of instance variable C (D)",
		[h]=k,
		[j]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{bb,1376,"/// 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    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{bb,1391,"/// 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    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      if (!compat) {\n      // ...\n      } else {\n        // ...\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
		[l]={
			["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"}
		}
	},
	["err_property_method_unavailable"]={
		[f]="err_property_method_unavailable",
		[e]="property access is using %0 method which is unavailable",
		[g]="property access is using A method which is unavailable",
		[h]=k,
		[j]="property access is using (.*?) method which is unavailable",
		[b]=a,
		[c]=m,
		[i]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared\nproperty accessor methods which have become deprecated\nor available. // rdar://15951801\n\nllvm-svn: 211039"},
		[d]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}},
		[l]={
			["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"}
		}
	},
	["err_property_not_as_forward_class"]={
		[f]="err_property_not_as_forward_class",
		[e]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
		[g]="property A refers to an incomplete Objective-C class B (with no @interface available)",
		[h]=k,
		[j]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
		[b]=a,
		[c]=m,
		[i]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of\na forward class. // rdar://8851803\n\nllvm-svn: 125699"},
		[d]={{sb,2138,"/// 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    if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n      if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}},
		[l]={
			["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"}
		}
	},
	["err_property_not_found"]={
		[f]="err_property_not_found",
		[e]="property %0 not found on object of type %1",
		[g]="property A not found on object of type B",
		[h]=k,
		[j]="property (.*?) not found on object of type (.*?)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{gb,1549,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{gb,1604,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{sb,2149,"/// 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  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{sb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
		[l]={
			["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"}
		}
	},
	["err_property_not_found_forward_class"]={
		[f]="err_property_not_found_forward_class",
		[e]="property %0 cannot be found in forward class object %1",
		[g]="property A cannot be found in forward class object B",
		[h]=k,
		[j]="property (.*?) cannot be found in forward class object (.*?)",
		[b]=a,
		[c]=m,
		[i]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up\nin a forward @class object. // rdar://8774513\n\nllvm-svn: 121933"},
		[d]={{sb,1995,"/// 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 (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}},
		[l]={
			["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"}
		}
	},
	["err_property_not_found_suggest"]={
		[f]="err_property_not_found_suggest",
		[e]="property %0 not found on object of type %1; did you mean %2?",
		[g]="property A not found on object of type B; did you mean C?",
		[h]=k,
		[j]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
		[b]=a,
		[c]=m,
		[i]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific\nconstructs:\n\n  - Instance variable lookup (\"foo->ivar\" and, in instance methods, \"ivar\")\n  - Property name lookup (\"foo.prop\")\n  - Superclasses\n  - Various places where a class name is required\n  - Protocol names (e.g., id<proto>)\n\nThis seems to cover many of the common places where typos could occur.\n\nllvm-svn: 92449"},
		[d]={{sb,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n    // ...\n    if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    // ...\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}},
		[l]={
			["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"}
		}
	},
	["err_property_setter_ambiguous_use"]={
		[f]="err_property_setter_ambiguous_use",
		[e]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
		[g]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior",
		[h]=k,
		[j]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n  // ...\n  // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        // ...\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n          if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}},
		[l]={
			["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"}
		}
	},
	["err_property_type"]={
		[f]="err_property_type",
		[e]="property cannot have array or function type %0",
		[g]="property cannot have array or function type A",
		[h]=k,
		[j]="property cannot have array or function type (.*?)",
		[b]=a,
		[c]=m,
		[i]={L,1236199783,K,J},
		[d]={{bb,638,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}},
		[l]={
			["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"}
		}
	},
	["err_protected_ivar_access"]={
		[f]="err_protected_ivar_access",
		[e]="instance variable %0 is protected",
		[g]="instance variable A is protected",
		[h]=k,
		[j]="instance variable (.*?) is protected",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{gb,1449,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (IV->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        // ...\n        } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          // ...\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"}
		}
	},
	["err_protocol_has_circular_dependency"]={
		[f]="err_protocol_has_circular_dependency",
		[e]="protocol has circular dependency",
		[g]="protocol has circular dependency",
		[h]=k,
		[j]="protocol has circular dependency",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{ab,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n  // ...\n  for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n    if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n      if (PDecl->getIdentifier() == PName) {\n        Diag(Ploc, diag::err_protocol_has_circular_dependency);"}},
		[l]={
			["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"}
		}
	},
	["err_protocol_property_mismatch"]={
		[f]={{nil,n,"err_protocol_property_mismatch"}},
		[e]={{nil,n,"property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis"}},
		[g]={{nil,n,{"property ",{"of type B","with attribute \'B\'","without attribute \'B\'","with getter B","with setter B"}," was selected for synthesis"}}},
		[h]=k,
		[j]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous\nproperty and check for incompatible attributes\n\nThis commit changes the way ambiguous property synthesis (i.e. when synthesizing\na property that\'s declared in multiple protocols) is performed. Previously,\nClang synthesized the first property that was found. This lead to problems when\nthe property was synthesized in a class that conformed to two protocols that\ndeclared that property and a second protocols had a \'readwrite\' declaration -\nthe setter was not synthesized so the class didn\'t really conform to the second\nprotocol and user\'s code would crash at runtime when they would try to set the\nproperty.\n\nThis commit ensures that a first readwrite property is selected. This is a\nsemantic change that changes users code in this manner:\n\n```\n@protocol P @property(readonly) int p; @end\n@protocol P2 @property(readwrite) id p; @end\n@interface I <P2> @end\n@implementation I\n@syntesize p; // Users previously got a warning here, and Clang synthesized\n              // readonly \'int p\' here. Now Clang synthesizes readwrite \'id\' p..\n@end\n```\n\nTo ensure that this change is safe, the warning about incompatible types is\npromoted to an error when this kind of readonly/readwrite ambiguity is detected\nin the @implementation. This will ensure that previous code that had this subtle\nbug and ignored the warning now will fail to compile with an error, and users\nshould not get suprises at runtime once they resolve the error.\n\nThe commit also extends the ambiguity checker, and now it can detect conflicts\namong the different property attributes. An error diagnostic is used for\nconflicting attributes, to ensure that the user won\'t get \"suprises\" at runtime.\n\nProtocolPropertyMap is removed in favour of a a set + vector because the map\'s\norder of iteration is non-deterministic, so it couldn\'t be used to select the\nreadwrite property.\n\nrdar://31579994\n\nDifferential Revision: https://reviews.llvm.org/D35268\n\nllvm-svn: 307903"},
		[d]={{bb,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  // ...\n  // Diagnose incompability.\n  {\n    // ...\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}},
		[l]={
			["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"}
		}
	},
	["err_pseudo_dtor_base_not_scalar"]={
		[f]="err_pseudo_dtor_base_not_scalar",
		[e]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
		[g]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression",
		[h]=k,
		[j]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
		[b]=a,
		[c]=m,
		[i]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
		[d]={{rb,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n    if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    // ...\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"}
		}
	},
	["err_pseudo_dtor_call_with_args"]={
		[f]="err_pseudo_dtor_call_with_args",
		[e]="call to pseudo-destructor cannot have any arguments",
		[g]="call to pseudo-destructor cannot have any arguments",
		[h]=k,
		[j]="call to pseudo\\-destructor cannot have any arguments",
		[b]=a,
		[c]=m,
		[i]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
		[d]={{x,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // If this is a pseudo-destructor expression, build the call immediately.\n    if (isa<CXXPseudoDestructorExpr>(Fn)) {\n      if (!ArgExprs.empty()) {\n        // ...\n        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}},
		[l]={
			["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"}
		}
	},
	["err_pseudo_dtor_destructor_non_type"]={
		[f]="err_pseudo_dtor_destructor_non_type",
		[e]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
		[g]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B",
		[h]=k,
		[j]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
		[b]=a,
		[c]=m,
		[i]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for\npseudo-destructor expressions, and builds the CXXPseudoDestructorExpr\nnode directly. Currently, this only affects pseudo-destructor\nexpressions when they are parsed, but not after template\ninstantiation. That\'s coming next...\n\nImprove parsing of pseudo-destructor-names. When parsing the\nnested-name-specifier and we hit the sequence of tokens X :: ~, query\nthe actual module to determine whether X is a type-name (in which case\nthe X :: is part of the pseudo-destructor-name but not the\nnested-name-specifier) or not (in which case the X :: is part of the\nnested-name-specifier). \n\nllvm-svn: 97058"},
		[d]={{rb,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n    // ...\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n    // ...\n    } else if (!T) {\n      Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{rb,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      // ...\n      if (!T) {\n        Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}},
		[l]={
			["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"}
		}
	},
	["err_pseudo_dtor_type_mismatch"]={
		[f]="err_pseudo_dtor_type_mismatch",
		[e]="the type of object expression %diff{($) does not match the type being destroyed ($)|does not match the type being destroyed}0,1 in pseudo-destructor expression",
		[g]={{nil,nil,{"the type of object expression ",{"(A) does not match the type being destroyed (B)","does not match the type being destroyed"}," in pseudo-destructor expression"}}},
		[h]=k,
		[j]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
		[b]=a,
		[c]=m,
		[i]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
		[d]={{rb,7805,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //   [...] The cv-unqualified versions of the object type and of the type\n  //   designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    // ...\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //   Foo *foo;\n        //   foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n        // ...\n        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{rb,7849,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //   [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n  //   form\n  //\n  //     ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n  //\n  //   shall designate the same scalar type.\n  if (ScopeTypeInfo) {\n    // ...\n    if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n      Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"}
		}
	},
	["err_pure_friend"]={
		[f]="err_pure_friend",
		[e]="friend declaration cannot have a pure-specifier",
		[g]="friend declaration cannot have a pure-specifier",
		[h]=k,
		[j]="friend declaration cannot have a pure\\-specifier",
		[b]=a,
		[c]=m,
		[i]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and","Rework parsing of pure-specifiers. Perform the grammar matching and\ndisambiguation in the parser rather than trying to do it in Sema.\n\nllvm-svn: 241032"},
		[d]={{z,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
		[l]={
			["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:70:28: error: friend declaration cannot have a pure-specifier","clang/test/SemaCXX/virtuals.cpp:73:19: error: friend declaration cannot have a pure-specifier"}
		}
	},
	["err_qualified_catch_declarator"]={
		[f]="err_qualified_catch_declarator",
		[e]="exception declarator cannot be qualified",
		[g]="exception declarator cannot be qualified",
		[h]=k,
		[j]="exception declarator cannot be qualified",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{z,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getCXXScopeSpec().isSet() && !Invalid) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}}
	},
	["err_qualified_friend_def"]={
		[f]="err_qualified_friend_def",
		[e]="friend function definition cannot be qualified with \'%0\'",
		[g]="friend function definition cannot be qualified with \'A\'",
		[h]=k,
		[j]="friend function definition cannot be qualified with \'(.*?)\'",
		[b]=a,
		[c]=m,
		[i]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow\ndefining a friend function with a qualified name or in a local\nclass. Fixes PR9853. \n\nllvm-svn: 141524"},
		[d]={{z,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n    // ...\n    if (D.isFunctionDefinition()) {\n      // ...\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{z,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n  // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n  // ...\n  } else if (!SS.getScopeRep()->isDependent()) {\n  // ...\n  } else {\n    if (D.isFunctionDefinition()) {\n      // ...\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}},
		[l]={
			["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"}
		}
	},
	["err_qualified_friend_no_match"]={
		[f]={{nil,w,"err_qualified_friend_no_match"}},
		[e]={{nil,w,"friend declaration of %0 does not match any declaration in %1"}},
		[g]={{nil,w,"friend declaration of A does not match any declaration in B"}},
		[h]=k,
		[j]="friend declaration of (.*?) does not match any declaration in (.*?)",
		[b]=a,
		[c]={{nil,w,m}},
		[i]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a\ntemplate specialization if there is no matching non-template function.\n\nThis exposed a couple of related bugs:\n - we would sometimes substitute into a friend template instead of a\n   suitable non-friend declaration; this would now crash because we\'d\n   decide the specialization of the friend is a redeclaration of itself\n - ADL failed to properly handle the case where an invisible local\n   extern declaration redeclares an invisible friend\n\nBoth are fixed herein: in particular, we now never make invisible\nfriends or local extern declarations visible to name lookup unless\nthey are the only declaration of the entity. (We already mostly did\nthis for local extern declarations.)\n\nllvm-svn: 350505"},
		[d]={{t,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{W,9482,"/// 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  // For a qualified friend declaration (with no explicit marker to indicate\n  // that a template specialization was intended), note all (template and\n  // non-template) candidates.\n  if (QualifiedFriend && Candidates.empty()) {\n    Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}}
	},
	["err_qualified_function_typeid"]={
		[f]={{nil,p,"err_qualified_function_typeid"}},
		[e]={{nil,p,"type operand %0 of \'typeid\' cannot have \'%1\' qualifier"}},
		[g]={{nil,p,"type operand A of \'typeid\' cannot have \'B\' qualifier"}},
		[h]=k,
		[j]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
		[b]=a,
		[c]={{nil,p,m}},
		[i]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
		[d]={{"clang/lib/Sema/SemaType.cpp",2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"}
		}
	},
	["err_qualified_member_nonclass"]={
		[f]="err_qualified_member_nonclass",
		[e]="qualified member access refers to a member in %0",
		[g]="qualified member access refers to a member in A",
		[h]=k,
		[j]="qualified member access refers to a member in (.*?)",
		[b]=a,
		[c]=m,
		[i]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!\n\nllvm-svn: 84370"},
		[d]={{gb,683,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  if (SS.isSet()) {\n    // ...\n    if (!isa<TypeDecl>(DC)) {\n      SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}},
		[l]={
			["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"}
		}
	},
	["err_qualified_member_of_unrelated"]={
		[f]="err_qualified_member_of_unrelated",
		[e]="%q0 is not a member of class %1",
		[g]="A is not a member of class B",
		[h]=k,
		[j]="(.*?) is not a member of class (.*?)",
		[b]=a,
		[c]=m,
		[i]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access\nwith a qualifier referencing a different type.\n\nllvm-svn: 102409"},
		[d]={{gb,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression.  Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"}
		}
	},
	["err_qualified_objc_access"]={
		[f]="err_qualified_objc_access",
		[e]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
		[g]={{nil,nil,{{"property","instance variable"}," access cannot be qualified with \'B\'"}}},
		[h]=k,
		[j]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
		[b]=a,
		[c]=m,
		[i]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or\nproperty in an Objective-C++ member access expression. Fixes PR9759.\n\nllvm-svn: 141522"},
		[d]={{gb,1331,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{gb,1494,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}},
		[l]={
			["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"}
		}
	},
	["err_qualified_objc_catch_parm"]={
		[f]="err_qualified_objc_catch_parm",
		[e]="@catch parameter declarator cannot be qualified",
		[g]="@catch parameter declarator cannot be qualified",
		[h]=k,
		[j]="@catch parameter declarator cannot be qualified",
		[b]=a,
		[c]=m,
		[i]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"},
		[d]={{ab,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}}
	},
	["err_qualified_param_declarator"]={
		[f]="err_qualified_param_declarator",
		[e]="parameter declarator cannot be qualified",
		[g]="parameter declarator cannot be qualified",
		[h]=k,
		[j]="parameter declarator cannot be qualified",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}},
		[l]={
			["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"}
		}
	},
	["err_qualified_typedef_declarator"]={
		[f]="err_qualified_typedef_declarator",
		[e]="typedef declarator cannot be qualified",
		[g]="typedef declarator cannot be qualified",
		[h]=k,
		[j]="typedef declarator cannot be qualified",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,6661,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}},
		[l]={
			["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:101:18: error: typedef declarator cannot be qualified"}
		}
	},
	["err_range_on_array_parameter"]={
		[f]="err_range_on_array_parameter",
		[e]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
		[g]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C",
		[h]=k,
		[j]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
		[b]=a,
		[c]=m,
		[i]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a\nfunction parameter that has array type.  Such a parameter will be treated as\na pointer type instead, resulting in a missing begin function error is a\nsuggestion to dereference the pointer.  This provides a different,\nmore informative diagnostic as well as point to the parameter declaration.\n\nllvm-svn: 192512"},
		[d]={{Z,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (RangeVarType->isDependentType()) {\n  // ...\n  } else if (!BeginDeclStmt.get()) {\n    // ...\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    // ...\n    } else {\n      // ...\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            // ...\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}},
		[l]={
			["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"}
		}
	},
	["err_raw_delim_too_long"]={
		[f]="err_raw_delim_too_long",
		[e]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
		[g]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
		[h]=k,
		[j]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
		[b]=a,
		[c]=v,
		[i]={"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",2158,"/// 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        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}},
		[l]={
			["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"}
		}
	},
	["err_readonly_message_assignment"]={
		[f]="err_readonly_message_assignment",
		[e]="assigning to \'readonly\' return result of an Objective-C message not allowed",
		[g]="assigning to \'readonly\' return result of an Objective-C message not allowed",
		[h]=k,
		[j]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{x,14373,"/// 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_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}},
		[l]={
			["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"}
		}
	},
	["err_realimag_invalid_type"]={
		[f]="err_realimag_invalid_type",
		[e]="invalid type %0 to %1 operator",
		[g]="invalid type A to B operator",
		[h]=k,
		[j]="invalid type (.*?) to (.*?) operator",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{x,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  // ...\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}},
		[l]={
			["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"}
		}
	},
	["err_record_with_pointers_kernel_param"]={
		[f]="err_record_with_pointers_kernel_param",
		[e]="%select{struct|union}0 kernel parameters may not contain pointers",
		[g]={{nil,nil,{{Eb,Db}," kernel parameters may not contain pointers"}}},
		[h]=k,
		[j]="(?:struct|union) kernel parameters may not contain pointers",
		[b]=a,
		[c]=m,
		[i]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL\n\nbool, half, pointers and structs / unions containing any\nof these are not allowed. Does not yet reject size_t and\nrelated integer types that are also disallowed.\n\nllvm-svn: 186908"},
		[d]={{t,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  do {\n    // ...\n    for (const auto *FD : RD->fields()) {\n      // ...\n      // OpenCL v1.2 s6.9.p:\n      // Arguments to kernel functions that are declared to be a struct or union\n      // do not allow OpenCL objects to be passed as elements of the struct or\n      // union. This restriction was lifted in OpenCL v2.0 with the introduction\n      // of SVM.\n      if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n        S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}},
		[l]={
			["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"}
		}
	},
	["err_recursive_default_argument"]={
		[f]="err_recursive_default_argument",
		[e]="recursive evaluation of default argument",
		[g]="recursive evaluation of default argument",
		[h]=k,
		[j]="recursive evaluation of default argument",
		[b]=a,
		[c]=m,
		[i]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition\n\nIf definition of default function argument uses itself, clang crashed,\nbecause corresponding function parameter is not associated with the default\nargument yet. With this fix clang emits appropriate error message.\n\nThis change fixes PR28105.\n\nDifferential Revision: http://reviews.llvm.org/D21301\n\nllvm-svn: 272623"},
		[d]={{x,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // ...\n    // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n  // ...\n  if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"}
		}
	},
	["err_recursive_superclass"]={
		[f]="err_recursive_superclass",
		[e]="trying to recursively use %0 as superclass of %1",
		[g]="trying to recursively use A as superclass of B",
		[h]=k,
		[j]="trying to recursively use (.*?) as superclass of (.*?)",
		[b]=a,
		[c]=m,
		[i]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class.\n\nllvm-svn: 75178"},
		[d]={{ab,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n    Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}},
		[l]={
			["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"}
		}
	},
	["err_redeclaration_different_type"]={
		[f]="err_redeclaration_different_type",
		[e]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
		[g]={{nil,nil,{"redeclaration of A with a different type",{": B vs C",a}}}},
		[h]=k,
		[j]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
		[b]=a,
		[c]=m,
		[i]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree\n\nWe referred to all declaration in definitions in our diagnostic messages\nwhich is can be inaccurate.  Instead, classify the declaration and emit\nan appropriate diagnostic for the new declaration and an appropriate\nnote pointing to the old one.\n\nThis fixes PR24116.\n\nllvm-svn: 242190"},
		[d]={{t,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"}
		}
	},
	["err_redeclaration_non_exported"]={
		[f]={{nil,B,"err_redeclaration_non_exported"}},
		[e]={{nil,r,"cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1"},{B,B,"cannot export redeclaration %0 here since the previous declaration is not exported"}},
		[g]={{nil,r,{"cannot export redeclaration A here since the previous declaration ",{"is not exported","has internal linkage","has module linkage"}}},{B,B,"cannot export redeclaration A here since the previous declaration is not exported"}},
		[h]=k,
		[j]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
		[b]=a,
		[c]={{nil,B,m}},
		[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
		[d]={{t,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}},
		[l]={
			["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"}
		}
	},
	["err_redefinition"]={
		[f]="err_redefinition",
		[e]="redefinition of %0",
		[g]="redefinition of A",
		[h]=k,
		[j]="redefinition of (.*?)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{t,3042,"/// 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<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{t,3044,"/// 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<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        if (Diag == diag::err_redefinition)"},{t,4683,"/// 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  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{t,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n  if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n  // ...\n  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{t,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  // ...\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{t,17369,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              // ...\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              // ...\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                // ...\n                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{t,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      // ...\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{z,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{z,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //   A using-declaration is a declaration and can therefore be used\n  //   repeatedly where (and only where) multiple declarations are\n  //   allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{z,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{z,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    // ...\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{x,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (S) {\n      // ...\n      if (!Previous.empty()) {\n        // ...\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{W,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n    // ...\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        // ...\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        // ...\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{W,8904,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    // ...\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    // ...\n    } else if (Def) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{W,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // ...\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //   template<typename T, typename U>\n  //   struct Outer {\n  //     template<typename X> struct Inner;\n  //     template<> struct Inner<T> {};\n  //     template<> struct Inner<U> {};\n  //   };\n  //\n  //   Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}},
		[l]={
			["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"}
		}
	},
	["err_redefinition_different_concept"]={
		[f]={{nil,r,"err_redefinition_different_concept"}},
		[e]={{nil,r,"redefinition of concept %0 with different template parameters or requirements"}},
		[g]={{nil,r,"redefinition of concept A with different template parameters or requirements"}},
		[h]=k,
		[j]="redefinition of concept (.*?) with different template parameters or requirements",
		[b]=a,
		[c]={{nil,r,m}},
		[i]={lb,1625925174,kb,jb},
		[d]={{W,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
	},
	["err_redefinition_different_kind"]={
		[f]="err_redefinition_different_kind",
		[e]="redefinition of %0 as different kind of symbol",
		[g]="redefinition of A as different kind of symbol",
		[h]=k,
		[j]="redefinition of (.*?) as different kind of symbol",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{t,17460,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    // ...\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n      // ...\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      // ...\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n      // ...\n      } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n      // ...\n      } else {\n        // ...\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{z,11434,"/// 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    // ...\n    if (PrevNS) {\n    // ...\n    } else if (PrevDecl) {\n      // ...\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{z,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //   A using-declaration is a declaration and can therefore be used\n  //   repeatedly where (and only where) multiple declarations are\n  //   allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{z,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{z,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{ab,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  // ...\n  } else {\n    // ...\n    if (PrevDecl && !SuperClassDecl) {\n      // ...\n      // This handles the following case:\n      //\n      // typedef int SuperClass;\n      // @interface MyClass : SuperClass {} @end\n      //\n      if (!SuperClassDecl) {\n        Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{ab,991,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{ab,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{ab,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (SuperClassname) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{ab,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      // ...\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{W,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n  // ...\n  } else if (PrevDecl) {\n    // ...\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{W,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!OldConcept) {\n    // ...\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}},
		[l]={
			["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"}
		}
	},
	["err_redefinition_different_namespace_alias"]={
		[f]="err_redefinition_different_namespace_alias",
		[e]="redefinition of %0 as an alias for a different namespace",
		[g]="redefinition of A as an alias for a different namespace",
		[h]=k,
		[j]="redefinition of (.*?) as an alias for a different namespace",
		[b]=a,
		[c]=m,
		[i]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes\nmerging of namespace aliases across modules and improves source fidelity.\nIncidentally also fixes PR20816.\n\nllvm-svn: 217103"},
		[d]={{z,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      // ...\n      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}},
		[l]={
			["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"}
		}
	},
	["err_redefinition_different_type"]={
		[f]="err_redefinition_different_type",
		[e]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
		[g]={{nil,nil,{"redefinition of A with a different type",{": B vs C",a}}}},
		[h]=k,
		[j]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"}
		}
	},
	["err_redefinition_different_typedef"]={
		[f]="err_redefinition_different_typedef",
		[e]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
		[g]={{nil,nil,{{"typedef","type alias","type alias template"}," redefinition with different types",{" (B vs C)",a}}}},
		[h]=k,
		[j]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{z,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n        // ...\n        if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n          // ...\n          Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
		[l]={
			["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"}
		}
	},
	["err_redefinition_extern_inline"]={
		[f]="err_redefinition_extern_inline",
		[e]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
		[g]={{nil,nil,{"redefinition of a \'extern inline\' function A is not supported in ",{"C99 mode","C++"}}}},
		[h]=k,
		[j]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
		[b]=a,
		[c]=m,
		[i]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern\ninline\" function outside of GNU89 mode. Fixes\n<rdar://problem/6880464>.\n\nllvm-svn: 113204"},
		[d]={{t,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n    Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}},
		[l]={
			["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"}
		}
	},
	["err_redefinition_of_enumerator"]={
		[f]="err_redefinition_of_enumerator",
		[e]="redefinition of enumerator %0",
		[g]="redefinition of enumerator A",
		[h]=k,
		[j]="redefinition of enumerator (.*?)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n        Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}},
		[l]={
			["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"}
		}
	},
	["err_redefinition_of_label"]={
		[f]="err_redefinition_of_label",
		[e]="redefinition of label %0",
		[g]="redefinition of label A",
		[h]=k,
		[j]="redefinition of label (.*?)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{Z,559,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // If the label was multiply defined, reject it now.\n  if (TheDecl->getStmt()) {\n    Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}},
		[l]={
			["clang/test/Parser/goto.c"]={"clang/test/Parser/goto.c:26:3: error: redefinition of label \'l\'"}
		}
	},
	["err_redefinition_variably_modified_typedef"]={
		[f]="err_redefinition_variably_modified_typedef",
		[e]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
		[g]={{nil,nil,{"redefinition of ",{"typedef","type alias"}," for variably-modified type B"}}},
		[h]=k,
		[j]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
		[b]=a,
		[c]=m,
		[i]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a\nvariably-modified type.\n\nllvm-svn: 147973"},
		[d]={{t,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (NewType->isVariablyModifiedType()) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}},
		[l]={
			["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"}
		}
	},
	["err_ref_array_type"]={
		[f]="err_ref_array_type",
		[e]="cannot refer to declaration with an array type inside block",
		[g]="cannot refer to declaration with an array type inside block",
		[h]=k,
		[j]="cannot refer to declaration with an array type inside block",
		[b]=a,
		[c]=m,
		[i]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948.","Disallow captured arrays in blocks as well.  Radar 7438948.\n\nllvm-svn: 92677"},
		[d]={{x,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // ...\n  // Blocks are not allowed to capture arrays, excepting OpenCL.\n  // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n  // (decayed to pointers).\n  if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n      S.Diag(Loc, diag::err_ref_array_type);"}},
		[l]={
			["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"}
		}
	},
	["err_ref_bad_target"]={
		[f]="err_ref_bad_target",
		[e]={{nil,u,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function"},{ob,nil,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in %select{__device__|__global__|__host__|__host__ __device__}2 function"}},
		[g]={{nil,u,{"reference to ",{Ib,Gb,Jb,Sb}," ",{"function","variable"}," C in ",{Ib,Gb,Jb,Sb}," function"}},{ob,nil,{"reference to ",{Ib,Gb,Jb,Sb}," function B in ",{Ib,Gb,Jb,Sb}," function"}}},
		[h]=k,
		[j]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
		[b]=a,
		[c]=m,
		[i]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets\n\nllvm-svn: 140978"},
		[d]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  // ...\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{x,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  // ...\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    // ...\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}},
		[l]={
			["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"}
		}
	},
	["err_ref_bad_target_global_initializer"]={
		[f]="err_ref_bad_target_global_initializer",
		[e]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
		[g]={{nil,nil,{"reference to ",{Ib,Gb,Jb,Sb}," function B in global initializer"}}},
		[h]=k,
		[j]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
		[b]=a,
		[c]=m,
		[i]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers.\n\nReviewers: tra\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23335\n\nllvm-svn: 278196"},
		[d]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  // ...\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  // ...\n  } else {\n    // ...\n    if (InitFn) {\n      // ...\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}},
		[l]={
			["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"}
		}
	},
	["err_ref_flexarray_type"]={
		[f]="err_ref_flexarray_type",
		[e]="cannot refer to declaration of structure variable with flexible array member inside block",
		[g]="cannot refer to declaration of structure variable with flexible array member inside block",
		[h]=k,
		[j]="cannot refer to declaration of structure variable with flexible array member inside block",
		[b]=a,
		[c]=m,
		[i]={"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]={{x,19177,"// 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          S.Diag(Loc, diag::err_ref_flexarray_type);"}},
		[l]={
			["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"}
		}
	},
	["err_ref_init_ambiguous"]={
		[f]="err_ref_init_ambiguous",
		[e]="reference initialization of type %0 with initializer of type %1 is ambiguous",
		[g]="reference initialization of type A with initializer of type B is ambiguous",
		[h]=k,
		[j]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
		[b]=a,
		[c]=m,
		[i]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization.\nRemoves a FIXME.\n\nllvm-svn: 84068"},
		[d]={{T,9651,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"}},
		[l]={
			["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"}
		}
	},
	["err_ref_non_value"]={
		[f]="err_ref_non_value",
		[e]="%0 does not refer to a value",
		[g]="A does not refer to a value",
		[h]=k,
		[j]="(.*?) does not refer to a value",
		[b]=a,
		[c]=m,
		[i]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a\nValueDecl, because that isn\'t always the case in ill-formed\ncode. Diagnose a common mistake (forgetting to provide a template\nargument list for a class template, PR5655) and dyn_cast so that we\nhandle the general problem of referring to a non-value declaration\ngracefully.\n\nllvm-svn: 90239"},
		[d]={{x,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n  // ...\n  // Make sure that we\'re referring to a value.\n  if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}},
		[l]={
			["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"}
		}
	},
	["err_ref_qualifier_comparison_operator"]={
		[f]="err_ref_qualifier_comparison_operator",
		[e]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
		[g]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
		[h]=k,
		[j]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
		[b]=a,
		[c]=m,
		[i]={lb,1625925174,kb,jb},
		[d]={{z,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n    // ...\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}},
		[l]={
			["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"}
		}
	},
	["err_ref_qualifier_constructor"]={
		[f]="err_ref_qualifier_constructor",
		[e]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
		[g]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a constructor"}}},
		[h]=k,
		[j]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
		[b]=a,
		[c]=m,
		[i]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
		[d]={{z,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
		[l]={
			["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"}
		}
	},
	["err_ref_qualifier_destructor"]={
		[f]="err_ref_qualifier_destructor",
		[e]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
		[g]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a destructor"}}},
		[h]=k,
		[j]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
		[b]=a,
		[c]=m,
		[i]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
		[d]={{z,10924,"/// 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  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
		[l]={
			["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"}
		}
	},
	["err_ref_qualifier_overload"]={
		[f]="err_ref_qualifier_overload",
		[e]="cannot overload a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}0 with a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}1",
		[g]={{nil,nil,{"cannot overload a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}," with a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}}}},
		[h]=k,
		[j]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')",
		[b]=a,
		[c]=m,
		[i]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot\noverload a function without a ref-qualifier (C++0x\n[over.load]p2). This, apparently, completes the implementation of\nrvalue references for *this.\n\nllvm-svn: 124321"},
		[d]={{"clang/lib/Sema/SemaOverload.cpp",1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n  // ...\n  if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n    if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n      if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n        // ...\n        Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}},
		[l]={
			["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"}
		}
	},
	["err_ref_vm_type"]={
		[f]="err_ref_vm_type",
		[e]="cannot refer to declaration with a variably modified type inside block",
		[g]="cannot refer to declaration with a variably modified type inside block",
		[h]=k,
		[j]="cannot refer to declaration with a variably modified type inside block",
		[b]=a,
		[c]=m,
		[i]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks.\n\nllvm-svn: 92676"},
		[d]={{x,19165,"// 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 variably-modified types in blocks; they\'re difficult to deal with.\n  if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_ref_vm_type);"}},
		[l]={
			["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"}
		}
	},
	["err_refactor_code_outside_of_function"]={
		[f]={{nil,y,"err_refactor_code_outside_of_function"}},
		[e]={{nil,y,"the selected code is not a part of a function\'s / method\'s body"}},
		[g]={{nil,y,"the selected code is not a part of a function\'s / method\'s body"}},
		[h]=k,
		[j]="the selected code is not a part of a function\'s \\/ method\'s body",
		[b]=a,
		[c]={{nil,y,zb}},
		[i]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
		[d]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // We would like to extract code out of functions/methods/blocks.\n  // Prohibit extraction from things like global variable / field\n  // initializers and other top-level expressions.\n  if (!Code.isInFunctionLikeBodyOfCode())\n    return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}}
	},
	["err_refactor_extract_prohibited_expression"]={
		[f]={{nil,y,"err_refactor_extract_prohibited_expression"}},
		[e]={{nil,y,"the selected expression can\'t be extracted"}},
		[g]={{nil,y,"the selected expression can\'t be extracted"}},
		[h]=k,
		[j]="the selected expression can\'t be extracted",
		[b]=a,
		[c]={{nil,y,zb}},
		[i]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters\n\nllvm-svn: 317056"},
		[d]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // ...\n    // Property setters can\'t be extracted.\n    if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n      if (!PRE->isMessagingGetter())\n        return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}}
	},
	["err_refactor_extract_simple_expression"]={
		[f]={{nil,y,"err_refactor_extract_simple_expression"}},
		[e]={{nil,y,"the selected expression is too simple to extract"}},
		[g]={{nil,y,"the selected expression is too simple to extract"}},
		[h]=k,
		[j]="the selected expression is too simple to extract",
		[b]=a,
		[c]={{nil,y,zb}},
		[i]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
		[d]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // Avoid extraction of simple literals and references.\n    if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n      return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
	},
	["err_refactor_no_selection"]={
		[f]={{nil,y,"err_refactor_no_selection"}},
		[e]={{nil,y,"refactoring action can\'t be initiated without a selection"}},
		[g]={{nil,y,"refactoring action can\'t be initiated without a selection"}},
		[h]=k,
		[j]="refactoring action can\'t be initiated without a selection",
		[b]=a,
		[c]={{nil,y,zb}},
		[i]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
		[d]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // ...\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    // ...\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
	},
	["err_refactor_selection_invalid_ast"]={
		[f]={{nil,y,"err_refactor_selection_invalid_ast"}},
		[e]={{nil,y,"the provided selection does not overlap with the AST nodes of interest"}},
		[g]={{nil,y,"the provided selection does not overlap with the AST nodes of interest"}},
		[h]=k,
		[j]="the provided selection does not overlap with the AST nodes of interest",
		[b]=a,
		[c]={{nil,y,zb}},
		[i]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
		[d]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!Selection)\n    return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
	},
	["err_refactor_selection_no_symbol"]={
		[f]={{nil,y,"err_refactor_selection_no_symbol"}},
		[e]={{nil,y,"there is no symbol at the given location"}},
		[g]={{nil,y,"there is no symbol at the given location"}},
		[h]=k,
		[j]="there is no symbol at the given location",
		[b]=a,
		[c]={{nil,y,zb}},
		[i]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
		[d]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  // ...\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
	},
	["err_reference_bind_drops_quals"]={
		[f]="err_reference_bind_drops_quals",
		[e]={{nil,p,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space|not permitted due to incompatible qualifiers}2"},{A,A,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space}2"},{w,nil,"binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|\'const\'|\'restrict\'|\'const\' and \'restrict\'|\'volatile\'|\'const\' and \'volatile\'|\'restrict\' and \'volatile\'|\'const\', \'restrict\', and \'volatile\'}2 qualifier%plural{1:|2:|4:|:s}2"}},
		[g]={{nil,p,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space","not permitted due to incompatible qualifiers"}}},{A,A,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space"}}},{w,nil,{"binding value ",{"of type A to reference to type B","to reference"}," drops ",{"\'const\'","\'restrict\'","\'const\' and \'restrict\'","\'volatile\'","\'const\' and \'volatile\'","\'restrict\' and \'volatile\'","\'const\', \'restrict\', and \'volatile\'"}," qualifier",{a,a,a,"s"}}}},
		[h]=k,
		[j]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
		[b]=a,
		[c]=m,
		[i]={"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]={{T,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{T,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{T,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n    // ...\n    else\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}},
		[l]={
			["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"}
		}
	},
	["err_reference_bind_failed"]={
		[f]="err_reference_bind_failed",
		[e]={{nil,A,"reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3"},{w,nil,"reference %diff{to type $ could not bind to an %select{rvalue|lvalue}1 of type $|could not bind to %select{rvalue|lvalue}1 of incompatible type}0,2"}},
		[g]={{nil,A,{"reference ",{{"to ",{"type","incomplete type"}," A could not bind to an ",{"rvalue","lvalue"}," of type D"},{"could not bind to ",{"rvalue","lvalue"}," of incompatible type"}}}},{w,nil,{"reference ",{{"to type A could not bind to an ",{"rvalue","lvalue"}," of type C"},{"could not bind to ",{"rvalue","lvalue"}," of incompatible type"}}}}},
		[h]=k,
		[j]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
		[b]=a,
		[c]=m,
		[i]={"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]={{T,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitFailed:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"}
		}
	},
	["err_reference_bind_init_list"]={
		[f]="err_reference_bind_init_list",
		[e]="reference to type %0 cannot bind to an initializer list",
		[g]="reference to type A cannot bind to an initializer list",
		[h]=k,
		[j]="reference to type (.*?) cannot bind to an initializer list",
		[b]=a,
		[c]=m,
		[i]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"},
		[d]={{T,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceBindingToInitList:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"}
		}
	},
	["err_reference_bind_temporary_addrspace"]={
		[f]={{nil,A,"err_reference_bind_temporary_addrspace"}},
		[e]={{nil,A,"reference of type %0 cannot bind to a temporary object because of address space mismatch"}},
		[g]={{nil,A,"reference of type A cannot bind to a temporary object because of address space mismatch"}},
		[h]=k,
		[j]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
		[b]=a,
		[c]={{nil,A,m}},
		[i]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries\n\nReferences to arbitrary address spaces can\'t always be bound to\ntemporaries. This change extends the reference binding logic to\ncheck that the address space of a temporary can be implicitly\nconverted to the address space in a reference when temporary\nmaterialization is performed.\n\nDifferential Revision: https://reviews.llvm.org/D61318\n\nllvm-svn: 362604"},
		[d]={{T,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"}
		}
	},
	["err_reference_bind_to_bitfield"]={
		[f]="err_reference_bind_to_bitfield",
		[e]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
		[g]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to bit-field",{a,hb}}}},
		[h]=k,
		[j]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
		[b]=a,
		[c]=m,
		[i]={"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]={{T,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    // ...\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"}
		}
	},
	["err_reference_bind_to_matrix_element"]={
		[f]={{nil,o,"err_reference_bind_to_matrix_element"}},
		[e]={{nil,o,"%select{non-const|volatile}0 reference cannot bind to matrix element"}},
		[g]={{nil,o,{{"non-const","volatile"}," reference cannot bind to matrix element"}}},
		[h]=k,
		[j]="(?:non\\-const|volatile) reference cannot bind to matrix element",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{T,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"}
		}
	},
	["err_reference_bind_to_vector_element"]={
		[f]="err_reference_bind_to_vector_element",
		[e]="%select{non-const|volatile}0 reference cannot bind to vector element",
		[g]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to vector element"}}},
		[h]=k,
		[j]="(?:non\\-const|volatile) reference cannot bind to vector element",
		[b]=a,
		[c]=m,
		[i]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element.\n\nllvm-svn: 94963"},
		[d]={{T,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"}
		}
	},
	["err_reference_capture_with_reference_default"]={
		[f]="err_reference_capture_with_reference_default",
		[e]="\'&\' cannot precede a capture when the capture default is \'&\'",
		[g]="\'&\' cannot precede a capture when the capture default is \'&\'",
		[h]=k,
		[j]="\'&\' cannot precede a capture when the capture default is \'&\'",
		[b]=a,
		[c]="Lambda Issue",
		[i]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related to lambdas) is heavily based off of John Freeman\'s work-in-progress patches.\n\nllvm-svn: 147706"},
		[d]={{"clang/lib/Sema/SemaLambda.cpp",1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->Init.isUsable()) {\n    // ...\n    } else {\n      // ...\n      // C++11 [expr.prim.lambda]p8:\n      //   If a lambda-capture includes a capture-default that is &, the\n      //   identifiers in the lambda-capture shall not be preceded by &.\n      //   If a lambda-capture includes a capture-default that is =, [...]\n      //   each identifier it contains shall be preceded by &.\n      if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n        Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"}
		}
	},
	["err_reference_has_multiple_inits"]={
		[f]="err_reference_has_multiple_inits",
		[e]="reference cannot be initialized with multiple values",
		[g]="reference cannot be initialized with multiple values",
		[h]=k,
		[j]="reference cannot be initialized with multiple values",
		[b]=a,
		[c]=m,
		[i]={"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]={{T,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n    if (Args.empty()) {\n    // ...\n    } else // FIXME: diagnostic below could be better!\n      S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}}
	},
	["err_reference_pipe_type"]={
		[f]="err_reference_pipe_type",
		[e]="pipes packet types cannot be of reference type",
		[g]="pipes packet types cannot be of reference type",
		[h]=k,
		[j]="pipes packet types cannot be of reference type",
		[b]=a,
		[c]=m,
		[i]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
		[d]={{t,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\n    // ...\n    // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n    // types.\n    if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n      if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n        // ...\n        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
		[l]={
			["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"}
		}
	},
	["err_reference_to_function_with_unsatisfied_constraints"]={
		[f]={{nil,p,"err_reference_to_function_with_unsatisfied_constraints"}},
		[e]={{nil,p,"invalid reference to function %0: constraints not satisfied"}},
		[g]={{nil,p,"invalid reference to function A: constraints not satisfied"}},
		[h]=k,
		[j]="invalid reference to function (.*?)\\: constraints not satisfied",
		[b]=a,
		[c]={{nil,p,m}},
		[i]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
		[d]={{x,297,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    // [expr.prim.id]p4\n    //   A program that refers explicitly or implicitly to a function with a\n    //   trailing requires-clause whose constraint-expression is not satisfied,\n    //   other than to declare it, is ill-formed. [...]\n    //\n    // See if this is a function with constraints that need to be satisfied.\n    // Check this before deducing the return type, as it might instantiate the\n    // definition.\n    if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n      // ...\n      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}},
		[l]={
			["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"}
		}
	},
	["err_reference_to_local_in_enclosing_context"]={
		[f]="err_reference_to_local_in_enclosing_context",
		[e]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
		[g]={{nil,nil,{"reference to local ",{"variable","binding"}," A declared in enclosing ",{"D","block literal","lambda expression","context"}}}},
		[h]=k,
		[j]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
		[b]=a,
		[c]=m,
		[i]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG\nagrees on how they\'re supposed to work.\n\nllvm-svn: 278648"},
		[d]={{x,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  // ...\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
		[l]={
			["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"}
		}
	},
	["err_reference_to_void"]={
		[f]="err_reference_to_void",
		[e]="cannot form a reference to \'void\'",
		[g]="cannot form a reference to \'void\'",
		[h]=k,
		[j]="cannot form a reference to \'void\'",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{"clang/lib/Sema/SemaType.cpp",2270,"/// 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  // C++ [dcl.ref]p1:\n  //   A declarator that specifies the type \"reference to cv void\"\n  //   is ill-formed.\n  if (T->isVoidType()) {\n    Diag(Loc, diag::err_reference_to_void);"}},
		[l]={
			["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"}
		}
	},
	["err_reference_var_requires_init"]={
		[f]="err_reference_var_requires_init",
		[e]="declaration of reference variable %0 requires an initializer",
		[g]="declaration of reference variable A requires an initializer",
		[h]=k,
		[j]="declaration of reference variable (.*?) requires an initializer",
		[b]=a,
		[c]=m,
		[i]={L,1236199783,K,J},
		[d]={{t,13842,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // Provide a specific diagnostic for uninitialized variable\n    // definitions with reference type.\n    if (Type->isReferenceType()) {\n      Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"}
		}
	},
	["err_reference_without_init"]={
		[f]="err_reference_without_init",
		[e]="reference to type %0 requires an initializer",
		[g]="reference to type A requires an initializer",
		[h]=k,
		[j]="reference to type (.*?) requires an initializer",
		[b]=a,
		[c]=m,
		[i]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several\n(necessarily simultaneous) changes:\n\n  - CXXBaseOrMemberInitializer now contains only a single initializer\n    rather than a set of initialiation arguments + a constructor. The\n    single initializer covers all aspects of initialization, including\n    constructor calls as necessary but also cleanup of temporaries\n    created by the initializer (which we never handled\n    before!).\n\n  - Rework + simplify code generation for CXXBaseOrMemberInitializers,\n    since we can now just emit the initializer as an initializer.\n\n  - Switched base and member initialization over to the new\n    initialization code (InitializationSequence), so that it\n\n  - Improved diagnostics for the new initialization code when\n    initializing bases and members, to match the diagnostics produced\n    by the previous (special-purpose) code.\n\n  - Simplify the representation of type-checked constructor initializers in\n    templates; instead of keeping the fully-type-checked AST, which is\n    rather hard to undo at template instantiation time, throw away the\n    type-checked AST and store the raw expressions in the AST. This\n    simplifies instantiation, but loses a little but of information in\n    the AST.\n\n  - When type-checking implicit base or member initializers within a\n    dependent context, don\'t add the generated initializers into the\n    AST, because they\'ll look like they were explicit.\n\n  - Record in CXXConstructExpr when the constructor call is to\n  initialize a base class, so that CodeGen does not have to infer it\n  from context. This ensures that we call the right kind of\n  constructor.\n\nThere are also a few \"opportunity\" fixes here that were needed to not\nregress, for example:\n\n  - Diagnose default-initialization of a const-qualified class that\n    does not have a user-declared default constructor. We had this\n    diagnostic specifically for bases and members, but missed it for\n    variables. That\'s fixed now.\n\n  - When defining the implicit constructors, destructor, and\n    copy-assignment operator, set the CurContext to that constructor\n    when we\'re defining the body.\n\nllvm-svn: 94952"},
		[d]={{T,9431,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  if (T->isReferenceType()) {\n    S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}},
		[l]={
			["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:94:47: error: reference to type \'int\' requires an initializer"}
		}
	},
	["err_regparm_mismatch"]={
		[f]="err_regparm_mismatch",
		[e]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
		[g]={{nil,nil,{"function declared with regparm(A) attribute was previously declared ",{"without the regparm","with the regparm(B)"}," attribute"}}},
		[h]=k,
		[j]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
		[b]=a,
		[c]=m,
		[i]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a\nfunction to redeclarations of that function. Fixes PR7025.\n\nllvm-svn: 106317"},
		[d]={{t,3831,"/// 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 regparm attribute.\n  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n    if (NewTypeInfo.getHasRegParm()) {\n      Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}},
		[l]={
			["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"}
		}
	},
	["err_relocatable_without_isysroot"]={
		[f]="err_relocatable_without_isysroot",
		[e]="must specify system root with -isysroot when building a relocatable PCH file",
		[g]="must specify system root with -isysroot when building a relocatable PCH file",
		[h]=k,
		[j]="must specify system root with \\-isysroot when building a relocatable PCH file",
		[b]=a,
		[c]=I,
		[i]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name.\n\nllvm-svn: 111257"},
		[d]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  // ...\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
	},
	["err_repeat_attribute"]={
		[f]="err_repeat_attribute",
		[e]="%0 attribute cannot be repeated",
		[g]="A attribute cannot be repeated",
		[h]=k,
		[j]="(.*?) attribute cannot be repeated",
		[b]=a,
		[c]=m,
		[i]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override.\nThe attributes are currently ignored.\n\nllvm-svn: 89837"},
		[d]={{"clang/lib/Sema/SemaDeclAttr.cpp",2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
		[l]={
			["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"}
		}
	},
	["err_require_constant_init_failed"]={
		[f]="err_require_constant_init_failed",
		[e]="variable does not have a constant initializer",
		[g]="variable does not have a constant initializer",
		[h]=k,
		[j]="variable does not have a constant initializer",
		[b]=a,
		[c]=m,
		[i]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization.\n\nSummary:\nThis attribute specifies expectations about the initialization of static and\nthread local variables. Specifically that the variable has a\n[constant initializer](http://en.cppreference.com/w/cpp/language/constant_initialization)\naccording to the rules of [basic.start.static]. Failure to meet this expectation\nwill result in an error.\n\nStatic objects with constant initializers avoid hard-to-find bugs caused by\nthe indeterminate order of dynamic initialization. They can also be safely\nused by other static constructors across translation units.\n\nThis attribute acts as a compile time assertion that the requirements\nfor constant initialization have been met. Since these requirements change\nbetween dialects and have subtle pitfalls it\'s important to fail fast instead\nof silently falling back on dynamic initialization.\n\n```c++\n  // -std=c++14\n  #define SAFE_STATIC __attribute__((require_constant_initialization)) static\n  struct T {\n    constexpr T(int) {}\n    ~T();\n  };\n  SAFE_STATIC T x = {42}; // OK.\n  SAFE_STATIC T y = 42; // error: variable does not have a constant initializer\n  // copy initialization is not a constant expression on a non-literal type.\n```\nThis attribute can only be applied to objects with static or thread-local storage\nduration.\n\nReviewers: majnemer, rsmith, aaron.ballman\n\nSubscribers: jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23385\n\nllvm-svn: 280516"},
		[d]={{t,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n    // ...\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      // ...\n      Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"}
		}
	},
	["err_requires_clause_inside_parens"]={
		[f]={{nil,p,"err_requires_clause_inside_parens"}},
		[e]={{nil,p,"trailing requires clause should be placed outside parentheses"}},
		[g]={{nil,p,"trailing requires clause should be placed outside parentheses"}},
		[h]=k,
		[j]="trailing requires clause should be placed outside parentheses",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{vb,6714,"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    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}},
		[l]={
			["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"}
		}
	},
	["err_requires_clause_must_appear_after_trailing_return"]={
		[f]={{nil,p,"err_requires_clause_must_appear_after_trailing_return"}},
		[e]={{nil,p,"trailing return type must appear before trailing requires clause"}},
		[g]={{nil,p,"trailing return type must appear before trailing requires clause"}},
		[h]=k,
		[j]="trailing return type must appear before trailing requires clause",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{"clang/lib/Parse/ParseDeclCXX.cpp",4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  // Did the user swap the trailing return type and requires clause?\n  if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n    // ...\n    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}},
		[l]={
			["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"}
		}
	},
	["err_requires_clause_on_declarator_not_declaring_a_function"]={
		[f]={{nil,p,"err_requires_clause_on_declarator_not_declaring_a_function"}},
		[e]={{nil,p,"trailing requires clause can only be used when declaring a function"}},
		[g]={{nil,p,"trailing requires clause can only be used when declaring a function"}},
		[h]=k,
		[j]="trailing requires clause can only be used when declaring a function",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{vb,7375,"/// 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 (Tok.is(tok::kw_requires)) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{"clang/lib/Parse/ParseDeclCXX.cpp",4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}},
		[l]={
			["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"}
		}
	},
	["err_requires_expr_expected_type_constraint"]={
		[f]={{nil,p,"err_requires_expr_expected_type_constraint"}},
		[e]={{nil,p,"expected concept name with optional arguments"}},
		[g]={{nil,p,"expected concept name with optional arguments"}},
		[h]=k,
		[j]="expected concept name with optional arguments",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{qb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///     A requires-expression provides a concise way to express requirements on\n///     template arguments. A requirement is one that can be checked by name\n///     lookup (6.4) or by checking properties of types and expressions.\n///\n///     requires-expression:\n///         \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///     requirement-parameter-list:\n///         \'(\' parameter-declaration-clause[opt] \')\'\n///\n///     requirement-body:\n///         \'{\' requirement-seq \'}\'\n///\n///     requirement-seq:\n///         requirement\n///         requirement-seq requirement\n///\n///     requirement:\n///         simple-requirement\n///         type-requirement\n///         compound-requirement\n///         nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!isTypeConstraintAnnotation()) {\n          Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}},
		[l]={
			[ub]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"}
		}
	},
	["err_requires_expr_in_simple_requirement"]={
		[f]={{nil,B,"err_requires_expr_in_simple_requirement"}},
		[e]={{nil,B,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
		[g]={{nil,B,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
		[h]=k,
		[j]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
		[b]=a,
		[c]={{nil,B,s}},
		[i]={"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]={{qb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///     A requires-expression provides a concise way to express requirements on\n///     template arguments. A requirement is one that can be checked by name\n///     lookup (6.4) or by checking properties of types and expressions.\n///\n///     requires-expression:\n///         \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///     requirement-parameter-list:\n///         \'(\' parameter-declaration-clause[opt] \')\'\n///\n///     requirement-body:\n///         \'{\' requirement-seq \'}\'\n///\n///     requirement-seq:\n///         requirement\n///         requirement-seq requirement\n///\n///     requirement:\n///         simple-requirement\n///         type-requirement\n///         compound-requirement\n///         nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}},
		[l]={
			[ub]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}
		}
	},
	["err_requires_expr_local_parameter_default_argument"]={
		[f]={{nil,p,"err_requires_expr_local_parameter_default_argument"}},
		[e]={{nil,p,"default arguments not allowed for parameters of a requires expression"}},
		[g]={{nil,p,"default arguments not allowed for parameters of a requires expression"}},
		[h]=k,
		[j]="default arguments not allowed for parameters of a requires expression",
		[b]=a,
		[c]={{nil,p,m}},
		[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
		[d]={{rb,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  // ...\n  for (ParmVarDecl *Param : LocalParameters) {\n    if (Param->hasDefaultArg())\n      // ...\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}},
		[l]={
			[ub]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"}
		}
	},
	["err_requires_expr_missing_arrow"]={
		[f]={{nil,p,"err_requires_expr_missing_arrow"}},
		[e]={{nil,p,"expected \'->\' before expression type requirement"}},
		[g]={{nil,p,"expected \'->\' before expression type requirement"}},
		[h]=k,
		[j]="expected \'\\-\\>\' before expression type requirement",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{qb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///     A requires-expression provides a concise way to express requirements on\n///     template arguments. A requirement is one that can be checked by name\n///     lookup (6.4) or by checking properties of types and expressions.\n///\n///     requires-expression:\n///         \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///     requirement-parameter-list:\n///         \'(\' parameter-declaration-clause[opt] \')\'\n///\n///     requirement-body:\n///         \'{\' requirement-seq \'}\'\n///\n///     requirement-seq:\n///         requirement\n///         requirement-seq requirement\n///\n///     requirement:\n///         simple-requirement\n///         type-requirement\n///         compound-requirement\n///         nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!TryConsumeToken(tok::arrow))\n          // ...\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}},
		[l]={
			[ub]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"}
		}
	},
	["err_requires_expr_parameter_list_ellipsis"]={
		[f]={{nil,p,"err_requires_expr_parameter_list_ellipsis"}},
		[e]={{nil,p,"varargs not allowed in requires expression"}},
		[g]={{nil,p,"varargs not allowed in requires expression"}},
		[h]=k,
		[j]="varargs not allowed in requires expression",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{qb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///     A requires-expression provides a concise way to express requirements on\n///     template arguments. A requirement is one that can be checked by name\n///     lookup (6.4) or by checking properties of types and expressions.\n///\n///     requires-expression:\n///         \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///     requirement-parameter-list:\n///         \'(\' parameter-declaration-clause[opt] \')\'\n///\n///     requirement-body:\n///         \'{\' requirement-seq \'}\'\n///\n///     requirement-seq:\n///         requirement\n///         requirement-seq requirement\n///\n///     requirement:\n///         simple-requirement\n///         type-requirement\n///         compound-requirement\n///         nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!Tok.is(tok::r_paren)) {\n      // ...\n      if (EllipsisLoc.isValid())\n        Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}},
		[l]={
			[ub]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"}
		}
	},
	["err_requires_expr_parameter_referenced_in_evaluated_context"]={
		[f]={{nil,p,"err_requires_expr_parameter_referenced_in_evaluated_context"}},
		[e]={{nil,p,"constraint variable %0 cannot be used in an evaluated context"}},
		[g]={{nil,p,"constraint variable A cannot be used in an evaluated context"}},
		[h]=k,
		[j]="constraint variable (.*?) cannot be used in an evaluated context",
		[b]=a,
		[c]={{nil,p,m}},
		[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
		[d]={{x,404,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    // ...\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"}
		}
	},
	["err_requires_expr_simple_requirement_noexcept"]={
		[f]={{nil,p,"err_requires_expr_simple_requirement_noexcept"}},
		[e]={{nil,p,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
		[g]={{nil,p,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
		[h]=k,
		[j]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
		[b]=a,
		[c]={{nil,p,s}},
		[i]={mb,1570627358,nb,pb},
		[d]={{qb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///     A requires-expression provides a concise way to express requirements on\n///     template arguments. A requirement is one that can be checked by name\n///     lookup (6.4) or by checking properties of types and expressions.\n///\n///     requires-expression:\n///         \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///     requirement-parameter-list:\n///         \'(\' parameter-declaration-clause[opt] \')\'\n///\n///     requirement-body:\n///         \'{\' requirement-seq \'}\'\n///\n///     requirement-seq:\n///         requirement\n///         requirement-seq requirement\n///\n///     requirement:\n///         simple-requirement\n///         type-requirement\n///         compound-requirement\n///         nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        // User may have tried to put some compound requirement stuff here\n        if (Tok.is(tok::kw_noexcept)) {\n          Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}},
		[l]={
			[ub]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}
		}
	},
	["err_restricted_superclass_mismatch"]={
		[f]="err_restricted_superclass_mismatch",
		[e]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
		[g]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
		[h]=k,
		[j]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
		[b]=a,
		[c]=m,
		[i]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute\n\nThis patch adds an objc_subclassing_restricted attribute into clang. This\nattribute acts similarly to \'final\' - Objective-C classes with this attribute\ncan\'t be subclassed. However, @interface declarations that have\nobjc_subclassing_restricted but don\'t have @implementation are allowed to\ninherit other @interface declarations with objc_subclassing_restricted. This is\nneeded to describe the Swift class hierarchy in clang while making sure that\nthe Objective-C classes cannot subclass the Swift classes.\n\nThis attribute is already implemented in a fork of clang that\'s used for Swift\n(https://github.com/apple/swift-clang) and this patch moves that code to the\nupstream clang repository.\n\nrdar://28937548\n\nDifferential Revision: https://reviews.llvm.org/D25993\n\nllvm-svn: 285391"},
		[d]={{ab,4165,"// 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 (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{ab,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  // ...\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  // ...\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}},
		[l]={
			["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"}
		}
	},
	["err_ret_local_block"]={
		[f]="err_ret_local_block",
		[e]="returning block that lives on the local stack",
		[g]="returning block that lives on the local stack",
		[h]=k,
		[j]="returning block that lives on the local stack",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{T,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      // ...\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}},
		[l]={
			["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"}
		}
	},
	["err_rethrow_used_outside_catch"]={
		[f]="err_rethrow_used_outside_catch",
		[e]="@throw (rethrow) used outside of a @catch block",
		[g]="@throw (rethrow) used outside of a @catch block",
		[h]=k,
		[j]="@throw \\(rethrow\\) used outside of a @catch block",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{Z,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  // ...\n  if (!Throw) {\n    // ...\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}},
		[l]={
			["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"}
		}
	},
	["err_return_block_has_expr"]={
		[f]="err_return_block_has_expr",
		[e]="void block should not return a value",
		[g]="void block should not return a value",
		[h]=k,
		[j]="void block should not return a value",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{Z,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  // Otherwise, verify that this result type matches the previous one.  We are\n  // pickier with blocks than for normal functions because we don\'t have GCC\n  // compatibility to worry about here.\n  if (FnRetType->isDependentType()) {\n  // ...\n  } else if (FnRetType->isVoidType()) {\n    if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n      if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n      // ...\n      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
	},
	["err_return_in_captured_stmt"]={
		[f]="err_return_in_captured_stmt",
		[e]="cannot return from %0",
		[g]="cannot return from A",
		[h]=k,
		[j]="cannot return from (.*?)",
		[b]=a,
		[c]=m,
		[i]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements\n\nAdd CapturedDecl to be the DeclContext for CapturedStmt, and perform semantic\nanalysis. Currently captures all variables by reference.\n\nTODO: templates\n\nAuthor: Ben Langmuir <ben.langmuir@intel.com>\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D433\n\nllvm-svn: 179618"},
		[d]={{Z,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
		[l]={
			["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"}
		}
	},
	["err_return_in_constructor_handler"]={
		[f]="err_return_in_constructor_handler",
		[e]="return in the catch of a function try block of a constructor is illegal",
		[g]="return in the catch of a function try block of a constructor is illegal",
		[h]=k,
		[j]="return in the catch of a function try block of a constructor is illegal",
		[b]=a,
		[c]=m,
		[i]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ...\n\nllvm-svn: 70256"},
		[d]={{z,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    // ...\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}},
		[l]={
			["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"}
		}
	},
	["err_return_in_coroutine"]={
		[f]="err_return_in_coroutine",
		[e]="return statement not allowed in coroutine; did you mean \'co_return\'?",
		[g]="return statement not allowed in coroutine; did you mean \'co_return\'?",
		[h]=k,
		[j]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
		[b]=a,
		[c]="Coroutines Issue",
		[i]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.\n\nllvm-svn: 250993"},
		[d]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // ...\n  // [stmt.return.coroutine]p1:\n  //   A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    // ...\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}},
		[l]={
			["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"}
		}
	},
	["err_return_init_list"]={
		[f]="err_return_init_list",
		[e]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
		[g]={{nil,nil,{{"void function","void method","constructor","destructor"}," A must not return a value"}}},
		[h]=k,
		[j]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
		[b]=a,
		[c]=m,
		[i]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers.\n\nllvm-svn: 151155"},
		[d]={{Z,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        // ...\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"}
		}
	},
	["err_return_value_with_address_space"]={
		[f]={{nil,M,"err_return_value_with_address_space"}},
		[e]={{nil,M,"return type cannot be qualified with address space"}},
		[g]={{nil,M,"return type cannot be qualified with address space"}},
		[h]=k,
		[j]="return type cannot be qualified with address space",
		[b]=a,
		[c]={{nil,M,m}},
		[i]={lb,1625925174,kb,jb},
		[d]={{t,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{t,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().HLSL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{"clang/lib/Sema/SemaLambda.cpp",876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  // ...\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  // ...\n  } else {\n    // ...\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      // ...\n      if (!RetTy.isNull()) {\n        // ...\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}},
		[l]={
			["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"}
		}
	},
	["err_right_angle_bracket_equal_needs_space"]={
		[f]="err_right_angle_bracket_equal_needs_space",
		[e]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
		[g]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
		[h]=k,
		[j]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
		[b]=a,
		[c]=s,
		[i]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to\nalso deal with \'>>>\' (in CUDA), \'>=\', and \'>>=\'. Fix the FixItHints logic to\ndeal with cases where the token is followed by an adjacent \'=\', \'==\', \'>=\',\n\'>>=\', or \'>>>\' token, where a naive fix-it would result in a differing token\nstream on a re-lex.\n\nllvm-svn: 158652"},
		[d]={{"clang/lib/Parse/ParseTemplate.cpp",1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    // ...\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}},
		[l]={
			["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"}
		}
	},
	["err_riscv_builtin_invalid_lmul"]={
		[f]={{nil,N,"err_riscv_builtin_invalid_lmul"}},
		[e]={{nil,N,"LMUL argument must be in the range [0,3] or [5,7]"}},
		[g]={{nil,N,"LMUL argument must be in the range [0,3] or [5,7]"}},
		[h]=k,
		[j]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
		[b]=a,
		[c]={{nil,N,I}},
		[i]={"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]={{H,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}},
		[l]={
			["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"}
		}
	},
	["err_riscv_builtin_requires_extension"]={
		[f]={{nil,N,"err_riscv_builtin_requires_extension"}},
		[e]={{nil,M,"builtin requires%select{| at least one of the following extensions to be enabled}0: %1"},{r,B,"builtin requires at least one of the following extensions support to be enabled : %0"},{N,N,"builtin requires \'%0\' extension support to be enabled"}},
		[g]={{nil,M,{"builtin requires",{a," at least one of the following extensions to be enabled"},": B"}},{r,B,"builtin requires at least one of the following extensions support to be enabled : A"},{N,N,"builtin requires \'A\' extension support to be enabled"}},
		[h]=k,
		[j]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
		[b]=a,
		[c]={{nil,N,I}},
		[i]={Qb,1590001902,Pb,Ob},
		[d]={{H,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    // ...\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      // ...\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{H,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    // ...\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}},
		[l]={
			["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"}
		}
	},
	["err_riscv_type_requires_extension"]={
		[f]="err_riscv_type_requires_extension",
		[e]="RISC-V type %0 requires the \'%1\' extension",
		[g]="RISC-V type A requires the \'B\' extension",
		[h]=k,
		[j]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
		[b]=a,
		[c]=I,
		[i]={lb,1625925174,kb,jb},
		[d]={{H,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n  // least zve64x\n  if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{H,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{H,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{H,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{H,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // Given that caller already checked isRVVType() before calling this function,\n  // if we don\'t have at least zve32x supported, then we need to emit error.\n  if (!TI.hasFeature(\"zve32x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}},
		[l]={
			["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"}
		}
	},
	["err_root_class_cannot_use_super"]={
		[f]="err_root_class_cannot_use_super",
		[e]="%0 cannot use \'super\' because it is a root class",
		[g]="A cannot use \'super\' because it is a root class",
		[h]=k,
		[j]="(.*?) cannot use \'super\' because it is a root class",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{sb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  if (!IFace) {\n    // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n    // property reference.\n    if (receiverNamePtr->isStr(\"super\")) {\n      if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n        if (auto classDecl = CurMethod->getClassInterface()) {\n          // ...\n          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              // ...\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{sb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (SuperTy.isNull()) {\n    // ...\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}},
		[l]={
			["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"}
		}
	},
	["err_roptr_cannot_build_shared"]={
		[f]="err_roptr_cannot_build_shared",
		[e]="-mxcoff-roptr is not supported with -shared",
		[g]="-mxcoff-roptr is not supported with -shared",
		[h]=k,
		[j]="\\-mxcoff\\-roptr is not supported with \\-shared",
		[b]=a,
		[c]=I,
		[i]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
		[d]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n    if (Args.hasArg(options::OPT_shared))\n      D.Diag(diag::err_roptr_cannot_build_shared);"}}
	},
	["err_roptr_requires_data_sections"]={
		[f]="err_roptr_requires_data_sections",
		[e]="-mxcoff-roptr is supported only with -fdata-sections",
		[g]="-mxcoff-roptr is supported only with -fdata-sections",
		[h]=k,
		[j]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
		[b]=a,
		[c]=I,
		[i]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
		[d]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n    // ...\n    if (HasRoptr) {\n      // The data sections option is on by default on AIX. We only need to error\n      // out when -fno-data-sections is specified explicitly to turn off data\n      // sections.\n      if (DataSectionsTurnedOff)\n        D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n    // ...\n    // Since the storage mapping class is specified per csect,\n    // without using data sections, it is less effective to use read-only\n    // pointers. Using read-only pointers may cause other RO variables in the\n    // same csect to become RW when the linker acts upon `-bforceimprw`;\n    // therefore, we require that separate data sections\n    // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n    // data-sections since we have not found reasons to do otherwise that\n    // overcome the user surprise of not respecting the setting.\n    if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n      Diags.Report(diag::err_roptr_requires_data_sections);"}}
	},
	["err_rotation_argument_to_cadd"]={
		[f]={{nil,o,"err_rotation_argument_to_cadd"}},
		[e]={{nil,o,"argument should be the value 90 or 270"}},
		[g]={{nil,o,"argument should be the value 90 or 270"}},
		[h]=k,
		[j]="argument should be the value 90 or 270",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{H,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}},
		[l]={
			["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"}
		}
	},
	["err_rotation_argument_to_cmla"]={
		[f]={{nil,o,"err_rotation_argument_to_cmla"}},
		[e]={{nil,o,"argument should be the value 0, 90, 180 or 270"}},
		[g]={{nil,o,"argument should be the value 0, 90, 180 or 270"}},
		[h]=k,
		[j]="argument should be the value 0, 90, 180 or 270",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{H,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRotAll90:\n      if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}},
		[l]={
			["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"}
		}
	},
	["err_rref_in_exception_spec"]={
		[f]="err_rref_in_exception_spec",
		[e]="rvalue reference type %0 is not allowed in exception specification",
		[g]="rvalue reference type A is not allowed in exception specification",
		[h]=k,
		[j]="rvalue reference type (.*?) is not allowed in exception specification",
		[b]=a,
		[c]=m,
		[i]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.\n\nllvm-svn: 168824"},
		[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// 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  if (const PointerType *PT = T->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n    // ...\n    if (RT->isRValueReferenceType()) {\n      // ...\n      Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}},
		[l]={
			["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"}
		}
	},
	["err_sampler_argument_required"]={
		[f]="err_sampler_argument_required",
		[e]="sampler_t variable required - got %0",
		[g]="sampler_t variable required - got A",
		[h]=k,
		[j]="sampler_t variable required \\- got (.*?)",
		[b]=a,
		[c]=m,
		[i]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions.\n\nllvm-svn: 174601"},
		[d]={{T,9310,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n      // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n        if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
	},
	["err_sampler_initializer_not_integer"]={
		[f]="err_sampler_initializer_not_integer",
		[e]="sampler_t initialization requires 32-bit integer, not %0",
		[g]="sampler_t initialization requires 32-bit integer, not A",
		[h]=k,
		[j]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
		[b]=a,
		[c]=m,
		[i]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer\n\nCurrently Clang use int32 to represent sampler_t, which have been a source of issue for some backends, because in some backends sampler_t cannot be represented by int32. They have to depend on kernel argument metadata and use IPA to find the sampler arguments and global variables and transform them to target specific sampler type.\n\nThis patch uses opaque pointer type opencl.sampler_t* for sampler_t. For each use of file-scope sampler variable, it generates a function call of __translate_sampler_initializer. For each initialization of function-scope sampler variable, it generates a function call of __translate_sampler_initializer.\n\nEach builtin library can implement its own __translate_sampler_initializer(). Since the real sampler type tends to be architecture dependent, allowing it to be initialized by a library function simplifies backend design. A typical implementation of __translate_sampler_initializer could be a table lookup of real sampler literal values. Since its argument is always a literal, the returned pointer is known at compile time and easily optimized to finally become some literal values directly put into image read instructions.\n\nThis patch is partially based on Alexey Sotkin\'s work in Khronos Clang (https://github.com/KhronosGroup/SPIR/commit/3d4eec61623502fc306e8c67c9868be2b136e42b).\n\nDifferential Revision: https://reviews.llvm.org/D21567\n\nllvm-svn: 277024"},
		[d]={{T,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n      // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n      // ...\n      } else {\n        // ...\n        if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n          S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}},
		[l]={
			["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"}
		}
	},
	["err_scoped_enum_missing_identifier"]={
		[f]="err_scoped_enum_missing_identifier",
		[e]="scoped enumeration requires a name",
		[g]="scoped enumeration requires a name",
		[h]=k,
		[j]="scoped enumeration requires a name",
		[b]=a,
		[c]=s,
		[i]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a","Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a\nbit by me). \n\nllvm-svn: 116122"},
		[d]={{vb,4873,"/// 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  if (!Name && ScopedEnumKWLoc.isValid()) {\n    // ...\n    Diag(Tok, diag::err_scoped_enum_missing_identifier);"}},
		[l]={
			["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"}
		}
	},
	["err_second_argument_to_cwsc_not_pointer"]={
		[f]="err_second_argument_to_cwsc_not_pointer",
		[e]="second argument to __builtin_call_with_static_chain must be of pointer type",
		[g]="second argument to __builtin_call_with_static_chain must be of pointer type",
		[h]=k,
		[j]="second argument to __builtin_call_with_static_chain must be of pointer type",
		[b]=a,
		[c]=m,
		[i]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension.","Implement the __builtin_call_with_static_chain GNU extension.\n\nThe extension has the following syntax:\n\n  __builtin_call_with_static_chain(Call, Chain)\n  where Call must be a function call expression and Chain must be of pointer type\n\nThis extension performs a function call Call with a static chain pointer\nChain passed to the callee in a designated register. This is useful for\ncalling foreign language functions whose ABI uses static chain pointers\n(e.g. to implement closures).\n\nDifferential Revision: http://reviews.llvm.org/D6332\n\nllvm-svn: 224167"},
		[d]={{H,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n  // ...\n  if (!ChainResult.get()->getType()->isPointerType()) {\n    S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}},
		[l]={
			["clang/test/Sema/call-with-static-chain.c"]={"clang/test/Sema/call-with-static-chain.c:10:3: error: second argument to __builtin_call_with_static_chain must be of pointer type"}
		}
	},
	["err_second_parameter_to_va_arg_abstract"]={
		[f]="err_second_parameter_to_va_arg_abstract",
		[e]="second argument to \'va_arg\' is of abstract type %0",
		[g]="second argument to \'va_arg\' is of abstract type A",
		[h]=k,
		[j]="second argument to \'va_arg\' is of abstract type (.*?)",
		[b]=a,
		[c]=m,
		[i]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg\n\n- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there\n- Incomplete and abstract types are considered hard errors\n\nllvm-svn: 132979"},
		[d]={{x,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n  if (!TInfo->getType()->isDependentType()) {\n    // ...\n    if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}},
		[l]={
			["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"}
		}
	},
	["err_second_parameter_to_va_arg_incomplete"]={
		[f]="err_second_parameter_to_va_arg_incomplete",
		[e]="second argument to \'va_arg\' is of incomplete type %0",
		[g]="second argument to \'va_arg\' is of incomplete type A",
		[h]=k,
		[j]="second argument to \'va_arg\' is of incomplete type (.*?)",
		[b]=a,
		[c]=m,
		[i]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg\n\n- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there\n- Incomplete and abstract types are considered hard errors\n\nllvm-svn: 132979"},
		[d]={{x,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n  if (!TInfo->getType()->isDependentType()) {\n    if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}},
		[l]={
			["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"}
		}
	},
	["err_section_conflict"]={
		[f]="err_section_conflict",
		[e]="%0 causes a section type conflict with %1",
		[g]="A causes a section type conflict with B",
		[h]=k,
		[j]="(.*?) causes a section type conflict with (.*?)",
		[b]=a,
		[c]=m,
		[i]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas","[MS-ABI] Add support for #pragma section and related pragmas\nThis patch adds support for the msvc pragmas section, bss_seg, code_seg, \nconst_seg and data_seg as well as support for __declspec(allocate()).\n\nAdditionally it corrects semantics and adds diagnostics for \n__attribute__((section())) and the interaction between the attribute \nand the msvc pragmas and declspec.  In general conflicts should now be \nwell diganosed within and among these features.\n\nIn supporting the pragmas new machinery for uniform lexing for \nmsvc pragmas was introduced.  The new machinery always lexes the \nentire pragma and stores it on an annotation token.  The parser \nis responsible for parsing the pragma when the handling the \nannotation token.\n\nThere is a known outstanding bug in this implementation in C mode.  \nBecause these attributes and pragmas apply _only_ to definitions, we \nprocess them at the time we detect a definition.  Due to tentative \ndefinitions in C, we end up processing the definition late.  This means \nthat in C mode, everything that ends up in a BSS section will end up in \nthe _last_ BSS section rather than the one that was live at the time of \ntentative definition, even if that turns out to be the point of actual \ndefinition.  This issue is not known to impact anything as of yet \nbecause we are not aware of a clear use or use case for #pragma bss_seg \nbut should be fixed at some point.\n\nDifferential Revision=http://reviews.llvm.org/D3065#inline-16241 \n\nllvm-svn: 205810"},
		[d]={{C,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  // ...\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{C,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  // ...\n  if (SectionIt != Context.SectionInfos.end()) {\n    // ...\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}},
		[l]={
			["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"}
		}
	},
	["err_seh___except_block"]={
		[f]="err_seh___except_block",
		[e]="%0 only allowed in __except block or filter expression",
		[g]="A only allowed in __except block or filter expression",
		[h]=k,
		[j]="(.*?) only allowed in __except block or filter expression",
		[b]=a,
		[c]=I,
		[i]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
		[d]={{fb,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{fb,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{fb,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{H,2470,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__exception_code:\n  case Builtin::BI_exception_code:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}},
		[l]={
			["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"}
		}
	},
	["err_seh___except_filter"]={
		[f]="err_seh___except_filter",
		[e]="%0 only allowed in __except filter expression",
		[g]="A only allowed in __except filter expression",
		[h]=k,
		[j]="(.*?) only allowed in __except filter expression",
		[b]=a,
		[c]=I,
		[i]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
		[d]={{fb,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{fb,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{fb,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{H,2476,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__exception_info:\n  case Builtin::BI_exception_info:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}},
		[l]={
			["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"}
		}
	},
	["err_seh___finally_block"]={
		[f]="err_seh___finally_block",
		[e]="%0 only allowed in __finally block",
		[g]="A only allowed in __finally block",
		[h]=k,
		[j]="(.*?) only allowed in __finally block",
		[b]=a,
		[c]=I,
		[i]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
		[d]={{fb,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{fb,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{fb,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}},
		[l]={
			["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"}
		}
	},
	["err_seh_expected_handler"]={
		[f]="err_seh_expected_handler",
		[e]="expected \'__except\' or \'__finally\' block",
		[g]="expected \'__except\' or \'__finally\' block",
		[h]=k,
		[j]="expected \'__except\' or \'__finally\' block",
		[b]=a,
		[c]=I,
		[i]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
		[d]={{wb,602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n///   \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n///   seh-except-block\n///   seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n  // ...\n  if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n  // ...\n  } else if (Tok.is(tok::kw___finally)) {\n  // ...\n  } else {\n    return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}},
		[l]={
			["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"}
		}
	},
	["err_seh_in_a_coroutine_with_cxx_exceptions"]={
		[f]={{nil,n,"err_seh_in_a_coroutine_with_cxx_exceptions"}},
		[e]={{nil,n,"cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}},
		[g]={{nil,n,"cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}},
		[h]=k,
		[j]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled",
		[b]=a,
		[c]={{nil,n,"Coroutines Issue"}},
		[i]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch","[coroutines] Wrap the body of the coroutine in try-catch\n\nSummary:\nIf unhandled_exception member function is present in the coroutine promise,\nwrap the body of the coroutine in:\n\n```\ntry {\n  body\n} catch(...) { promise.unhandled_exception(); }\n```\n\nReviewers: EricWF, rnk, rsmith\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31692\n\nllvm-svn: 303583"},
		[d]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n  // ...\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}},
		[l]={
			["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:34:3: error: cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}
		}
	},
	["err_seh_try_outside_functions"]={
		[f]="err_seh_try_outside_functions",
		[e]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
		[g]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
		[h]=k,
		[j]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls",
		[b]=a,
		[c]=m,
		[i]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality","SEH: Track users of __try so we can pick a per-func EH personality\n\nThere are four major kinds of declarations that cause code generation:\n- FunctionDecl (includes CXXMethodDecl etc)\n- ObjCMethodDecl\n- BlockDecl\n- CapturedDecl\n\nThis patch tracks __try usage on FunctionDecls and diagnoses __try usage\nin other decls. If someone wants to use __try from ObjC, they can use it\nfrom a free function, since the ObjC code will need an ObjC-style EH\npersonality.\n\nEventually we will want to look through CapturedDecls and track SEH\nusage on the parent FunctionDecl, if present.\n\nllvm-svn: 228058"},
		[d]={{Z,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\n  if (FD)\n  // ...\n  else\n    Diag(TryLoc, diag::err_seh_try_outside_functions);"}},
		[l]={
			["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"}
		}
	},
	["err_seh_try_unsupported"]={
		[f]="err_seh_try_unsupported",
		[e]="SEH \'__try\' is not supported on this target",
		[g]="SEH \'__try\' is not supported on this target",
		[h]=k,
		[j]="SEH \'__try\' is not supported on this target",
		[b]=a,
		[c]=m,
		[i]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try","[SEH] Add 32-bit lowering code for __try\n\nThis is just the clang-side of 32-bit SEH. LLVM still needs work, and it\nwill determinstically fail to compile until it\'s feature complete.\n\nOn x86, all outlined handlers have no parameters, but they do implicitly\ntake the EBP value passed in and use it to address locals of the parent\nframe. We model this with llvm.frameaddress(1).\n\nThis works (mostly), but __finally block inlining can break it. For now,\nwe apply the \'noinline\' attribute. If we really want to inline __finally\nblocks on 32-bit x86, we should teach the inliner how to untangle\nframeescape and framerecover.\n\nPromote the error diagnostic from codegen to sema. It now rejects SEH on\nnon-Windows platforms. LLVM doesn\'t implement SEH on non-x86 Windows\nplatforms, but there\'s nothing preventing it.\n\nllvm-svn: 236052"},
		[d]={{Z,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\n  // Reject __try on unsupported targets.\n  if (!Context.getTargetInfo().isSEHTrySupported())\n    Diag(TryLoc, diag::err_seh_try_unsupported);"}}
	},
	["err_selected_explicit_constructor"]={
		[f]="err_selected_explicit_constructor",
		[e]="chosen constructor is explicit in copy-initialization",
		[g]="chosen constructor is explicit in copy-initialization",
		[h]=k,
		[j]="chosen constructor is explicit in copy\\-initialization",
		[b]=a,
		[c]=m,
		[i]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120.","Properly handle explicit constructors in list-initialization. Fixes PR12120.\n\nllvm-svn: 153849"},
		[d]={{T,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ExplicitConstructor: {\n    S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"}
		}
	},
	["err_selector_element_const_type"]={
		[f]="err_selector_element_const_type",
		[e]={{nil,u,"selector element of type %0 cannot be a constant lvalue expression"},{ob,nil,"selector element of type %0 cannot be a constant l-value expression"}},
		[g]={{nil,u,"selector element of type A cannot be a constant lvalue expression"},{ob,nil,"selector element of type A cannot be a constant l-value expression"}},
		[h]=k,
		[j]="selector element of type (.*?) cannot be a constant lvalue expression",
		[b]=a,
		[c]=m,
		[i]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in","ObjectiveC. ObjectiveC\'s collection selector expression in\nthe fereach loop must be a non-const lvalue expression as\nit will be assigned to at the beginning of the loop.\n// rdar://15123684\n\nllvm-svn: 192399"},
		[d]={{Z,2345,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    // ...\n    } else {\n      // ...\n      if (FirstType.isConstQualified())\n        Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}},
		[l]={
			["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"}
		}
	},
	["err_selector_element_not_lvalue"]={
		[f]="err_selector_element_not_lvalue",
		[e]="selector element is not a valid lvalue",
		[g]="selector element is not a valid lvalue",
		[h]=k,
		[j]="selector element is not a valid lvalue",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{Z,2340,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n    if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n    // ...\n    } else {\n      // ...\n      if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n        return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}},
		[l]={
			["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"}
		}
	},
	["err_selector_element_type"]={
		[f]="err_selector_element_type",
		[e]="selector element type %0 is not a valid object",
		[g]="selector element type A is not a valid object",
		[h]=k,
		[j]="selector element type (.*?) is not a valid object",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{Z,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n    if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n      return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}},
		[l]={
			["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"}
		}
	},
	["err_setter_type_void"]={
		[f]="err_setter_type_void",
		[e]="type of setter must be void",
		[g]="type of setter must be void",
		[h]=k,
		[j]="type of setter must be void",
		[b]=a,
		[c]=m,
		[i]={L,1236199783,K,J},
		[d]={{bb,2446,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  if (!property->isReadOnly() && SetterMethod) {\n    if (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n      Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}}
	},
	["err_setting_eval_method_used_in_unsafe_context"]={
		[f]={{nil,r,"err_setting_eval_method_used_in_unsafe_context"}},
		[e]={{nil,r,"%select{\'#pragma clang fp eval_method\'|option \'ffp-eval-method\'}0 cannot be used with %select{option \'fapprox-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp-eval-method\'|\'#pragma clang fp reassociate\'}1"}},
		[g]={{nil,r,{{"\'#pragma clang fp eval_method\'","option \'ffp-eval-method\'"}," cannot be used with ",{"option \'fapprox-func\'","option \'mreassociate\'","option \'freciprocal\'","option \'ffp-eval-method\'","\'#pragma clang fp reassociate\'"}}}},
		[h]=k,
		[j]="(?:\'\\#pragma clang fp eval_method\'|option \'ffp\\-eval\\-method\') cannot be used with (?:option \'fapprox\\-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp\\-eval\\-method\'|\'\\#pragma clang fp reassociate\')",
		[b]=a,
		[c]={{nil,r,m}},
		[i]={Kb,1620118562,Rb,Tb},
		[d]={{C,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  // ...\n  if (getLangOpts().ApproxFunc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{C,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  // ...\n  if (getLangOpts().AllowFPReassoc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{C,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  // ...\n  if (getLangOpts().AllowRecip)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{C,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n  if (IsEnabled) {\n    // ...\n    if (Reason != -1)\n      Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}}
	},
	["err_shared_var_init"]={
		[f]="err_shared_var_init",
		[e]="initialization is not supported for __shared__ variables.",
		[g]="initialization is not supported for __shared__ variables.",
		[h]=k,
		[j]="initialization is not supported for __shared__ variables\\.",
		[b]=a,
		[c]=m,
		[i]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables.","[CUDA] Do not allow dynamic initialization of global device side variables.\n\nIn general CUDA does not allow dynamic initialization of\nglobal device-side variables. One exception is that CUDA allows\nrecords with empty constructors as described in section E2.2.1 of\nCUDA 7.5 Programming guide.\n\nThis patch applies initializer checks for all device-side variables.\nEmpty constructors are accepted, but no code is generated for them.\n\nDifferential Revision: http://reviews.llvm.org/D15305\n\nllvm-svn: 259592"},
		[d]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  // ...\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n    // ...\n    Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}},
		[l]={
			["clang/test/SemaCUDA/union-init.cu"]={"clang/test/SemaCUDA/union-init.cu:40:16: error: initialization is not supported for __shared__ variables.","clang/test/SemaCUDA/union-init.cu:42:16: error: initialization is not supported for __shared__ variables."}
		}
	},
	["err_shift_rhs_only_vector"]={
		[f]="err_shift_rhs_only_vector",
		[e]="requested shift is a vector of type %0 but the first operand is not a vector (%1)",
		[g]="requested shift is a vector of type A but the first operand is not a vector (B)",
		[h]=k,
		[j]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)",
		[b]=a,
		[c]=m,
		[i]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n  char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"},
		[d]={{x,12103,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n  if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n    S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
		[l]={
			["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:732:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:733:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:736:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:737:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:832:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:833:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:836:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:837:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')"}
		}
	},
	["err_shufflevector_argument_too_large"]={
		[f]="err_shufflevector_argument_too_large",
		[e]="index for __builtin_shufflevector must be less than the total number of vector elements",
		[g]="index for __builtin_shufflevector must be less than the total number of vector elements",
		[h]=k,
		[j]="index for __builtin_shufflevector must be less than the total number of vector elements",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{H,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  // ...\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    // ...\n    if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-clang.cpp"]={"clang/test/SemaTemplate/instantiate-clang.cpp:34:11: error: index for __builtin_shufflevector must be less than the total number of vector elements","clang/test/SemaTemplate/instantiate-clang.cpp:35:11: error: index for __builtin_shufflevector must be less than the total number of vector elements"}
		}
	},
	["err_shufflevector_nonconstant_argument"]={
		[f]="err_shufflevector_nonconstant_argument",
		[e]="index for __builtin_shufflevector must be a constant integer",
		[g]="index for __builtin_shufflevector must be a constant integer",
		[h]=k,
		[j]="index for __builtin_shufflevector must be a constant integer",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{H,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  // ...\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    // ...\n    if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->getSourceRange());"}}
	},
	["err_single_decl_assign_in_for_range"]={
		[f]="err_single_decl_assign_in_for_range",
		[e]="range-based \'for\' statement uses \':\', not \'=\'",
		[g]="range-based \'for\' statement uses \':\', not \'=\'",
		[h]=k,
		[j]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'",
		[b]=a,
		[c]=s,
		[i]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration","Suggest fix-it \':\' when \'=\' used in for-range-declaration\n\nFix for PR19176. Clang will suggest a fix-it hint for cases like:\n  int arr[] = {1, 2, 3, 4};\n  for (auto i = arr)\n              ^\n              :\n\nllvm-svn: 208299"},
		[d]={{vb,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    // ...\n    if (Tok.is(tok::kw_delete)) {\n    // ...\n    } else if (Tok.is(tok::kw_default)) {\n    // ...\n    } else {\n      // ...\n      // If this is the only decl in (possibly) range based for statement,\n      // our best guess is that the user meant \':\' instead of \'=\'.\n      if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n        Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}}
	},
	["err_size_t_literal_too_large"]={
		[f]={{nil,N,"err_size_t_literal_too_large"}},
		[e]={{nil,N,"%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values"}},
		[g]={{nil,N,{{"signed ",a},"\'size_t\' literal is out of range of possible ",{"signed ",a},"\'size_t\' values"}}},
		[h]=k,
		[j]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values",
		[b]=a,
		[c]={{nil,N,I}},
		[i]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals\n\nThis adds support for C++2b\'s z/uz suffixes for size_t literals (P0330)."},
		[d]={{x,4241,"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      // If we still couldn\'t decide a type, we either have \'size_t\' literal\n      // that is out of range, or a decimal literal that does not fit in a\n      // signed long long and has no U suffix.\n      if (Ty.isNull()) {\n        if (Literal.isSizeT)\n          Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}},
		[l]={
			["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"}
		}
	},
	["err_sizeless_in_exception_spec"]={
		[f]={{nil,o,"err_sizeless_in_exception_spec"}},
		[e]={{nil,o,"%select{|reference to }0sizeless type %1 is not allowed in exception specification"}},
		[g]={{nil,o,{{a,"reference to "},"sizeless type B is not allowed in exception specification"}}},
		[h]=k,
		[j]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// 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  // The MSVC compatibility mode doesn\'t extend to sizeless types,\n  // so diagnose them separately.\n  if (PointeeT->isSizelessType() && Kind != 1) {\n    Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}},
		[l]={
			["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:310:28: error: sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification","clang/test/SemaCXX/sizeless-1.cpp:312:38: error: reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification"}
		}
	},
	["err_sizeless_nonlocal"]={
		[f]={{nil,o,"err_sizeless_nonlocal"}},
		[e]={{nil,o,"non-local variable with sizeless type %0"}},
		[g]={{nil,o,"non-local variable with sizeless type A"}},
		[h]=k,
		[j]="non\\-local variable with sizeless type (.*?)",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{t,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n    Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}},
		[l]={
			["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:8:10: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:9:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:10:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:11:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:57:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
		}
	},
	["err_sizeof_alignof_function_type"]={
		[f]="err_sizeof_alignof_function_type",
		[e]={{nil,o,"invalid application of \'%0\' to a function type"},{p,w,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0\' to a function type"},{yb,nil,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0\' to a function type"}},
		[g]={{nil,o,"invalid application of \'A\' to a function type"},{p,w,{"invalid application of \'",{Fb,Nb,"vec_step","__builtin_omp_required_simd_align","__alignof"},"\' to a function type"}},{yb,nil,{"invalid application of \'",{Fb,Nb,"vec_step","__builtin_omp_required_simd_align"},"\' to a function type"}}},
		[h]=k,
		[j]="invalid application of \'(.*?)\' to a function type",
		[b]=a,
		[c]=m,
		[i]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++.","sizeof(void) etc. should be a hard error in C++.\n\nPR16872.\n\nllvm-svn: 188324"},
		[d]={{x,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  if (ExprTy->isFunctionType()) {\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{x,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///   Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///   The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///   standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  // ...\n  if (ExprType->isFunctionType()) {\n    Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}},
		[l]={
			["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"}
		}
	},
	["err_sizeof_alignof_incomplete_or_sizeless_type"]={
		[f]={{nil,o,"err_sizeof_alignof_incomplete_or_sizeless_type"}},
		[e]={{nil,o,"invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2"}},
		[g]={{nil,o,{"invalid application of \'A\' to ",{"an incomplete","sizeless"}," type C"}}},
		[h]=k,
		[j]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{x,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n    if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{x,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  // \'alignof\' applied to an expression only requires the base element type of\n  // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n  // bound).\n  if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  // ...\n  } else {\n    if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{x,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///   Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///   The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///   standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  // ...\n  if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"}
		}
	},
	["err_sizeof_alignof_typeof_bitfield"]={
		[f]="err_sizeof_alignof_typeof_bitfield",
		[e]={{nil,M,"invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field"},{r,nil,"invalid application of \'%select{sizeof|alignof|typeof}0\' to bit-field"}},
		[g]={{nil,M,{"invalid application of \'",{Fb,Nb,"typeof","typeof_unqual"},"\' to bit-field"}},{r,nil,{"invalid application of \'",{Fb,Nb,"typeof"},"\' to bit-field"}}},
		[h]=k,
		[j]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field",
		[b]=a,
		[c]=m,
		[i]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gcc/Typeof.html\n\nDifferences from the GCC extension:\n * __auto_type is also permitted in C++ (but only in places where\n   it could appear in C), allowing its use in headers that might\n   be shared across C and C++, or used from C++98\n * __auto_type can be combined with a declarator, as with C++ auto\n   (for instance, \"__auto_type *p\")\n * multiple variables can be declared in a single __auto_type\n   declaration, with the C++ semantics (the deduced type must be\n   the same in each case)\n\nThis patch also adds a missing restriction on applying typeof to\na bit-field, which GCC has historically rejected in C (due to\nlack of clarity as to whether the operand should be promoted).\nThe same restriction also applies to __auto_type in C (in both\nGCC and Clang).\n\nThis also fixes PR25449.\n\nPatch by Nicholas Allegra!\n\nllvm-svn: 252690"},
		[d]={{x,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  if (E->getObjectKind() == OK_BitField) {\n    S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{x,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  if (E->isTypeDependent()) {\n  // ...\n  } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  // ...\n  } else if (ExprKind == UETT_VecStep) {\n  // ...\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n  // ...\n  } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{"clang/lib/Sema/SemaType.cpp",9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n  // ...\n  if (!getLangOpts().CPlusPlus && E->refersToBitField())\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}},
		[l]={
			["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"}
		}
	},
	["err_sizeof_nonfragile_interface"]={
		[f]="err_sizeof_nonfragile_interface",
		[e]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform",
		[g]={{nil,nil,{"application of \'",{Nb,Fb},"\' to interface A is not supported on this architecture and platform"}}},
		[h]=k,
		[j]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform",
		[b]=a,
		[c]=m,
		[i]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when","reject sizeof(itf) when itf is a forward declared interface, or when\nin non-fragile abi mode.  rdar://6811884\n\nllvm-svn: 69701"},
		[d]={{x,4348,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // Reject sizeof(interface) and sizeof(interface<proto>) if the\n  // runtime doesn\'t allow it.\n  if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n    S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}},
		[l]={
			["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:26:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:35:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:67:40: error: application of \'sizeof\' to interface \'I\' is not supported on this architecture and platform"}
		}
	},
	["err_sizeof_pack_no_pack_name"]={
		[f]="err_sizeof_pack_no_pack_name",
		[e]="%0 does not refer to the name of a parameter pack",
		[g]="A does not refer to the name of a parameter pack",
		[h]=k,
		[j]="(.*?) does not refer to the name of a parameter pack",
		[b]=a,
		[c]=m,
		[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
		[d]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///   static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!ParameterPack || !ParameterPack->isParameterPack()) {\n    Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}},
		[l]={
			["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:30:43: error: \'Value\' does not refer to the name of a parameter pack"}
		}
	},
	["err_sizeof_pack_no_pack_name_suggest"]={
		[f]="err_sizeof_pack_no_pack_name_suggest",
		[e]="%0 does not refer to the name of a parameter pack; did you mean %1?",
		[g]="A does not refer to the name of a parameter pack; did you mean B?",
		[h]=k,
		[j]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?",
		[b]=a,
		[c]=m,
		[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
		[d]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///   static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n  // ...\n  case LookupResult::NotFound:\n  case LookupResult::NotFoundInCurrentInstantiation: {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}},
		[l]={
			["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:43: error: \'Type\' does not refer to the name of a parameter pack; did you mean \'Types\'?"}
		}
	},
	["err_sizeof_parameter_pack"]={
		[f]="err_sizeof_parameter_pack",
		[e]="expected parenthesized parameter pack name in \'sizeof...\' expression",
		[g]="expected parenthesized parameter pack name in \'sizeof...\' expression",
		[h]=k,
		[j]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression",
		[b]=a,
		[c]=s,
		[i]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
		[d]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///       unary-expression:  [C99 6.5.3]\n///         \'sizeof\' unary-expression\n///         \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]   \'__alignof\' unary-expression\n/// [GNU]   \'__alignof\' \'(\' type-name \')\'\n/// [C11]   \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    // ...\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::identifier)) {\n    // ...\n    } else {\n      Diag(Tok, diag::err_sizeof_parameter_pack);"}}
	},
	["err_sls_hardening_arm_not_supported"]={
		[f]={{nil,u,"err_sls_hardening_arm_not_supported"}},
		[e]={{nil,u,"-mharden-sls is only supported on armv7-a or later"}},
		[g]={{nil,u,"-mharden-sls is only supported on armv7-a or later"}},
		[h]=k,
		[j]="\\-mharden\\-sls is only supported on armv7\\-a or later",
		[b]=a,
		[c]={{nil,u,I}},
		[i]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
		[d]={{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Enable/disable straight line speculation hardening.\n  if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n    // ...\n    if (EnableRetBr || EnableBlr)\n      if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n        D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}}
	},
	["err_spaceship_argument_narrowing"]={
		[f]={{nil,S,"err_spaceship_argument_narrowing"}},
		[e]={{nil,S,"argument to \'operator<=>\' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0"}},
		[g]={{nil,S,{"argument to \'operator<=>\' ",{"cannot be narrowed from type B to C","evaluates to B, which cannot be narrowed to type C"}}}},
		[h]=k,
		[j]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
		[b]=a,
		[c]={{nil,S,I}},
		[i]={"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]={{x,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  // ...\n  case NK_Constant_Narrowing:\n    // ...\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{x,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  // ...\n  case NK_Type_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}},
		[l]={
			["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"}
		}
	},
	["err_spec_member_not_instantiated"]={
		[f]="err_spec_member_not_instantiated",
		[e]="specialization of member %q0 does not specialize an instantiated member",
		[g]="specialization of member A does not specialize an instantiated member",
		[h]=k,
		[j]="specialization of member (.*?) does not specialize an instantiated member",
		[b]=a,
		[c]=m,
		[i]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep","For instantiations of static data members of class templates, keep\ntrack of the kind of specialization or instantiation. Also, check the\nscope of the specialization and ensure that a specialization\ndeclaration without an initializer is not a definition.\n\nllvm-svn: 83533"},
		[d]={{W,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // ...\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}},
		[l]={
			["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"}
		}
	},
	["err_specialization_after_instantiation"]={
		[f]="err_specialization_after_instantiation",
		[e]="explicit specialization of %0 after instantiation",
		[g]="explicit specialization of A after instantiation",
		[h]=k,
		[j]="explicit specialization of (.*?) after instantiation",
		[b]=a,
		[c]=m,
		[i]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit","Diagnose the declaration of explicit specializations after an implicit\ninstantiation has already been required. To do so, keep track of the\npoint of instantiation for anything that can be instantiated.\n\nllvm-svn: 83890"},
		[d]={{W,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // C++ [temp.expl.spec]p6:\n  //   If a template, a member template or the member of a class template is\n  //   explicitly specialized then that specialization shall be declared\n  //   before the first use of that specialization that would cause an implicit\n  //   instantiation to take place, in every translation unit in which such a\n  //   use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    // ...\n    if (!Okay) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{W,8879,"DeclResult Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, CXXScopeSpec &SS, TemplateIdAnnotation &TemplateId, const ParsedAttributesView &Attr, MultiTemplateParamsArg TemplateParameterLists, SkipBodyInfo *SkipBody) {\n  // ...\n  // C++ [temp.expl.spec]p6:\n  //   If a template, a member template or the member of a class template is\n  //   explicitly specialized then that specialization shall be declared\n  //   before the first use of that specialization that would cause an implicit\n  //   instantiation to take place, in every translation unit in which such a\n  //   use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    // ...\n    if (!Okay) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{W,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  // ...\n  case TSK_ExplicitSpecialization:\n    // ...\n    case TSK_ExplicitInstantiationDeclaration:\n    case TSK_ExplicitInstantiationDefinition:\n      // ...\n      Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}},
		[l]={
			["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"}
		}
	},
	["err_specialization_not_primary_template"]={
		[f]={{nil,n,"err_specialization_not_primary_template"}},
		[e]={{nil,n,"cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization"}},
		[g]={{nil,n,{"cannot reference member of primary template because deduced class template specialization A is ",{"instantiated from a partial","an explicit"}," specialization"}}},
		[h]=k,
		[j]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization",
		[b]=a,
		[c]={{nil,n,m}},
		[i]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple.","Fix a couple of class template argument deduction crashes with libc++\'s tuple.\n\nRecursiveASTVisitor was not properly recursing through a\nSubstTemplateTypeParmTypes, resulting in crashes in pack expansion where we\ncouldn\'t always find an unexpanded pack within a pack expansion.\n\nWe also have an issue where substitution of deduced template arguments for an\nimplicit deduction guide creates the \"impossible\" case of naming a\nnon-dependent member of the current instantiation, but within a specialization\nthat is actually instantiated from a different (partial/explicit)\nspecialization of the template. We resolve this by declaring that constructors\nthat do so can only be used to deduce specializations of the primary template.\nI\'m running this past CWG to see if people agree this is the right thing to do.\n\nllvm-svn: 304862"},
		[d]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// 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 (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n    // ...\n    while (!DC->isFileContext()) {\n      // ...\n      // Move to the outer template scope.\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n        // ...\n        if (Guide && Guide->isImplicit()) {\n          // ...\n          // Check that this template-id names the primary template and not a\n          // partial or explicit specialization. (In the latter cases, it\'s\n          // meaningless to attempt to find an instantiation of D within the\n          // specialization.)\n          // FIXME: The standard doesn\'t say what should happen here.\n          if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n            Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
	},
	["err_specialize_member_of_template"]={
		[f]="err_specialize_member_of_template",
		[e]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
		[g]={{nil,nil,{"cannot specialize ",{a,"(with \'template<>\') "},"a member of an unspecialized template"}}},
		[h]=k,
		[j]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
		[b]=a,
		[c]=m,
		[i]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits","Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits\nspecializing a member of an unspecialized template, and recover from\nsuch errors without crashing. Fixes PR10024 / <rdar://problem/9509761>.\n\nllvm-svn: 132677"},
		[d]={{W,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // ...\n  auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n    if (SawNonEmptyTemplateParameterList) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}},
		[l]={
			["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"}
		}
	},
	["err_stack_tagging_requires_hardware_feature"]={
		[f]={{nil,p,"err_stack_tagging_requires_hardware_feature"}},
		[e]={{nil,r,"\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag"},{B,p,"\'-fsanitize=memtag\' requires hardware support (+memtag)"}},
		[g]={{nil,r,"\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag"},{B,p,"\'-fsanitize=memtag\' requires hardware support (+memtag)"}},
		[h]=k,
		[j]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag",
		[b]=a,
		[c]={{nil,p,I}},
		[i]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity)."},
		[d]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  // ...\n  if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n    TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}}
	},
	["err_standalone_class_nested_name_specifier"]={
		[f]="err_standalone_class_nested_name_specifier",
		[e]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
		[g]={{nil,nil,{"forward declaration of ",{"class",Eb,"interface",Db,"enum","enum class","enum struct"}," cannot have a nested name specifier"}},{M,nil,{"forward declaration of ",{"class",Eb,"interface",Db,"enum"}," cannot have a nested name specifier"}}},
		[h]=k,
		[j]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
		[b]=a,
		[c]=m,
		[i]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations.\n\nllvm-svn: 177335"},
		[d]={{t,5157,"/// 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 (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n    // ...\n    Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:11:8: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:13:29: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:23:29: error: forward declaration of struct cannot have a nested name specifier"}
		}
	},
	["err_static_assert_expression_is_not_constant"]={
		[f]="err_static_assert_expression_is_not_constant",
		[e]={{nil,r,"static assertion expression is not an integral constant expression"},{B,nil,"static_assert expression is not an integral constant expression"}},
		[g]={{nil,r,"static assertion expression is not an integral constant expression"},{B,nil,"static_assert expression is not an integral constant expression"}},
		[h]=k,
		[j]="static assertion expression is not an integral constant expression",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{z,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    // ...\n    if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}},
		[l]={
			["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"}
		}
	},
	["err_static_assert_failed"]={
		[f]="err_static_assert_failed",
		[e]={{nil,r,"static assertion failed%select{: %1|}0"},{B,nil,"static_assert failed%select{ %1|}0"}},
		[g]={{nil,r,{"static assertion failed",{": B",a}}},{B,nil,{"static_assert failed",{hb,a}}}},
		[h]=k,
		[j]="static assertion failed(?:\\: (.*?)|)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{z,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    // ...\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      // ...\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n        // ...\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{z,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    // ...\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      // ...\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      // ...\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n      // ...\n      } else {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "}
		}
	},
	["err_static_assert_invalid_mem_fn_ret_ty"]={
		[f]="err_static_assert_invalid_mem_fn_ret_ty",
		[e]="the message in a static assertion must have a \'%select{size|data}0()\' member function returning an object convertible to \'%select{std::size_t|const char *}0\'",
		[g]={{nil,nil,{"the message in a static assertion must have a \'",{"size","data"},"()\' member function returning an object convertible to \'",{"std::size_t","const char *"},"\'"}}},
		[h]=k,
		[j]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'",
		[b]=a,
		[c]=m,
		[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
		[d]={{z,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n    // ...\n    default:\n      if (Diag)\n        Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{z,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (EvaluatedSize.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{z,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (EvaluatedData.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}},
		[l]={
			["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"}
		}
	},
	["err_static_assert_invalid_message"]={
		[f]="err_static_assert_invalid_message",
		[e]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
		[g]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
		[h]=k,
		[j]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions",
		[b]=a,
		[c]=m,
		[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
		[d]={{z,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (!RD) {\n    Diag(Loc, diag::err_static_assert_invalid_message);"}},
		[l]={
			["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"}
		}
	},
	["err_static_assert_message_constexpr"]={
		[f]="err_static_assert_message_constexpr",
		[e]="the message in a static assertion must be produced by a constant expression",
		[g]="the message in a static assertion must be produced by a constant expression",
		[h]=k,
		[j]="the message in a static assertion must be produced by a constant expression",
		[b]=a,
		[c]=m,
		[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
		[d]={{z,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n    Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}},
		[l]={
			["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"}
		}
	},
	["err_static_assert_missing_member_function"]={
		[f]="err_static_assert_missing_member_function",
		[e]="the message object in this static assertion is missing %select{a \'size()\' member function|a \'data()\' member function|\'data()\' and \'size()\' member functions}0",
		[g]={{nil,nil,{"the message object in this static assertion is missing ",{"a \'size()\' member function","a \'data()\' member function","\'data()\' and \'size()\' member functions"}}}},
		[h]=k,
		[j]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)",
		[b]=a,
		[c]=m,
		[i]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
		[d]={{z,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (SizeNotFound || DataNotFound) {\n    Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}},
		[l]={
			["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"}
		}
	},
	["err_static_assert_requirement_failed"]={
		[f]={{nil,y,"err_static_assert_requirement_failed"}},
		[e]={{nil,r,"static assertion failed due to requirement \'%0\'%select{: %2|}1"},{B,y,"static_assert failed due to requirement \'%0\'%select{ %2|}1"}},
		[g]={{nil,r,{"static assertion failed due to requirement \'A\'",{": C",a}}},{B,y,{"static_assert failed due to requirement \'A\'",{" C",a}}}},
		[h]=k,
		[j]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)",
		[b]=a,
		[c]={{nil,y,m}},
		[i]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert.","Diagnostic specific failed condition in a static_assert.\n\nWhen a static_assert fails, dig out a specific condition to diagnose,\nusing the same logic that we use to find the enable_if condition to\ndiagnose.\n\nllvm-svn: 313315"},
		[d]={{z,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    // ...\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      // ...\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      // ...\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n        Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "}
		}
	},
	["err_static_block_func"]={
		[f]="err_static_block_func",
		[e]="function declared in block scope cannot have \'static\' storage class",
		[g]="function declared in block scope cannot have \'static\' storage class",
		[h]=k,
		[j]="function declared in block scope cannot have \'static\' storage class",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  // ...\n  case DeclSpec::SCS_static: {\n    if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n      // ...\n      SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}},
		[l]={
			["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:58:3: error: function declared in block scope cannot have \'static\' storage class"}
		}
	},
	["err_static_data_member_not_allowed_in_anon_struct"]={
		[f]="err_static_data_member_not_allowed_in_anon_struct",
		[e]={{nil,o,"static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1"},{p,nil,"static data member %0 not allowed in anonymous struct"}},
		[g]={{nil,o,{"static data member A not allowed in anonymous ",{Eb,"interface",Db,"class","enum"}}},{p,nil,"static data member A not allowed in anonymous struct"}},
		[h]=k,
		[j]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)",
		[b]=a,
		[c]=m,
		[i]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding\nrestriction and add some tests.\n\nllvm-svn: 150721"},
		[d]={{t,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        // ...\n        if (FunctionOrMethod) {\n        // ...\n        } else if (AnonStruct) {\n          // ...\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}},
		[l]={
			["clang/test/CXX/class/class.union/p2-0x.cpp"]={"clang/test/CXX/class/class.union/p2-0x.cpp:40:22: error: static data member \'n\' not allowed in anonymous union","clang/test/CXX/class/class.union/p2-0x.cpp:46:20: error: static data member \'k\' not allowed in anonymous union"}
		}
	},
	["err_static_data_member_not_allowed_in_local_class"]={
		[f]="err_static_data_member_not_allowed_in_local_class",
		[e]={{nil,o,"static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1"},{p,nil,"static data member %0 not allowed in local class %1"}},
		[g]={{nil,o,{"static data member A not allowed in local ",{Eb,"interface",Db,"class","enum"},hb}},{p,nil,"static data member A not allowed in local class B"}},
		[h]=k,
		[j]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)",
		[b]=a,
		[c]=m,
		[i]={"d2e8adfc7599",1245803333,"Support for [class.local]p4.","Support for [class.local]p4.\n\nllvm-svn: 74030"},
		[d]={{t,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        // ...\n        if (FunctionOrMethod) {\n          // ...\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}},
		[l]={
			["clang/test/SemaCXX/blocks.cpp"]={"clang/test/SemaCXX/blocks.cpp:160:18: error: static data member \'x\' not allowed in local class \'X\'","clang/test/SemaCXX/blocks.cpp:164:20: error: static data member \'z\' not allowed in local struct \'Z\'"}
		}
	},
	["err_static_data_member_reinitialization"]={
		[f]="err_static_data_member_reinitialization",
		[e]="static data member %0 already has an initializer",
		[g]="static data member A already has an initializer",
		[h]=k,
		[j]="static data member (.*?) already has an initializer",
		[b]=a,
		[c]=m,
		[i]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static","Provide better diagnostic wording for initializers on static\ndata member definitions when the variable has an initializer\nin its declaration.\n\nFor the following code:\n\n  struct S {\n    static const int x = 42;\n  };\n  const int S::x = 42;\n\nThis patch changes the diagnostic from:\n\n  a.cc:4:14: error: redefinition of \'x\'\n  const int S::x = 42;\n               ^\n  a.cc:2:20: note: previous definition is here\n    static const int x = 42;\n                     ^\nto:\n\n  a.cc:4:18: error: static data member \'x\' already has an initializer\n  const int S::x = 42;\n                   ^\n  a.cc:2:24: note: previous initialization is here\n    static const int x = 42;\n                         ^\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2235\n\nllvm-svn: 195306"},
		[d]={{t,13249,"/// 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 (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n    //   If a static data member is of const integral or const\n    //   enumeration type, its declaration in the class definition can\n    //   specify a constant-initializer which shall be an integral\n    //   constant expression (5.19). In that case, the member can appear\n    //   in integral constant expressions. The member shall still be\n    //   defined in a namespace scope if it is used in the program and the\n    //   namespace scope definition shall not contain an initializer.\n    //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n    if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n      Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}},
		[l]={
			["clang/test/CXX/class/class.static/class.static.data/p4.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p4.cpp:15:63: error: static data member \'i\' already has an initializer","clang/test/CXX/class/class.static/class.static.data/p4.cpp:20:62: error: static data member \'i\' already has an initializer"}
		}
	},
	["err_static_downcast_via_virtual"]={
		[f]="err_static_downcast_via_virtual",
		[e]="cannot cast %0 to %1 via virtual base %2",
		[g]="cannot cast A to B via virtual base C",
		[h]=k,
		[j]="cannot cast (.*?) to (.*?) via virtual base (.*?)",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{"clang/lib/Sema/SemaCast.cpp",1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (Paths.getDetectedVirtual() != nullptr) {\n    // ...\n    Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}},
		[l]={
			["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"}
		}
	},
	["err_static_function_scope"]={
		[f]="err_static_function_scope",
		[e]="variables in function scope cannot be declared static",
		[g]="variables in function scope cannot be declared static",
		[h]=k,
		[j]="variables in function scope cannot be declared static",
		[b]=a,
		[c]=m,
		[i]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2.\nAdd error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature.\nAdded test case for 1.2 static storage class feature.\n\nllvm-svn: 158759"},
		[d]={{t,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n  // scope.\n  if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n    Diag(NewVD->getLocation(), diag::err_static_function_scope);"}},
		[l]={
			["clang/test/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:117:14: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:124:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:170:16: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:177:25: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:182:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:189:22: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:198:24: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:207:24: error: variables in function scope cannot be declared static"}
		}
	},
	["err_static_illegal_in_new"]={
		[f]="err_static_illegal_in_new",
		[e]="the \'static\' modifier for the array size is not legal in new expressions",
		[g]="the \'static\' modifier for the array size is not legal in new expressions",
		[h]=k,
		[j]="the \'static\' modifier for the array size is not legal in new expressions",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{rb,1866,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///   if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    // ...\n    if (Chunk.Arr.hasStatic)\n      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}}
	},
	["err_static_kernel"]={
		[f]="err_static_kernel",
		[e]="kernel functions cannot be declared static",
		[g]="kernel functions cannot be declared static",
		[h]=k,
		[j]="kernel functions cannot be declared static",
		[b]=a,
		[c]=m,
		[i]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2.\nAdd error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature.\nAdded test case for 1.2 static storage class feature.\n\nllvm-svn: 158759"},
		[d]={{t,10691,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n    if (SC == SC_Static) {\n      Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}},
		[l]={
			["clang/test/SemaOpenCL/storageclass-cl20.cl"]={"clang/test/SemaOpenCL/storageclass-cl20.cl:22:20: error: kernel functions cannot be declared static"}
		}
	},
	["err_static_lambda"]={
		["groups"]={"c++23-extensions","c++2b-extensions"},
		["maingroup"]="c++23-extensions",
		[f]={{nil,M,"err_static_lambda"}},
		[e]="static lambdas are a C++23 extension",
		[g]="static lambdas are a C++23 extension",
		[h]="(?:warning|error|fatal error)\\: ",
		[j]="static lambdas are a C\\+\\+23 extension",
		[b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]",
		[c]={{nil,M,s}},
		[i]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
		[d]={{qb,1210,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:1043:33: warning: static lambdas are a C++23 extension [-Wc++23-extensions]"}
		}
	},
	["err_static_lambda_captures"]={
		[f]={{nil,M,"err_static_lambda_captures"}},
		[e]={{nil,M,"a static lambda cannot have any captures"}},
		[g]={{nil,M,"a static lambda cannot have any captures"}},
		[h]=k,
		[j]="a static lambda cannot have any captures",
		[b]=a,
		[c]={{nil,M,s}},
		[i]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
		[d]={{qb,1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // ...\n  if (Intro.hasLambdaCapture()) {\n    P.Diag(StaticLoc, diag::err_static_lambda_captures);"}},
		[l]={
			["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"}
		}
	},
	["err_static_main"]={
		[f]="err_static_main",
		[e]="\'main\' is not allowed to be declared static",
		[g]="\'main\' is not allowed to be declared static",
		[h]=k,
		[j]="\'main\' is not allowed to be declared static",
		[b]=a,
		[c]=m,
		[i]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics.\n\nllvm-svn: 139282"},
		[d]={{t,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //   A program that [...] declares main to be inline, static or\n  //   constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //   appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
		[l]={
			["clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:10:1: error: \'main\' is not allowed to be declared static"}
		}
	},
	["err_static_mutable_lambda"]={
		[f]={{nil,M,"err_static_mutable_lambda"}},
		[e]={{nil,M,"lambda cannot be both mutable and static"}},
		[g]={{nil,M,"lambda cannot be both mutable and static"}},
		[h]=k,
		[j]="lambda cannot be both mutable and static",
		[b]=a,
		[c]={{nil,M,s}},
		[i]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
		[d]={{qb,1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // ...\n  // [expr.prim.lambda.general] p4\n  // The lambda-specifier-seq shall not contain both mutable and static.\n  // If the lambda-specifier-seq contains static, there shall be no\n  // lambda-capture.\n  if (MutableLoc.isValid())\n    P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}},
		[l]={
			["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"}
		}
	},
	["err_static_non_static"]={
		[f]="err_static_non_static",
		[e]="static declaration of %0 follows non-static declaration",
		[g]="static declaration of A follows non-static declaration",
		[h]=k,
		[j]="static declaration of (.*?) follows non\\-static declaration",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,3702,"/// 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  // Don\'t complain about this if we\'re in GNU89 mode and the old function\n  // is an extern inline function.\n  // Don\'t complain about specializations. They are not supposed to have\n  // storage classes.\n  if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n    if (getLangOpts().MicrosoftExt) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New;"},{t,4633,"/// 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  // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n  if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n    if (getLangOpts().MicrosoftExt) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}},
		[l]={
			["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: error: static declaration of \'operator delete\' follows non-static declaration"}
		}
	},
	["err_static_not_bitfield"]={
		[f]="err_static_not_bitfield",
		[e]="static member %0 cannot be a bit-field",
		[g]="static member A cannot be a bit-field",
		[h]=k,
		[j]="static member (.*?) cannot be a bit\\-field",
		[b]=a,
		[c]=m,
		[i]={L,1236199783,K,J},
		[d]={{z,3626,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n  // ...\n  } else {\n    // ...\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      // ...\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n        // ...\n        Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"}
		}
	},
	["err_static_out_of_line"]={
		[f]="err_static_out_of_line",
		[e]="\'static\' can only be specified inside the class definition",
		[g]="\'static\' can only be specified inside the class definition",
		[h]=k,
		[j]="\'static\' can only be specified inside the class definition",
		[b]=a,
		[c]=m,
		[i]={D,1237025389,F,G},
		[d]={{t,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      // ...\n      case SC_Static:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{t,10052,"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 (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n      // ...\n      Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:32:12: error: \'static\' can only be specified inside the class definition"}
		}
	},
	["err_static_overrides_virtual"]={
		[f]="err_static_overrides_virtual",
		[e]="\'static\' member function %0 overrides a virtual function in a base class",
		[g]="\'static\' member function A overrides a virtual function in a base class",
		[h]=k,
		[j]="\'static\' member function (.*?) overrides a virtual function in a base class",
		[b]=a,
		[c]=m,
		[i]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function","Diagnose when a \'static\' member function overrides a virtual function\nin a base class. Fixes PR8168.\n\nllvm-svn: 116448"},
		[d]={{z,7018,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // A static function cannot override anything.\n    if (MD->getStorageClass() == SC_Static) {\n      if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}},
		[l]={
			["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"}
		}
	},
	["err_statically_allocated_object"]={
		[f]="err_statically_allocated_object",
		[e]="interface type cannot be statically allocated",
		[g]="interface type cannot be statically allocated",
		[h]=k,
		[j]="interface type cannot be statically allocated",
		[b]=a,
		[c]=m,
		[i]={L,1236199783,K,J},
		[d]={{t,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{t,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // ...\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    // ...\n    if (FDTy->isFunctionType()) {\n    // ...\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    // ...\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n    // ...\n    } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n    // ...\n    } else if (FDTy->isObjCObjectType()) {\n      // ...\n      Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{bb,608,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if (T->isObjCObjectType()) {\n    // ...\n    Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}},
		[l]={
			["clang/test/SemaObjC/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"}
		}
	},
	["err_std_compare_type_not_supported"]={
		[f]={{nil,S,"err_std_compare_type_not_supported"}},
		[e]={{nil,S,"standard library implementation of %0 is not supported; %select{member \'%2\' does not have expected form|member \'%2\' is missing|the type is not trivially copyable|the type does not have the expected form}1"}},
		[g]={{nil,S,{"standard library implementation of A is not supported; ",{"member \'C\' does not have expected form","member \'C\' is missing","the type is not trivially copyable","the type does not have the expected form"}}}},
		[h]=k,
		[j]="standard library implementation of (.*?) is not supported; (?:member \'(.*?)\' does not have expected form|member \'(.*?)\' is missing|the type is not trivially copyable|the type does not have the expected form)",
		[b]=a,
		[c]={{nil,S,I}},
		[i]={"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]={{z,11591,"struct InvalidSTLDiagnoser {\n  // ...\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    {\n      auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}},
		[l]={
			["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"}
		}
	},
	["err_std_source_location_impl_malformed"]={
		[f]={{nil,r,"err_std_source_location_impl_malformed"}},
		[e]={{nil,r,"\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}},
		[g]={{nil,r,"\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}},
		[h]=k,
		[j]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
		[b]=a,
		[c]={{nil,r,I}},
		[i]={Kb,1620118562,Rb,Tb},
		[d]={{x,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // ...\n  // Verify that __impl is a trivial struct type, with no base classes, and with\n  // only the four expected fields.\n  if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{x,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // ...\n  if (Count != 4) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}},
		[l]={
			["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}
		}
	},
	["err_std_source_location_impl_not_found"]={
		[f]={{nil,r,"err_std_source_location_impl_not_found"}},
		[e]={{nil,r,"\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}},
		[g]={{nil,r,"\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}},
		[h]=k,
		[j]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
		[b]=a,
		[c]={{nil,r,I}},
		[i]={Kb,1620118562,Rb,Tb},
		[d]={{x,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n    S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}},
		[l]={
			["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}
		}
	},
	["err_std_type_trait_not_class_template"]={
		[f]="err_std_type_trait_not_class_template",
		[e]="unsupported standard library implementation: \'std::%0\' is not a class template",
		[g]="unsupported standard library implementation: \'std::A\' is not a class template",
		[h]=k,
		[j]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template",
		[b]=a,
		[c]=m,
		[i]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a","P0217R3: Perform semantic checks and initialization for the bindings in a\ndecomposition declaration for arrays, aggregate-like structs, tuple-like\ntypes, and (as an extension) for complex and vector types.\n\nllvm-svn: 278435"},
		[d]={{z,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  // ...\n  if (!TraitTD) {\n    // ...\n    S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}}
	},
	["err_stmt_expr_in_default_arg"]={
		[f]={{nil,r,"err_stmt_expr_in_default_arg"}},
		[e]={{nil,r,"default %select{argument|non-type template argument}0 may not use a GNU statement expression"}},
		[g]={{nil,r,{"default ",{"argument","non-type template argument"}," may not use a GNU statement expression"}}},
		[h]=k,
		[j]="default (?:argument|non\\-type template argument) may not use a GNU statement expression",
		[b]=a,
		[c]={{nil,r,m}},
		[i]={Kb,1620118562,Rb,Tb},
		[d]={{vb,7470,"/// 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      // Parse the default argument, if any. We parse the default\n      // arguments in all dialects; the semantic analysis in\n      // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // ...\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n        // ...\n        } else {\n          // ...\n          if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n          // ...\n          } else {\n            if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n              Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{"clang/lib/Parse/ParseTemplate.cpp",1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n///       template-parameter:\n///         ...\n///         parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n      Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}},
		[l]={
			["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"}
		}
	},
	["err_stmtexpr_file_scope"]={
		[f]="err_stmtexpr_file_scope",
		[e]="statement expression not allowed at file scope",
		[g]="statement expression not allowed at file scope",
		[h]=k,
		[j]="statement expression not allowed at file scope",
		[b]=a,
		[c]=s,
		[i]={D,1237025389,F,G},
		[d]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// 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    if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n      Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}},
		[l]={
			["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:24:11: error: statement expression not allowed at file scope"}
		}
	},
	["err_storage_class_for_static_member"]={
		[f]="err_storage_class_for_static_member",
		[e]="static data member definition cannot specify a storage class",
		[g]="static data member definition cannot specify a storage class",
		[h]=k,
		[j]="static data member definition cannot specify a storage class",
		[b]=a,
		[c]=m,
		[i]={"45f96f87c3cf",1371649314,"Fix pr16354.","Fix pr16354.\n\nWe now reject things like\n\nstruct ABC {\n  static double a;\n};\nregister double ABC::a = 1.0;\n\nllvm-svn: 184300"},
		[d]={{t,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      // ...\n      case SC_Auto:\n      case SC_Register:\n      case SC_Extern:\n        // ...\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
		[l]={
			["clang/test/SemaCXX/static-data-member.cpp"]={"clang/test/SemaCXX/static-data-member.cpp:13:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:15:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:16:1: error: static data member definition cannot specify a storage class"}
		}
	},
	["err_storage_spec_on_catch_parm"]={
		[f]="err_storage_spec_on_catch_parm",
		[e]="@catch parameter cannot have storage specifier \'%0\'",
		[g]="@catch parameter cannot have storage specifier \'A\'",
		[h]=k,
		[j]="@catch parameter cannot have storage specifier \'(.*?)\'",
		[b]=a,
		[c]=m,
		[i]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"},
		[d]={{ab,5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // We allow the \"register\" storage class on exception variables because\n  // GCC did, but we drop it completely. Any other storage class is an error.\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n  // ...\n  } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}},
		[l]={
			["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"}
		}
	},
	["err_storageclass_invalid_for_member"]={
		[f]="err_storageclass_invalid_for_member",
		[e]="storage class specified for a member declaration",
		[g]="storage class specified for a member declaration",
		[h]=k,
		[j]="storage class specified for a member declaration",
		[b]=a,
		[c]=m,
		[i]={L,1236199783,K,J},
		[d]={{z,3495,"/// 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  default:\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}},
		[l]={
			["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"}
		}
	},
	["err_store_value_to_reg"]={
		[f]={{nil,r,"err_store_value_to_reg"}},
		[e]={{nil,r,"impossible constraint in asm: can\'t store value into a register"}},
		[g]={{nil,r,"impossible constraint in asm: can\'t store value into a register"}},
		[h]=k,
		[j]="impossible constraint in asm\\: can\'t store value into a register",
		[b]=a,
		[c]={{nil,r,"Inline Assembly Issue"}},
		[i]={Kb,1620118562,Rb,Tb},
		[d]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n  // ...\n  for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n    // ...\n    // ResultTypeRequiresCast elements correspond to the first\n    // ResultTypeRequiresCast.size() elements of RegResults.\n    if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n      // ...\n      if (Ty.isNull()) {\n        // ...\n        CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"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 = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    // ...\n    // If the smaller value wasn\'t mentioned in the asm string, and if the\n    // output was a register, just extend the shorter one to the size of the\n    // larger one.\n    if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n      // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n      // crash when the size larger than the register size. So we limit it here.\n      if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n        targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}},
		[l]={
			["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:362:20: error: impossible constraint in asm: can\'t store value into a register"}
		}
	},
	["err_string_concat_mixed_suffix"]={
		[f]="err_string_concat_mixed_suffix",
		[e]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation",
		[g]="differing user-defined suffixes (\'A\' and \'B\') in string literal concatenation",
		[h]=k,
		[j]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation",
		[b]=a,
		[c]=v,
		[i]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token","Lexing support for user-defined literals. Currently these lex as the same token\nkinds as the underlying string literals, and we silently drop the ud-suffix;\nthose issues will be fixed by subsequent patches.\n\nllvm-svn: 152012"},
		[d]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  // ...\n  for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n    // ...\n    // Remove an optional ud-suffix.\n    if (ThisTokEnd[-1] != \'\"\') {\n      // ...\n      if (UDSuffixBuf.empty()) {\n      // ...\n      } else {\n        // ...\n        if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n          if (Diags) {\n            // ...\n            if (UnevaluatedStringHasUDL) {\n            // ...\n            } else {\n              Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}},
		[l]={
			["clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp:10:13: error: differing user-defined suffixes (\'_x\' and \'_y\') in string literal concatenation"}
		}
	},
	["err_strong_property"]={
		[f]="err_strong_property",
		[e]="existing instance variable %1 for strong property %0 may not be __weak",
		[g]="existing instance variable B for strong property A may not be __weak",
		[h]=k,
		[j]="existing instance variable (.*?) for strong property (.*?) may not be __weak",
		[b]=a,
		[c]=m,
		[i]={eb,1480718311,cb,db},
		[d]={{bb,1410,"/// 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    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // ...\n      // Fall thru - see previous comment\n      if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n        Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}},
		[l]={
			["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"}
		}
	},
	["err_subscript_function_type"]={
		[f]="err_subscript_function_type",
		[e]="subscript of pointer to function type %0",
		[g]="subscript of pointer to function type A",
		[h]=k,
		[j]="subscript of pointer to function type (.*?)",
		[b]=a,
		[c]=m,
		[i]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for","Make sure to use RequireCompleteType rather than testing for\nincomplete types. RequireCompleteType is needed when the type may be\ncompleted by instantiating a template.\n\nllvm-svn: 67643"},
		[d]={{x,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n  // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n  // type. Note that Functions are not objects, and that (in C99 parlance)\n  // incomplete types are not object types.\n  if (ResultType->isFunctionType()) {\n    Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}}
	},
	["err_subscript_incomplete_or_sizeless_type"]={
		[f]={{nil,o,"err_subscript_incomplete_or_sizeless_type"}},
		[e]={{nil,o,"subscript of pointer to %select{incomplete|sizeless}0 type %1"}},
		[g]={{nil,o,{"subscript of pointer to ",{"incomplete","sizeless"}," type B"}}},
		[h]=k,
		[j]="subscript of pointer to (?:incomplete|sizeless) type (.*?)",
		[b]=a,
		[c]={{nil,o,m}},
		[i]={X,1576908663,Y,V},
		[d]={{x,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}},
		[l]={
			["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"}
		}
	},
	["err_subscript_nonfragile_interface"]={
		[f]="err_subscript_nonfragile_interface",
		[e]="subscript requires size of interface %0, which is not constant for this architecture and platform",
		[g]="subscript requires size of interface A, which is not constant for this architecture and platform",
		[h]=k,
		[j]="subscript requires size of interface (.*?), which is not constant for this architecture and platform",
		[b]=a,
		[c]=m,
		[i]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode","Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode\n\nSeveral changes here:\n1. We change Type::isIncompleteType to realize that forward declared \n   interfaces are incomplete.  This eliminate special case code for this\n   from the sizeof path, and starts us rejecting P[4] when P is a pointer\n   to an incomplete interface.\n2. Explicitly reject P[4] when P points to an interface in non-fragile ABI\n   mode.\n3. Switch the sizeof(interface) diagnostic back to an error instead of a \n   warning in non-fragile abi mode.\n\nllvm-svn: 69943"},
		[d]={{x,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  // ...\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  // ...\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n    // ...\n    if (!LangOpts.isSubscriptPointerArithmetic()) {\n      Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}}
	}
};